Skip to content

Commit b3700e2

Browse files
authored
Simplify prop handler of XMLReader (#14023)
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.
1 parent 7428a92 commit b3700e2

File tree

2 files changed

+4
-25
lines changed

2 files changed

+4
-25
lines changed

ext/xmlreader/php_xmlreader.c

+4-24
Original file line numberDiff line numberDiff line change
@@ -112,15 +112,8 @@ static int xmlreader_property_reader(xmlreader_object *obj, xmlreader_prop_handl
112112
/* {{{ xmlreader_get_property_ptr_ptr */
113113
zval *xmlreader_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot)
114114
{
115-
xmlreader_object *obj;
116115
zval *retval = NULL;
117-
xmlreader_prop_handler *hnd = NULL;
118-
119-
obj = php_xmlreader_fetch_object(object);
120-
121-
if (obj->prop_handler != NULL) {
122-
hnd = zend_hash_find_ptr(obj->prop_handler, name);
123-
}
116+
xmlreader_prop_handler *hnd = zend_hash_find_ptr(&xmlreader_prop_handlers, name);
124117

125118
if (hnd == NULL) {
126119
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
133126
/* {{{ xmlreader_read_property */
134127
zval *xmlreader_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv)
135128
{
136-
xmlreader_object *obj;
137129
zval *retval = NULL;
138-
xmlreader_prop_handler *hnd = NULL;
139-
140-
obj = php_xmlreader_fetch_object(object);
141-
142-
if (obj->prop_handler != NULL) {
143-
hnd = zend_hash_find_ptr(obj->prop_handler, name);
144-
}
130+
xmlreader_object *obj = php_xmlreader_fetch_object(object);
131+
xmlreader_prop_handler *hnd = zend_hash_find_ptr(&xmlreader_prop_handlers, name);
145132

146133
if (hnd != NULL) {
147134
if (xmlreader_property_reader(obj, hnd, rv) == FAILURE) {
@@ -160,14 +147,8 @@ zval *xmlreader_read_property(zend_object *object, zend_string *name, int type,
160147
/* {{{ xmlreader_write_property */
161148
zval *xmlreader_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot)
162149
{
163-
xmlreader_object *obj;
164-
xmlreader_prop_handler *hnd = NULL;
150+
xmlreader_prop_handler *hnd = zend_hash_find_ptr(&xmlreader_prop_handlers, name);
165151

166-
obj = php_xmlreader_fetch_object(object);
167-
168-
if (obj->prop_handler != NULL) {
169-
hnd = zend_hash_find_ptr(obj->prop_handler, name);
170-
}
171152
if (hnd != NULL) {
172153
zend_throw_error(NULL, "Cannot modify readonly property %s::$%s", ZSTR_VAL(object->ce->name), ZSTR_VAL(name));
173154
} else {
@@ -354,7 +335,6 @@ zend_object *xmlreader_objects_new(zend_class_entry *class_type)
354335
intern = zend_object_alloc(sizeof(xmlreader_object), class_type);
355336
zend_object_std_init(&intern->std, class_type);
356337
object_properties_init(&intern->std, class_type);
357-
intern->prop_handler = &xmlreader_prop_handlers;
358338

359339
return &intern->std;
360340
}

ext/xmlreader/php_xmlreader.h

-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ typedef struct _xmlreader_object {
4343
/* strings must be set in input buffer as copy is required */
4444
xmlParserInputBufferPtr input;
4545
void *schema;
46-
HashTable *prop_handler;
4746
zend_object std;
4847
} xmlreader_object;
4948

0 commit comments

Comments
 (0)