mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
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:
parent
cf7c592143
commit
d24a04bba8
2 changed files with 20 additions and 45 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue