Skip to content

Commit 1d3922b

Browse files
committed
decoder: Optimise creating stdClass object vol. 2
1 parent 560d594 commit 1d3922b

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/simdjson_decoder.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,17 @@ get_key_with_optional_prefix(simdjson::dom::element &doc, std::string_view json_
6060
// Initialize stdClass object and return pointer to propertires HashTable
6161
static zend_always_inline HashTable* simdjson_init_object(zval *zv, uint32_t size) {
6262
#if PHP_VERSION_ID >= 80300
63-
size_t properties_size = zend_object_properties_size(zend_standard_class_def);
63+
ZEND_ASSERT(zend_standard_class_def->default_properties_count == 0);
64+
65+
// Allocate stdClass object
66+
ssize_t properties_size = (ssize_t)zend_object_properties_size(zend_standard_class_def);
6467
ZEND_ASSERT(properties_size == -16);
65-
zend_object *object = (zend_object*)emalloc(sizeof(zend_object) - properties_size);
68+
zend_object *object = (zend_object*)emalloc(sizeof(zend_object) + properties_size);
69+
70+
// Initialize object
6671
zend_object_std_init(object, zend_standard_class_def);
67-
// Initialize properties array to expected size
72+
73+
// Initialize properties HashTable to expected size
6874
object->properties = zend_new_array(size);
6975
zend_hash_real_init_mixed(object->properties);
7076
ZVAL_OBJ(zv, object);

0 commit comments

Comments
 (0)