Use fast ZPP in very commonly used DOM functions (#14077)

Start using fast ZPP in very commonly used DOM functions, and also try
to unify some branches by using RETURN_BOOL where appropriate.
This commit is contained in:
Niels Dossche 2024-04-30 17:29:33 +02:00 committed by GitHub
parent cf7c592143
commit d24a04bba8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 20 additions and 45 deletions

View file

@ -525,19 +525,17 @@ Since:
*/ */
PHP_METHOD(DOMDocument, createTextNode) PHP_METHOD(DOMDocument, createTextNode)
{ {
zval *id;
xmlNode *node; xmlNode *node;
xmlDocPtr docp; xmlDocPtr docp;
size_t value_len; size_t value_len;
dom_object *intern; dom_object *intern;
char *value; char *value;
id = ZEND_THIS; ZEND_PARSE_PARAMETERS_START(1, 1)
if (zend_parse_parameters(ZEND_NUM_ARGS(), "s", &value, &value_len) == FAILURE) { Z_PARAM_STRING(value, value_len)
RETURN_THROWS(); ZEND_PARSE_PARAMETERS_END();
}
DOM_GET_OBJ(docp, id, xmlDocPtr, intern); DOM_GET_OBJ(docp, ZEND_THIS, xmlDocPtr, intern);
node = xmlNewDocText(docp, BAD_CAST value); node = xmlNewDocText(docp, BAD_CAST value);
if (!node) { if (!node) {
@ -899,11 +897,12 @@ PHP_METHOD(DOM_Document, createElementNS)
{ {
xmlDocPtr docp; xmlDocPtr docp;
dom_object *intern; dom_object *intern;
zend_string *name = NULL, *uri; zend_string *name, *uri;
if (zend_parse_parameters(ZEND_NUM_ARGS(), "S!S", &uri, &name) == FAILURE) { ZEND_PARSE_PARAMETERS_START(2, 2)
RETURN_THROWS(); Z_PARAM_STR_OR_NULL(uri)
} Z_PARAM_STR(name)
ZEND_PARSE_PARAMETERS_END();
DOM_GET_OBJ(docp, ZEND_THIS, xmlDocPtr, intern); DOM_GET_OBJ(docp, ZEND_THIS, xmlDocPtr, intern);

View file

@ -1218,16 +1218,15 @@ Since:
*/ */
static void dom_node_remove_child(INTERNAL_FUNCTION_PARAMETERS, zend_class_entry *node_ce) static void dom_node_remove_child(INTERNAL_FUNCTION_PARAMETERS, zend_class_entry *node_ce)
{ {
zval *id, *node; zval *node;
xmlNodePtr child, nodep; xmlNodePtr child, nodep;
dom_object *intern, *childobj; dom_object *intern, *childobj;
id = ZEND_THIS; ZEND_PARSE_PARAMETERS_START(1, 1)
if (zend_parse_parameters(ZEND_NUM_ARGS(), "O", &node, node_ce) == FAILURE) { Z_PARAM_OBJECT_OF_CLASS(node, node_ce)
RETURN_THROWS(); ZEND_PARSE_PARAMETERS_END();
}
DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); DOM_GET_OBJ(nodep, ZEND_THIS, xmlNodePtr, intern);
if (!dom_node_children_valid(nodep)) { if (!dom_node_children_valid(nodep)) {
RETURN_FALSE; RETURN_FALSE;
@ -1420,26 +1419,14 @@ Since:
*/ */
PHP_METHOD(DOMNode, hasChildNodes) PHP_METHOD(DOMNode, hasChildNodes)
{ {
zval *id;
xmlNode *nodep; xmlNode *nodep;
dom_object *intern; dom_object *intern;
id = ZEND_THIS; ZEND_PARSE_PARAMETERS_NONE();
if (zend_parse_parameters_none() == FAILURE) {
RETURN_THROWS();
}
DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); DOM_GET_OBJ(nodep, ZEND_THIS, xmlNodePtr, intern);
if (!dom_node_children_valid(nodep)) { RETURN_BOOL(dom_node_children_valid(nodep) && nodep->children != NULL);
RETURN_FALSE;
}
if (nodep->children) {
RETURN_TRUE;
} else {
RETURN_FALSE;
}
} }
/* }}} end dom_node_has_child_nodes */ /* }}} end dom_node_has_child_nodes */
@ -1552,25 +1539,14 @@ Since: DOM Level 2
*/ */
PHP_METHOD(DOMNode, hasAttributes) PHP_METHOD(DOMNode, hasAttributes)
{ {
zval *id;
xmlNode *nodep; xmlNode *nodep;
dom_object *intern; dom_object *intern;
id = ZEND_THIS; ZEND_PARSE_PARAMETERS_NONE();
if (zend_parse_parameters_none() == FAILURE) {
RETURN_THROWS();
}
DOM_GET_OBJ(nodep, id, xmlNodePtr, intern); DOM_GET_OBJ(nodep, ZEND_THIS, xmlNodePtr, intern);
if (nodep->type != XML_ELEMENT_NODE) RETURN_BOOL(nodep->type == XML_ELEMENT_NODE && nodep->properties != NULL);
RETURN_FALSE;
if (nodep->properties) {
RETURN_TRUE;
} else {
RETURN_FALSE;
}
} }
/* }}} end dom_node_has_attributes */ /* }}} end dom_node_has_attributes */