From b2af709f87a97441c3ca7dba22e8534f4e5f3fca Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 20 Apr 2024 22:09:43 +0200 Subject: [PATCH] Simplify prop handler of XMLReader As XMLReader only exposes a single class, and the property handlers are statically set, we don't need to store the pointer to the property handler table inside the object. This simplifies the code and reduces the memory required for XMLReader. --- ext/xmlreader/php_xmlreader.c | 28 ++++------------------------ ext/xmlreader/php_xmlreader.h | 1 - 2 files changed, 4 insertions(+), 25 deletions(-) diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 94e0edf9ec38f..4674868370baa 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -112,15 +112,8 @@ static int xmlreader_property_reader(xmlreader_object *obj, xmlreader_prop_handl /* {{{ xmlreader_get_property_ptr_ptr */ zval *xmlreader_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot) { - xmlreader_object *obj; zval *retval = NULL; - xmlreader_prop_handler *hnd = NULL; - - obj = php_xmlreader_fetch_object(object); - - if (obj->prop_handler != NULL) { - hnd = zend_hash_find_ptr(obj->prop_handler, name); - } + xmlreader_prop_handler *hnd = zend_hash_find_ptr(&xmlreader_prop_handlers, name); if (hnd == NULL) { retval = zend_std_get_property_ptr_ptr(object, name, type, cache_slot); @@ -133,15 +126,9 @@ zval *xmlreader_get_property_ptr_ptr(zend_object *object, zend_string *name, int /* {{{ xmlreader_read_property */ zval *xmlreader_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv) { - xmlreader_object *obj; zval *retval = NULL; - xmlreader_prop_handler *hnd = NULL; - - obj = php_xmlreader_fetch_object(object); - - if (obj->prop_handler != NULL) { - hnd = zend_hash_find_ptr(obj->prop_handler, name); - } + xmlreader_object *obj = php_xmlreader_fetch_object(object); + xmlreader_prop_handler *hnd = zend_hash_find_ptr(&xmlreader_prop_handlers, name); if (hnd != NULL) { if (xmlreader_property_reader(obj, hnd, rv) == FAILURE) { @@ -160,14 +147,8 @@ zval *xmlreader_read_property(zend_object *object, zend_string *name, int type, /* {{{ xmlreader_write_property */ zval *xmlreader_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot) { - xmlreader_object *obj; - xmlreader_prop_handler *hnd = NULL; + xmlreader_prop_handler *hnd = zend_hash_find_ptr(&xmlreader_prop_handlers, name); - obj = php_xmlreader_fetch_object(object); - - if (obj->prop_handler != NULL) { - hnd = zend_hash_find_ptr(obj->prop_handler, name); - } if (hnd != NULL) { zend_throw_error(NULL, "Cannot modify readonly property %s::$%s", ZSTR_VAL(object->ce->name), ZSTR_VAL(name)); } else { @@ -354,7 +335,6 @@ zend_object *xmlreader_objects_new(zend_class_entry *class_type) intern = zend_object_alloc(sizeof(xmlreader_object), class_type); zend_object_std_init(&intern->std, class_type); object_properties_init(&intern->std, class_type); - intern->prop_handler = &xmlreader_prop_handlers; return &intern->std; } diff --git a/ext/xmlreader/php_xmlreader.h b/ext/xmlreader/php_xmlreader.h index 0289fb1d1aac6..b14b033a0eea6 100644 --- a/ext/xmlreader/php_xmlreader.h +++ b/ext/xmlreader/php_xmlreader.h @@ -43,7 +43,6 @@ typedef struct _xmlreader_object { /* strings must be set in input buffer as copy is required */ xmlParserInputBufferPtr input; void *schema; - HashTable *prop_handler; zend_object std; } xmlreader_object;