From cbe65b9ad6a475321b6b6a6ed0198dd71aef00de Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Mon, 30 May 2016 11:44:12 +0800 Subject: [PATCH] Fixed issue #20 (PHP 7: Lua::eval(): unsupported type `unknown' for lua) --- lua.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lua.c b/lua.c index e79c390..8809f4d 100755 --- a/lua.c +++ b/lua.c @@ -351,7 +351,7 @@ zval *php_lua_get_zval_from_lua(lua_State *L, int index, zval *lua_obj, zval *rv break; } - switch(Z_TYPE(key)) { + switch (Z_TYPE(key)) { case IS_DOUBLE: case IS_LONG: add_index_zval(rv, Z_DVAL(key), &val); @@ -401,6 +401,7 @@ zval *php_lua_get_zval_from_lua(lua_State *L, int index, zval *lua_obj, zval *rv int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { +try_again: switch (Z_TYPE_P(val)) { case IS_TRUE: lua_pushboolean(L, 1); @@ -408,6 +409,7 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { case IS_FALSE: lua_pushboolean(L, 0); break; + case IS_UNDEF: case IS_NULL: lua_pushnil(L); break; @@ -472,6 +474,14 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { } } break; + case IS_REFERENCE: + ZVAL_DEREF(val); + goto try_again; + break; + case IS_INDIRECT: + val = Z_INDIRECT_P(val); + goto try_again; + break; default: php_error_docref(NULL, E_ERROR, "unsupported type `%s' for lua", zend_zval_type_name(val)); lua_pushnil(L);