@@ -57,18 +57,21 @@ get_key_with_optional_prefix(simdjson::dom::element &doc, std::string_view json_
57
57
return doc.at_pointer (std_pointer);
58
58
}
59
59
60
- static zend_always_inline zend_object* simdjson_init_object (zval *zv, uint32_t size) {
60
+ // Initialize stdClass object and return pointer to propertires HashTable
61
+ static zend_always_inline HashTable* simdjson_init_object (zval *zv, uint32_t size) {
61
62
#if PHP_VERSION_ID >= 80300
62
- zend_object *object = (zend_object*)emalloc (sizeof (zend_object) + zend_object_properties_size (zend_standard_class_def));
63
+ size_t properties_size = zend_object_properties_size (zend_standard_class_def);
64
+ ZEND_ASSERT (properties_size == -16 );
65
+ zend_object *object = (zend_object*)emalloc (sizeof (zend_object) - properties_size);
63
66
zend_object_std_init (object, zend_standard_class_def);
64
67
// Initialize properties array to expected size
65
68
object->properties = zend_new_array (size);
66
69
zend_hash_real_init_mixed (object->properties );
67
70
ZVAL_OBJ (zv, object);
68
- return object;
71
+ return object-> properties ;
69
72
#else
70
73
object_init (zv);
71
- return Z_OBJ_P (zv);
74
+ return zend_std_get_properties ( Z_OBJ_P (zv) );
72
75
#endif
73
76
}
74
77
@@ -540,8 +543,7 @@ static simdjson_php_error_code simdjson_create_object(simdjson::dom::element ele
540
543
}
541
544
case simdjson::dom::element_type::OBJECT : {
542
545
const auto json_object = element.get_object ().value_unsafe ();
543
- zend_object *obj = simdjson_init_object (return_value, json_object.size ());
544
- HashTable *ht = zend_std_get_properties (obj);
546
+ HashTable *ht = simdjson_init_object (return_value, json_object.size ());
545
547
546
548
for (simdjson::dom::key_value_pair field : json_object) {
547
549
const char *data = field.key .data ();
0 commit comments