diff --git a/config.m4 b/config.m4 index 19341af..ab64009 100755 --- a/config.m4 +++ b/config.m4 @@ -1,4 +1,3 @@ -dnl $Id: config.m4 321796 2012-01-05 17:23:48Z laruence $ PHP_ARG_WITH(lua, for lua support, [ --with-lua=[DIR] Include php lua support]) PHP_ARG_WITH(lua-version, to specify a custom lua version, [ --with-lua-version=[VERSION]] Use the specified lua version.) diff --git a/lua.c b/lua.c index 310bf8f..c532e52 100755 --- a/lua.c +++ b/lua.c @@ -430,13 +430,29 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { zval zkey; HashTable *ht = HASH_OF(val); - if (ZEND_HASH_APPLY_PROTECTION(ht)) { - ZEND_HASH_INC_APPLY_COUNT(ht); - if (ZEND_HASH_GET_APPLY_COUNT(ht) > 1) { + if ( +#if PHP_VERSION_ID < 70300 + ZEND_HASH_APPLY_PROTECTION(ht) +#else + !(GC_FLAGS(ht) & GC_IMMUTABLE) +#endif + ) { + if ( +#if PHP_VERSION_ID < 70300 + ZEND_HASH_GET_APPLY_COUNT(ht) +#else + GC_IS_RECURSIVE(ht) +#endif + ) { + php_error_docref(NULL, E_ERROR, "recursion found"); - ZEND_HASH_DEC_APPLY_COUNT(ht); break; } +#if PHP_VERSION_ID < 70300 + ZEND_HASH_INC_APPLY_COUNT(ht); +#else + GC_PROTECT_RECURSION(ht); +#endif } lua_newtable(L); @@ -452,8 +468,18 @@ int php_lua_send_zval_to_lua(lua_State *L, zval *val) /* {{{ */ { lua_settable(L, -3); } ZEND_HASH_FOREACH_END(); - if (ZEND_HASH_APPLY_PROTECTION(ht)) { + if ( +#if PHP_VERSION_ID < 70300 + ZEND_HASH_APPLY_PROTECTION(ht) +#else + !(GC_FLAGS(ht) & GC_IMMUTABLE) +#endif + ) { +#if PHP_VERSION_ID < 70300 ZEND_HASH_DEC_APPLY_COUNT(ht); +#else + GC_UNPROTECT_RECURSION(ht); +#endif } } } diff --git a/php_lua.h b/php_lua.h index 8d0c02e..40b7a09 100644 --- a/php_lua.h +++ b/php_lua.h @@ -48,7 +48,7 @@ extern zend_module_entry lua_module_entry; #define LUA_G(v) (lua_globals.v) #endif -#define PHP_LUA_VERSION "2.0.6-dev" +#define PHP_LUA_VERSION "2.0.6" struct _php_lua_object { lua_State *L;