Skip to content

Commit 80a4783

Browse files
authored
Deduplicate NULL checks in ext/dom (#15015)
This introduces a new helper php_dom_create_nullable_object() that does the NULL check and puts NULL in return_value. Otherwise it runs php_dom_create_object(). This deduplicates a bit of code.
1 parent 27205bd commit 80a4783

File tree

8 files changed

+24
-71
lines changed

8 files changed

+24
-71
lines changed

ext/dom/attr.c

+1-5
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,8 @@ zend_result dom_attr_owner_element_read(dom_object *obj, zval *retval)
163163
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
164164

165165
xmlNodePtr nodeparent = nodep->parent;
166-
if (!nodeparent) {
167-
ZVAL_NULL(retval);
168-
return SUCCESS;
169-
}
170166

171-
php_dom_create_object(nodeparent, retval, obj);
167+
php_dom_create_nullable_object(nodeparent, retval, obj);
172168
return SUCCESS;
173169
}
174170

ext/dom/document.c

+2-10
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,8 @@ zend_result dom_document_doctype_read(dom_object *obj, zval *retval)
5050
DOM_PROP_NODE(xmlDocPtr, docp, obj);
5151

5252
xmlDtdPtr dtdptr = xmlGetIntSubset(docp);
53-
if (!dtdptr) {
54-
ZVAL_NULL(retval);
55-
return SUCCESS;
56-
}
5753

58-
php_dom_create_object((xmlNodePtr) dtdptr, retval, obj);
54+
php_dom_create_nullable_object((xmlNodePtr) dtdptr, retval, obj);
5955
return SUCCESS;
6056
}
6157

@@ -83,12 +79,8 @@ zend_result dom_document_document_element_read(dom_object *obj, zval *retval)
8379
DOM_PROP_NODE(xmlDocPtr, docp, obj);
8480

8581
xmlNodePtr root = xmlDocGetRootElement(docp);
86-
if (!root) {
87-
ZVAL_NULL(retval);
88-
return SUCCESS;
89-
}
9082

91-
php_dom_create_object(root, retval, obj);
83+
php_dom_create_nullable_object(root, retval, obj);
9284
return SUCCESS;
9385
}
9486

ext/dom/entityreference.c

+1-5
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,8 @@ zend_result dom_entity_reference_child_read(dom_object *obj, zval *retval)
8585
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
8686

8787
xmlEntityPtr entity = dom_entity_reference_fetch_and_sync_declaration(nodep);
88-
if (entity == NULL) {
89-
ZVAL_NULL(retval);
90-
return SUCCESS;
91-
}
9288

93-
php_dom_create_object((xmlNodePtr) entity, retval, obj);
89+
php_dom_create_nullable_object((xmlNodePtr) entity, retval, obj);
9490
return SUCCESS;
9591
}
9692

ext/dom/html_document.c

+1-5
Original file line numberDiff line numberDiff line change
@@ -1386,11 +1386,7 @@ zend_result dom_html_document_element_read_helper(dom_object *obj, zval *retval,
13861386
DOM_PROP_NODE(const xmlDoc *, docp, obj);
13871387

13881388
const xmlNode *element = dom_html_document_element_read_raw(docp, accept);
1389-
if (element == NULL) {
1390-
ZVAL_NULL(retval);
1391-
} else {
1392-
php_dom_create_object((xmlNodePtr) element, retval, obj);
1393-
}
1389+
php_dom_create_nullable_object((xmlNodePtr) element, retval, obj);
13941390

13951391
return SUCCESS;
13961392
}

ext/dom/node.c

+6-34
Original file line numberDiff line numberDiff line change
@@ -304,12 +304,7 @@ zend_result dom_node_first_child_read(dom_object *obj, zval *retval)
304304
first = nodep->children;
305305
}
306306

307-
if (!first) {
308-
ZVAL_NULL(retval);
309-
return SUCCESS;
310-
}
311-
312-
php_dom_create_object(first, retval, obj);
307+
php_dom_create_nullable_object(first, retval, obj);
313308
return SUCCESS;
314309
}
315310

@@ -329,12 +324,7 @@ zend_result dom_node_last_child_read(dom_object *obj, zval *retval)
329324
last = nodep->last;
330325
}
331326

332-
if (!last) {
333-
ZVAL_NULL(retval);
334-
return SUCCESS;
335-
}
336-
337-
php_dom_create_object(last, retval, obj);
327+
php_dom_create_nullable_object(last, retval, obj);
338328
return SUCCESS;
339329
}
340330

@@ -350,12 +340,8 @@ zend_result dom_node_previous_sibling_read(dom_object *obj, zval *retval)
350340
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
351341

352342
xmlNodePtr prevsib = nodep->prev;
353-
if (!prevsib) {
354-
ZVAL_NULL(retval);
355-
return SUCCESS;
356-
}
357343

358-
php_dom_create_object(prevsib, retval, obj);
344+
php_dom_create_nullable_object(prevsib, retval, obj);
359345
return SUCCESS;
360346
}
361347

@@ -371,12 +357,8 @@ zend_result dom_node_next_sibling_read(dom_object *obj, zval *retval)
371357
DOM_PROP_NODE(xmlNodePtr, nodep, obj);
372358

373359
xmlNodePtr nextsib = nodep->next;
374-
if (!nextsib) {
375-
ZVAL_NULL(retval);
376-
return SUCCESS;
377-
}
378360

379-
php_dom_create_object(nextsib, retval, obj);
361+
php_dom_create_nullable_object(nextsib, retval, obj);
380362
return SUCCESS;
381363
}
382364

@@ -397,12 +379,7 @@ zend_result dom_node_previous_element_sibling_read(dom_object *obj, zval *retval
397379
prevsib = prevsib->prev;
398380
}
399381

400-
if (!prevsib) {
401-
ZVAL_NULL(retval);
402-
return SUCCESS;
403-
}
404-
405-
php_dom_create_object(prevsib, retval, obj);
382+
php_dom_create_nullable_object(prevsib, retval, obj);
406383
return SUCCESS;
407384
}
408385

@@ -423,12 +400,7 @@ zend_result dom_node_next_element_sibling_read(dom_object *obj, zval *retval)
423400
nextsib = nextsib->next;
424401
}
425402

426-
if (!nextsib) {
427-
ZVAL_NULL(retval);
428-
return SUCCESS;
429-
}
430-
431-
php_dom_create_object(nextsib, retval, obj);
403+
php_dom_create_nullable_object(nextsib, retval, obj);
432404
return SUCCESS;
433405
}
434406

ext/dom/parentnode/tree.c

+2-12
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,7 @@ zend_result dom_parent_node_first_element_child_read(dom_object *obj, zval *retv
3939
first = first->next;
4040
}
4141

42-
if (!first) {
43-
ZVAL_NULL(retval);
44-
return SUCCESS;
45-
}
46-
47-
php_dom_create_object(first, retval, obj);
42+
php_dom_create_nullable_object(first, retval, obj);
4843
return SUCCESS;
4944
}
5045
/* }}} */
@@ -63,12 +58,7 @@ zend_result dom_parent_node_last_element_child_read(dom_object *obj, zval *retva
6358
last = last->prev;
6459
}
6560

66-
if (!last) {
67-
ZVAL_NULL(retval);
68-
return SUCCESS;
69-
}
70-
71-
php_dom_create_object(last, retval, obj);
61+
php_dom_create_nullable_object(last, retval, obj);
7262
return SUCCESS;
7363
}
7464
/* }}} */

ext/dom/php_dom.c

+10
Original file line numberDiff line numberDiff line change
@@ -1606,6 +1606,16 @@ static zend_always_inline zend_class_entry *dom_get_element_ce(const xmlNode *no
16061606
}
16071607
}
16081608

1609+
bool php_dom_create_nullable_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
1610+
{
1611+
if (!obj) {
1612+
ZVAL_NULL(return_value);
1613+
return false;
1614+
}
1615+
1616+
return php_dom_create_object(obj, return_value, domobj);
1617+
}
1618+
16091619
/* {{{ php_dom_create_object */
16101620
PHP_DOM_EXPORT bool php_dom_create_object(xmlNodePtr obj, zval *return_value, dom_object *domobj)
16111621
{

ext/dom/php_dom.h

+1
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ const char *dom_locate_a_namespace(const xmlNode *node, const zend_string *prefi
179179
void dom_mark_namespaces_as_attributes_too(php_dom_libxml_ns_mapper *ns_mapper, xmlDocPtr doc);
180180
bool dom_compare_value(const xmlAttr *attr, const xmlChar *value);
181181
void dom_attr_value_will_change(dom_object *obj, xmlAttrPtr attrp);
182+
bool php_dom_create_nullable_object(xmlNodePtr obj, zval *return_value, dom_object *domobj);
182183

183184
typedef enum {
184185
DOM_LOAD_STRING = 0,

0 commit comments

Comments
 (0)