|
@@ -955,21 +955,20 @@ static v8::Local<v8::Object> v8js_wrap_array_to_object(v8::Isolate *isolate, zva
|
|
if (i > 0)
|
|
if (i > 0)
|
|
{
|
|
{
|
|
zval *data;
|
|
zval *data;
|
|
- HashTable *tmp_ht;
|
|
|
|
|
|
|
|
- ZEND_HASH_FOREACH_KEY_VAL(myht, index, key, data) {
|
|
|
|
- tmp_ht = HASH_OF(data);
|
|
|
|
|
|
+#if PHP_VERSION_ID >= 70300
|
|
|
|
+ if (myht && !(GC_FLAGS(myht) & GC_IMMUTABLE)) {
|
|
|
|
+#else
|
|
|
|
+ if (myht) {
|
|
|
|
+#endif
|
|
|
|
+ GC_PROTECT_RECURSION(myht);
|
|
|
|
+ }
|
|
|
|
|
|
- if (tmp_ht) {
|
|
|
|
- ZEND_HASH_INC_APPLY_COUNT(tmp_ht);
|
|
|
|
- }
|
|
|
|
|
|
+ ZEND_HASH_FOREACH_KEY_VAL(myht, index, key, data) {
|
|
|
|
|
|
if (key) {
|
|
if (key) {
|
|
if (ZSTR_VAL(key)[0] == '\0' && Z_TYPE_P(value) == IS_OBJECT) {
|
|
if (ZSTR_VAL(key)[0] == '\0' && Z_TYPE_P(value) == IS_OBJECT) {
|
|
/* Skip protected and private members. */
|
|
/* Skip protected and private members. */
|
|
- if (tmp_ht) {
|
|
|
|
- ZEND_HASH_DEC_APPLY_COUNT(tmp_ht);
|
|
|
|
- }
|
|
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -991,10 +990,16 @@ static v8::Local<v8::Object> v8js_wrap_array_to_object(v8::Isolate *isolate, zva
|
|
newobj->Set(static_cast<uint32_t>(index), zval_to_v8js(data, isolate));
|
|
newobj->Set(static_cast<uint32_t>(index), zval_to_v8js(data, isolate));
|
|
}
|
|
}
|
|
|
|
|
|
- if (tmp_ht) {
|
|
|
|
- ZEND_HASH_DEC_APPLY_COUNT(tmp_ht);
|
|
|
|
- }
|
|
|
|
} ZEND_HASH_FOREACH_END();
|
|
} ZEND_HASH_FOREACH_END();
|
|
|
|
+
|
|
|
|
+#if PHP_VERSION_ID >= 70300
|
|
|
|
+ if (myht && !(GC_FLAGS(myht) & GC_IMMUTABLE)) {
|
|
|
|
+#else
|
|
|
|
+ if (myht) {
|
|
|
|
+#endif
|
|
|
|
+ GC_UNPROTECT_RECURSION(myht);
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
return newobj;
|
|
return newobj;
|