cvs: php4 /ext/xml php_xml.h xml.c
| From: | Sterling Hughes | Date: | Thu, 22 May 2003 03:04:11 +0000 |
| Subject: | cvs: php4 /ext/xml php_xml.h xml.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-21208@lists.php.net to get a copy of this message | ||
sterling Wed May 21 23:04:11 2003 EDT
Modified files:
/php4/ext/xml php_xml.h xml.c
Log:
take advantage of the fast_call_user_function() api call for all of the
callbacks.
Index: php4/ext/xml/php_xml.h diff -u php4/ext/xml/php_xml.h:1.23 php4/ext/xml/php_xml.h:1.24 --- php4/ext/xml/php_xml.h:1.23 Tue May 6 15:38:49 2003 +++ php4/ext/xml/php_xml.h Wed May 21 23:04:11 2003 @@ -14,10 +14,11 @@ +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken <ssb@php.net> | | Thies C. Arntzen <thies@thieso.net> | + | Sterling Hughes <sterling@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: php_xml.h,v 1.23 2003/05/06 19:38:49 sterling Exp $ */ +/* $Id: php_xml.h,v 1.24 2003/05/22 03:04:11 sterling Exp $ */ #ifndef PHP_XML_H #define PHP_XML_H @@ -53,6 +54,7 @@ int case_folding; XML_Parser parser; XML_Char *target_encoding; + zval *startElementHandler; zval *endElementHandler; zval *characterDataHandler; @@ -61,9 +63,22 @@ zval *unparsedEntityDeclHandler; zval *notationDeclHandler; zval *externalEntityRefHandler; - zval *unknownEncodingHandler; + zval *unknownEncodingHandler; zval *startNamespaceDeclHandler; zval *endNamespaceDeclHandler; + + zend_function *startElementPtr; + zend_function *endElementPtr; + zend_function *characterDataPtr; + zend_function *processingInstructionPtr; + zend_function *defaultPtr; + zend_function *unparsedEntityDeclPtr; + zend_function *notationDeclPtr; + zend_function *externalEntityRefPtr; + zend_function *unknownEncodingPtr; + zend_function *startNamespaceDeclPtr; + zend_function *endNamespaceDeclPtr; + zval *object; zval *data; Index: php4/ext/xml/xml.c diff -u php4/ext/xml/xml.c:1.124 php4/ext/xml/xml.c:1.125 --- php4/ext/xml/xml.c:1.124 Sun May 11 05:04:05 2003 +++ php4/ext/xml/xml.c Wed May 21 23:04:11 2003 @@ -13,11 +13,12 @@ | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken <ssb@php.net> | - | Thies C. Arntzen <thies@thieso.net> | + | Thies C. Arntzen <thies@thieso.net> | + | Sterling Hughes <sterling@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: xml.c,v 1.124 2003/05/11 09:04:05 moriyoshi Exp $ */ +/* $Id: xml.c,v 1.125 2003/05/22 03:04:11 sterling Exp $ */ #define IS_EXT_MODULE @@ -79,7 +80,7 @@ inline static unsigned short xml_encode_us_ascii(unsigned char); inline static char xml_decode_us_ascii(unsigned short); static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *); -static zval *xml_call_handler(xml_parser *, zval *, int, zval **); +static zval *xml_call_handler(xml_parser *, zval *, zend_function *, int, zval **); static zval *_xml_xmlchar_zval(const XML_Char *, int, const XML_Char *); static int _xml_xmlcharlen(const XML_Char *); static void _xml_add_to_info(xml_parser *parser,char *name); @@ -385,20 +386,22 @@ /* }}} */ /* {{{ xml_call_handler() */ -static zval *xml_call_handler(xml_parser *parser, zval *handler, int argc, zval **argv) +static zval *xml_call_handler(xml_parser *parser, zval *handler, zend_function *function_ptr, int argc, zval **argv) { TSRMLS_FETCH(); if (parser && handler) { + zval ***args; zval *retval; int i; int result; - MAKE_STD_ZVAL(retval); - ZVAL_FALSE(retval); - - result = call_user_function(EG(function_table), &parser->object, handler, retval, argc, argv TSRMLS_CC); - + args = emalloc(sizeof(zval **) * argc); + for (i = 0; i < argc; i++) { + args[i] = &argv[i]; + } + + result = fast_call_user_function(EG(function_table), &parser->object, handler, &retval, argc, args, 0, NULL, &function_ptr TSRMLS_CC); if (result == FAILURE) { zval **method; zval **obj; @@ -412,14 +415,14 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s::%s()", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method)); } else php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler"); - - zval_dtor(retval); - efree(retval); + + zval_ptr_dtor(&retval); } for (i = 0; i < argc; i++) { - zval_ptr_dtor(&(argv[i])); + zval_ptr_dtor(args[i]); } + efree(args); if (result == FAILURE) { return NULL; @@ -676,7 +679,7 @@ efree(att); } - if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) { + if ((retval = xml_call_handler(parser, parser->startElementHandler, parser->startElementPtr, 3, args))) { zval_dtor(retval); efree(retval); } @@ -745,7 +748,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_string_zval(tag_name); - if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->endElementHandler, parser->endElementPtr, 2, args))) { zval_dtor(retval); efree(retval); } @@ -795,7 +798,7 @@ if (parser->characterDataHandler) { args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->characterDataHandler, parser->characterDataPtr, 2, args))) { zval_dtor(retval); efree(retval); } @@ -873,7 +876,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(target, 0, parser->target_encoding); args[2] = _xml_xmlchar_zval(data, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, 3, args))) { + if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, parser->processingInstructionPtr, 3, args))) { zval_dtor(retval); efree(retval); } @@ -891,7 +894,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->defaultHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->defaultHandler, parser->defaultPtr, 2, args))) { zval_dtor(retval); efree(retval); } @@ -918,7 +921,7 @@ args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding); args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding); args[5] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, 6, args))) { + if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, parser->unparsedEntityDeclPtr, 6, args))) { zval_dtor(retval); efree(retval); } @@ -943,7 +946,7 @@ args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding); args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding); args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->notationDeclHandler, 5, args))) { + if ((retval = xml_call_handler(parser, parser->notationDeclHandler, parser->notationDeclPtr, 5, args))) { zval_dtor(retval); efree(retval); } @@ -969,7 +972,7 @@ args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding); args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding); args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, 5, args))) { + if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, parser->externalEntityRefPtr, 5, args))) { convert_to_long(retval); ret = Z_LVAL_P(retval); efree(retval); @@ -992,7 +995,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding); args[2] = _xml_xmlchar_zval(uri, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, 3, args))) { + if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, parser->startNamespaceDeclPtr, 3, args))) { zval_dtor(retval); efree(retval); } @@ -1010,7 +1013,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, parser->endNamespaceDeclPtr, 2, args))) { zval_dtor(retval); efree(retval); }
Index: php4/ext/xml/php_xml.h diff -u php4/ext/xml/php_xml.h:1.23 php4/ext/xml/php_xml.h:1.24 --- php4/ext/xml/php_xml.h:1.23 Tue May 6 15:38:49 2003 +++ php4/ext/xml/php_xml.h Wed May 21 23:04:11 2003 @@ -14,10 +14,11 @@ +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken <ssb@php.net> | | Thies C. Arntzen <thies@thieso.net> | + | Sterling Hughes <sterling@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: php_xml.h,v 1.23 2003/05/06 19:38:49 sterling Exp $ */ +/* $Id: php_xml.h,v 1.24 2003/05/22 03:04:11 sterling Exp $ */ #ifndef PHP_XML_H #define PHP_XML_H @@ -53,6 +54,7 @@ int case_folding; XML_Parser parser; XML_Char *target_encoding; + zval *startElementHandler; zval *endElementHandler; zval *characterDataHandler; @@ -61,9 +63,22 @@ zval *unparsedEntityDeclHandler; zval *notationDeclHandler; zval *externalEntityRefHandler; - zval *unknownEncodingHandler; + zval *unknownEncodingHandler; zval *startNamespaceDeclHandler; zval *endNamespaceDeclHandler; + + zend_function *startElementPtr; + zend_function *endElementPtr; + zend_function *characterDataPtr; + zend_function *processingInstructionPtr; + zend_function *defaultPtr; + zend_function *unparsedEntityDeclPtr; + zend_function *notationDeclPtr; + zend_function *externalEntityRefPtr; + zend_function *unknownEncodingPtr; + zend_function *startNamespaceDeclPtr; + zend_function *endNamespaceDeclPtr; + zval *object; zval *data; Index: php4/ext/xml/xml.c diff -u php4/ext/xml/xml.c:1.124 php4/ext/xml/xml.c:1.125 --- php4/ext/xml/xml.c:1.124 Sun May 11 05:04:05 2003 +++ php4/ext/xml/xml.c Wed May 21 23:04:11 2003 @@ -13,11 +13,12 @@ | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken <ssb@php.net> | - | Thies C. Arntzen <thies@thieso.net> | + | Thies C. Arntzen <thies@thieso.net> | + | Sterling Hughes <sterling@php.net> | +----------------------------------------------------------------------+ */ -/* $Id: xml.c,v 1.124 2003/05/11 09:04:05 moriyoshi Exp $ */ +/* $Id: xml.c,v 1.125 2003/05/22 03:04:11 sterling Exp $ */ #define IS_EXT_MODULE @@ -79,7 +80,7 @@ inline static unsigned short xml_encode_us_ascii(unsigned char); inline static char xml_decode_us_ascii(unsigned short); static XML_Char *xml_utf8_encode(const char *, int, int *, const XML_Char *); -static zval *xml_call_handler(xml_parser *, zval *, int, zval **); +static zval *xml_call_handler(xml_parser *, zval *, zend_function *, int, zval **); static zval *_xml_xmlchar_zval(const XML_Char *, int, const XML_Char *); static int _xml_xmlcharlen(const XML_Char *); static void _xml_add_to_info(xml_parser *parser,char *name); @@ -385,20 +386,22 @@ /* }}} */ /* {{{ xml_call_handler() */ -static zval *xml_call_handler(xml_parser *parser, zval *handler, int argc, zval **argv) +static zval *xml_call_handler(xml_parser *parser, zval *handler, zend_function *function_ptr, int argc, zval **argv) { TSRMLS_FETCH(); if (parser && handler) { + zval ***args; zval *retval; int i; int result; - MAKE_STD_ZVAL(retval); - ZVAL_FALSE(retval); - - result = call_user_function(EG(function_table), &parser->object, handler, retval, argc, argv TSRMLS_CC); - + args = emalloc(sizeof(zval **) * argc); + for (i = 0; i < argc; i++) { + args[i] = &argv[i]; + } + + result = fast_call_user_function(EG(function_table), &parser->object, handler, &retval, argc, args, 0, NULL, &function_ptr TSRMLS_CC); if (result == FAILURE) { zval **method; zval **obj; @@ -412,14 +415,14 @@ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s::%s()", Z_OBJCE_PP(obj)->name, Z_STRVAL_PP(method)); } else php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler"); - - zval_dtor(retval); - efree(retval); + + zval_ptr_dtor(&retval); } for (i = 0; i < argc; i++) { - zval_ptr_dtor(&(argv[i])); + zval_ptr_dtor(args[i]); } + efree(args); if (result == FAILURE) { return NULL; @@ -676,7 +679,7 @@ efree(att); } - if ((retval = xml_call_handler(parser, parser->startElementHandler, 3, args))) { + if ((retval = xml_call_handler(parser, parser->startElementHandler, parser->startElementPtr, 3, args))) { zval_dtor(retval); efree(retval); } @@ -745,7 +748,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_string_zval(tag_name); - if ((retval = xml_call_handler(parser, parser->endElementHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->endElementHandler, parser->endElementPtr, 2, args))) { zval_dtor(retval); efree(retval); } @@ -795,7 +798,7 @@ if (parser->characterDataHandler) { args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->characterDataHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->characterDataHandler, parser->characterDataPtr, 2, args))) { zval_dtor(retval); efree(retval); } @@ -873,7 +876,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(target, 0, parser->target_encoding); args[2] = _xml_xmlchar_zval(data, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, 3, args))) { + if ((retval = xml_call_handler(parser, parser->processingInstructionHandler, parser->processingInstructionPtr, 3, args))) { zval_dtor(retval); efree(retval); } @@ -891,7 +894,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(s, len, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->defaultHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->defaultHandler, parser->defaultPtr, 2, args))) { zval_dtor(retval); efree(retval); } @@ -918,7 +921,7 @@ args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding); args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding); args[5] = _xml_xmlchar_zval(notationName, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, 6, args))) { + if ((retval = xml_call_handler(parser, parser->unparsedEntityDeclHandler, parser->unparsedEntityDeclPtr, 6, args))) { zval_dtor(retval); efree(retval); } @@ -943,7 +946,7 @@ args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding); args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding); args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->notationDeclHandler, 5, args))) { + if ((retval = xml_call_handler(parser, parser->notationDeclHandler, parser->notationDeclPtr, 5, args))) { zval_dtor(retval); efree(retval); } @@ -969,7 +972,7 @@ args[2] = _xml_xmlchar_zval(base, 0, parser->target_encoding); args[3] = _xml_xmlchar_zval(systemId, 0, parser->target_encoding); args[4] = _xml_xmlchar_zval(publicId, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, 5, args))) { + if ((retval = xml_call_handler(parser, parser->externalEntityRefHandler, parser->externalEntityRefPtr, 5, args))) { convert_to_long(retval); ret = Z_LVAL_P(retval); efree(retval); @@ -992,7 +995,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding); args[2] = _xml_xmlchar_zval(uri, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, 3, args))) { + if ((retval = xml_call_handler(parser, parser->startNamespaceDeclHandler, parser->startNamespaceDeclPtr, 3, args))) { zval_dtor(retval); efree(retval); } @@ -1010,7 +1013,7 @@ args[0] = _xml_resource_zval(parser->index); args[1] = _xml_xmlchar_zval(prefix, 0, parser->target_encoding); - if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, 2, args))) { + if ((retval = xml_call_handler(parser, parser->endNamespaceDeclHandler, parser->endNamespaceDeclPtr, 2, args))) { zval_dtor(retval); efree(retval); }