From: Máté Kocsis Date: Wed, 3 Feb 2021 08:03:18 +0000 (+0100) Subject: Generate class entries for a few extensions X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5f21062054b12a2e751886627ea81ecf733789a0;p=php Generate class entries for a few extensions Relates to GH-6644 --- diff --git a/ext/bcmath/bcmath.stub.php b/ext/bcmath/bcmath.stub.php index acd63f000e..daf479089d 100644 --- a/ext/bcmath/bcmath.stub.php +++ b/ext/bcmath/bcmath.stub.php @@ -1,6 +1,9 @@ ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES; + + return class_entry; +} + +zend_class_entry *register_class_CurlMultiHandle() +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "CurlMultiHandle", class_CurlMultiHandle_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES; + + return class_entry; +} + +zend_class_entry *register_class_CurlShareHandle() +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "CurlShareHandle", class_CurlShareHandle_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES; + + return class_entry; +} + diff --git a/ext/curl/curl_private.h b/ext/curl/curl_private.h index bc6852198d..49201334b9 100644 --- a/ext/curl/curl_private.h +++ b/ext/curl/curl_private.h @@ -152,8 +152,8 @@ static inline php_curlsh *curl_share_from_obj(zend_object *obj) { #define Z_CURL_SHARE_P(zv) curl_share_from_obj(Z_OBJ_P(zv)) -void curl_multi_register_class(const zend_function_entry *method_entries); -void curl_share_register_class(const zend_function_entry *method_entries); +void curl_multi_register_handlers(void); +void curl_share_register_handlers(void); void curlfile_register_class(void); int curl_cast_object(zend_object *obj, zval *result, int type); diff --git a/ext/curl/interface.c b/ext/curl/interface.c index 92dfc918cb..d96334cd07 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -1177,10 +1177,7 @@ PHP_MINIT_FUNCTION(curl) return FAILURE; } - zend_class_entry ce; - INIT_CLASS_ENTRY(ce, "CurlHandle", class_CurlHandle_methods); - curl_ce = zend_register_internal_class(&ce); - curl_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + curl_ce = register_class_CurlHandle(); curl_ce->create_object = curl_create_object; curl_ce->serialize = zend_class_serialize_deny; curl_ce->unserialize = zend_class_unserialize_deny; @@ -1193,8 +1190,11 @@ PHP_MINIT_FUNCTION(curl) curl_object_handlers.clone_obj = curl_clone_obj; curl_object_handlers.cast_object = curl_cast_object; - curl_multi_register_class(class_CurlMultiHandle_methods); - curl_share_register_class(class_CurlShareHandle_methods); + curl_multi_ce = register_class_CurlMultiHandle(); + curl_multi_register_handlers(); + + curl_share_ce = register_class_CurlShareHandle(); + curl_share_register_handlers(); curlfile_register_class(); return SUCCESS; diff --git a/ext/curl/multi.c b/ext/curl/multi.c index 518acf2b0b..36c99684d0 100644 --- a/ext/curl/multi.c +++ b/ext/curl/multi.c @@ -580,11 +580,7 @@ static HashTable *curl_multi_get_gc(zend_object *object, zval **table, int *n) return zend_std_get_properties(object); } -void curl_multi_register_class(const zend_function_entry *method_entries) { - zend_class_entry ce_multi; - INIT_CLASS_ENTRY(ce_multi, "CurlMultiHandle", method_entries); - curl_multi_ce = zend_register_internal_class(&ce_multi); - curl_multi_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; +void curl_multi_register_handlers(void) { curl_multi_ce->create_object = curl_multi_create_object; curl_multi_ce->serialize = zend_class_serialize_deny; curl_multi_ce->unserialize = zend_class_unserialize_deny; diff --git a/ext/curl/share.c b/ext/curl/share.c index 58135acdb5..a7c2586aa5 100644 --- a/ext/curl/share.c +++ b/ext/curl/share.c @@ -162,11 +162,7 @@ void curl_share_free_obj(zend_object *object) zend_object_std_dtor(&sh->std); } -void curl_share_register_class(const zend_function_entry *method_entries) { - zend_class_entry ce_share; - INIT_CLASS_ENTRY(ce_share, "CurlShareHandle", method_entries); - curl_share_ce = zend_register_internal_class(&ce_share); - curl_share_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; +void curl_share_register_handlers(void) { curl_share_ce->create_object = curl_share_create_object; curl_share_ce->serialize = &zend_class_serialize_deny; curl_share_ce->unserialize = &zend_class_unserialize_deny; diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4d739efc33..4e840a3106 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1603,10 +1603,7 @@ static int date_interval_has_property(zend_object *object, zend_string *name, in static void date_register_classes(void) /* {{{ */ { - zend_class_entry ce_date, ce_immutable, ce_timezone, ce_interval, ce_period, ce_interface; - - INIT_CLASS_ENTRY(ce_interface, "DateTimeInterface", class_DateTimeInterface_methods); - date_ce_interface = zend_register_internal_interface(&ce_interface); + date_ce_interface = register_class_DateTimeInterface(); date_ce_interface->interface_gets_implemented = implement_date_interface_handler; #define REGISTER_DATE_INTERFACE_CONST_STRING(const_name, value) \ @@ -1626,9 +1623,8 @@ static void date_register_classes(void) /* {{{ */ REGISTER_DATE_INTERFACE_CONST_STRING("RSS", DATE_FORMAT_RFC1123); REGISTER_DATE_INTERFACE_CONST_STRING("W3C", DATE_FORMAT_RFC3339); - INIT_CLASS_ENTRY(ce_date, "DateTime", class_DateTime_methods); - ce_date.create_object = date_object_new_date; - date_ce_date = zend_register_internal_class_ex(&ce_date, NULL); + date_ce_date = register_class_DateTime(date_ce_interface); + date_ce_date->create_object = date_object_new_date; memcpy(&date_object_handlers_date, &std_object_handlers, sizeof(zend_object_handlers)); date_object_handlers_date.offset = XtOffsetOf(php_date_obj, std); date_object_handlers_date.free_obj = date_object_free_storage_date; @@ -1636,21 +1632,17 @@ static void date_register_classes(void) /* {{{ */ date_object_handlers_date.compare = date_object_compare_date; date_object_handlers_date.get_properties_for = date_object_get_properties_for; date_object_handlers_date.get_gc = date_object_get_gc; - zend_class_implements(date_ce_date, 1, date_ce_interface); - INIT_CLASS_ENTRY(ce_immutable, "DateTimeImmutable", class_DateTimeImmutable_methods); - ce_immutable.create_object = date_object_new_date; - date_ce_immutable = zend_register_internal_class_ex(&ce_immutable, NULL); + date_ce_immutable = register_class_DateTimeImmutable(date_ce_interface); + date_ce_immutable->create_object = date_object_new_date; memcpy(&date_object_handlers_immutable, &std_object_handlers, sizeof(zend_object_handlers)); date_object_handlers_immutable.clone_obj = date_object_clone_date; date_object_handlers_immutable.compare = date_object_compare_date; date_object_handlers_immutable.get_properties_for = date_object_get_properties_for; date_object_handlers_immutable.get_gc = date_object_get_gc; - zend_class_implements(date_ce_immutable, 1, date_ce_interface); - INIT_CLASS_ENTRY(ce_timezone, "DateTimeZone", class_DateTimeZone_methods); - ce_timezone.create_object = date_object_new_timezone; - date_ce_timezone = zend_register_internal_class_ex(&ce_timezone, NULL); + date_ce_timezone = register_class_DateTimeZone(); + date_ce_timezone->create_object = date_object_new_timezone; memcpy(&date_object_handlers_timezone, &std_object_handlers, sizeof(zend_object_handlers)); date_object_handlers_timezone.offset = XtOffsetOf(php_timezone_obj, std); date_object_handlers_timezone.free_obj = date_object_free_storage_timezone; @@ -1678,9 +1670,8 @@ static void date_register_classes(void) /* {{{ */ REGISTER_TIMEZONE_CLASS_CONST_STRING("ALL_WITH_BC", PHP_DATE_TIMEZONE_GROUP_ALL_W_BC); REGISTER_TIMEZONE_CLASS_CONST_STRING("PER_COUNTRY", PHP_DATE_TIMEZONE_PER_COUNTRY); - INIT_CLASS_ENTRY(ce_interval, "DateInterval", class_DateInterval_methods); - ce_interval.create_object = date_object_new_interval; - date_ce_interval = zend_register_internal_class_ex(&ce_interval, NULL); + date_ce_interval = register_class_DateInterval(); + date_ce_interval->create_object = date_object_new_interval; memcpy(&date_object_handlers_interval, &std_object_handlers, sizeof(zend_object_handlers)); date_object_handlers_interval.offset = XtOffsetOf(php_interval_obj, std); date_object_handlers_interval.free_obj = date_object_free_storage_interval; @@ -1693,11 +1684,9 @@ static void date_register_classes(void) /* {{{ */ date_object_handlers_interval.get_gc = date_object_get_gc_interval; date_object_handlers_interval.compare = date_interval_compare_objects; - INIT_CLASS_ENTRY(ce_period, "DatePeriod", class_DatePeriod_methods); - ce_period.create_object = date_object_new_period; - date_ce_period = zend_register_internal_class_ex(&ce_period, NULL); + date_ce_period = register_class_DatePeriod(zend_ce_aggregate); + date_ce_period->create_object = date_object_new_period; date_ce_period->get_iterator = date_object_period_get_iterator; - zend_class_implements(date_ce_period, 1, zend_ce_aggregate); memcpy(&date_object_handlers_period, &std_object_handlers, sizeof(zend_object_handlers)); date_object_handlers_period.offset = XtOffsetOf(php_period_obj, std); date_object_handlers_period.free_obj = date_object_free_storage_period; diff --git a/ext/date/php_date.stub.php b/ext/date/php_date.stub.php index cb01b7e073..bb19284199 100644 --- a/ext/date/php_date.stub.php +++ b/ext/date/php_date.stub.php @@ -1,6 +1,9 @@ ce_flags |= ZEND_ACC_FINAL; - zend_declare_property_long(dom_domexception_class_entry, "code", sizeof("code")-1, 0, ZEND_ACC_PUBLIC); + dom_domexception_class_entry = register_class_DOMException(zend_ce_exception); - INIT_CLASS_ENTRY(ce, "DOMParentNode", class_DOMParentNode_methods); - dom_parentnode_class_entry = zend_register_internal_interface(&ce); + dom_parentnode_class_entry = register_class_DOMParentNode(); - INIT_CLASS_ENTRY(ce, "DOMChildNode", class_DOMChildNode_methods); - dom_childnode_class_entry = zend_register_internal_interface(&ce); + dom_childnode_class_entry = register_class_DOMChildNode(); - REGISTER_DOM_CLASS(ce, "DOMImplementation", NULL, class_DOMImplementation_methods, dom_domimplementation_class_entry); + dom_domimplementation_class_entry = register_class_DOMImplementation(); + dom_domimplementation_class_entry->create_object = dom_objects_new; - REGISTER_DOM_CLASS(ce, "DOMNode", NULL, class_DOMNode_methods, dom_node_class_entry); + dom_node_class_entry = register_class_DOMNode(); + dom_node_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_node_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_node_prop_handlers, "nodeName", sizeof("nodeName")-1, dom_node_node_name_read, NULL); @@ -611,9 +606,10 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_node_prop_handlers, "localName", sizeof("localName")-1, dom_node_local_name_read, NULL); dom_register_prop_handler(&dom_node_prop_handlers, "baseURI", sizeof("baseURI")-1, dom_node_base_uri_read, NULL); dom_register_prop_handler(&dom_node_prop_handlers, "textContent", sizeof("textContent")-1, dom_node_text_content_read, dom_node_text_content_write); - zend_hash_add_ptr(&classes, ce.name, &dom_node_prop_handlers); + zend_hash_add_ptr(&classes, dom_node_class_entry->name, &dom_node_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMNameSpaceNode", NULL, NULL, dom_namespace_node_class_entry); + dom_namespace_node_class_entry = register_class_DOMNameSpaceNode(); + dom_namespace_node_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_namespace_node_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_namespace_node_prop_handlers, "nodeName", sizeof("nodeName")-1, dom_node_node_name_read, NULL); @@ -624,9 +620,10 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_namespace_node_prop_handlers, "namespaceURI", sizeof("namespaceURI")-1, dom_node_namespace_uri_read, NULL); dom_register_prop_handler(&dom_namespace_node_prop_handlers, "ownerDocument", sizeof("ownerDocument")-1, dom_node_owner_document_read, NULL); dom_register_prop_handler(&dom_namespace_node_prop_handlers, "parentNode", sizeof("parentNode")-1, dom_node_parent_node_read, NULL); - zend_hash_add_ptr(&classes, ce.name, &dom_namespace_node_prop_handlers); + zend_hash_add_ptr(&classes, dom_namespace_node_class_entry->name, &dom_namespace_node_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMDocumentFragment", dom_node_class_entry, class_DOMDocumentFragment_methods, dom_documentfragment_class_entry); + dom_documentfragment_class_entry = register_class_DOMDocumentFragment(dom_node_class_entry, dom_parentnode_class_entry); + dom_documentfragment_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_documentfragment_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_documentfragment_prop_handlers, "firstElementChild", sizeof("firstElementChild")-1, dom_parent_node_first_element_child_read, NULL); @@ -634,10 +631,10 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_documentfragment_prop_handlers, "childElementCount", sizeof("childElementCount")-1, dom_parent_node_child_element_count, NULL); zend_hash_merge(&dom_documentfragment_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_documentfragment_prop_handlers); - zend_class_implements(dom_documentfragment_class_entry, 1, dom_parentnode_class_entry); + zend_hash_add_ptr(&classes, dom_documentfragment_class_entry->name, &dom_documentfragment_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMDocument", dom_node_class_entry, class_DOMDocument_methods, dom_document_class_entry); + dom_document_class_entry = register_class_DOMDocument(dom_node_class_entry, dom_parentnode_class_entry); + dom_document_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_document_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_document_prop_handlers, "doctype", sizeof("doctype")-1, dom_document_doctype_read, NULL); dom_register_prop_handler(&dom_document_prop_handlers, "implementation", sizeof("implementation")-1, dom_document_implementation_read, NULL); @@ -664,30 +661,26 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_document_prop_handlers, "childElementCount", sizeof("childElementCount")-1, dom_parent_node_child_element_count, NULL); zend_hash_merge(&dom_document_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_document_prop_handlers); - zend_class_implements(dom_document_class_entry, 1, dom_parentnode_class_entry); + zend_hash_add_ptr(&classes, dom_document_class_entry->name, &dom_document_prop_handlers); - INIT_CLASS_ENTRY(ce, "DOMNodeList", class_DOMNodeList_methods); - ce.create_object = dom_nnodemap_objects_new; - dom_nodelist_class_entry = zend_register_internal_class_ex(&ce, NULL); + dom_nodelist_class_entry = register_class_DOMNodeList(zend_ce_aggregate, zend_ce_countable); + dom_nodelist_class_entry->create_object = dom_nnodemap_objects_new; dom_nodelist_class_entry->get_iterator = php_dom_get_iterator; - zend_class_implements(dom_nodelist_class_entry, 2, zend_ce_aggregate, zend_ce_countable); zend_hash_init(&dom_nodelist_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_nodelist_prop_handlers, "length", sizeof("length")-1, dom_nodelist_length_read, NULL); - zend_hash_add_ptr(&classes, ce.name, &dom_nodelist_prop_handlers); + zend_hash_add_ptr(&classes, dom_nodelist_class_entry->name, &dom_nodelist_prop_handlers); - INIT_CLASS_ENTRY(ce, "DOMNamedNodeMap", class_DOMNamedNodeMap_methods); - ce.create_object = dom_nnodemap_objects_new; - dom_namednodemap_class_entry = zend_register_internal_class_ex(&ce, NULL); + dom_namednodemap_class_entry = register_class_DOMNamedNodeMap(zend_ce_aggregate, zend_ce_countable); + dom_namednodemap_class_entry->create_object = dom_nnodemap_objects_new; dom_namednodemap_class_entry->get_iterator = php_dom_get_iterator; - zend_class_implements(dom_namednodemap_class_entry, 2, zend_ce_aggregate, zend_ce_countable); zend_hash_init(&dom_namednodemap_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_namednodemap_prop_handlers, "length", sizeof("length")-1, dom_namednodemap_length_read, NULL); - zend_hash_add_ptr(&classes, ce.name, &dom_namednodemap_prop_handlers); + zend_hash_add_ptr(&classes, dom_namednodemap_class_entry->name, &dom_namednodemap_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMCharacterData", dom_node_class_entry, class_DOMCharacterData_methods, dom_characterdata_class_entry); + dom_characterdata_class_entry = register_class_DOMCharacterData(dom_node_class_entry, dom_childnode_class_entry); + dom_characterdata_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_characterdata_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_characterdata_prop_handlers, "data", sizeof("data")-1, dom_characterdata_data_read, dom_characterdata_data_write); @@ -695,11 +688,10 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_characterdata_prop_handlers, "previousElementSibling", sizeof("previousElementSibling")-1, dom_node_previous_element_sibling_read, NULL); dom_register_prop_handler(&dom_characterdata_prop_handlers, "nextElementSibling", sizeof("nextElementSibling")-1, dom_node_next_element_sibling_read, NULL); zend_hash_merge(&dom_characterdata_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_characterdata_prop_handlers); - - zend_class_implements(dom_characterdata_class_entry, 1, dom_childnode_class_entry); + zend_hash_add_ptr(&classes, dom_characterdata_class_entry->name, &dom_characterdata_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMAttr", dom_node_class_entry, class_DOMAttr_methods, dom_attr_class_entry); + dom_attr_class_entry = register_class_DOMAttr(dom_node_class_entry); + dom_attr_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_attr_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_attr_prop_handlers, "name", sizeof("name")-1, dom_attr_name_read, NULL); @@ -708,9 +700,10 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_attr_prop_handlers, "ownerElement", sizeof("ownerElement")-1, dom_attr_owner_element_read, NULL); dom_register_prop_handler(&dom_attr_prop_handlers, "schemaTypeInfo", sizeof("schemaTypeInfo")-1, dom_attr_schema_type_info_read, NULL); zend_hash_merge(&dom_attr_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_attr_prop_handlers); + zend_hash_add_ptr(&classes, dom_attr_class_entry->name, &dom_attr_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMElement", dom_node_class_entry, class_DOMElement_methods, dom_element_class_entry); + dom_element_class_entry = register_class_DOMElement(dom_node_class_entry, dom_parentnode_class_entry, dom_childnode_class_entry); + dom_element_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_element_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_element_prop_handlers, "tagName", sizeof("tagName")-1, dom_element_tag_name_read, NULL); @@ -721,24 +714,26 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_element_prop_handlers, "previousElementSibling", sizeof("previousElementSibling")-1, dom_node_previous_element_sibling_read, NULL); dom_register_prop_handler(&dom_element_prop_handlers, "nextElementSibling", sizeof("nextElementSibling")-1, dom_node_next_element_sibling_read, NULL); zend_hash_merge(&dom_element_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_element_prop_handlers); - - zend_class_implements(dom_element_class_entry, 2, dom_parentnode_class_entry, dom_childnode_class_entry); + zend_hash_add_ptr(&classes, dom_element_class_entry->name, &dom_element_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMText", dom_characterdata_class_entry, class_DOMText_methods, dom_text_class_entry); + dom_text_class_entry = register_class_DOMText(dom_characterdata_class_entry); + dom_text_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_text_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_text_prop_handlers, "wholeText", sizeof("wholeText")-1, dom_text_whole_text_read, NULL); zend_hash_merge(&dom_text_prop_handlers, &dom_characterdata_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_text_prop_handlers); + zend_hash_add_ptr(&classes, dom_text_class_entry->name, &dom_text_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMComment", dom_characterdata_class_entry, class_DOMComment_methods, dom_comment_class_entry); - zend_hash_add_ptr(&classes, ce.name, &dom_characterdata_prop_handlers); + dom_comment_class_entry = register_class_DOMComment(dom_characterdata_class_entry); + dom_comment_class_entry->create_object = dom_objects_new; + zend_hash_add_ptr(&classes, dom_comment_class_entry->name, &dom_characterdata_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMCdataSection", dom_text_class_entry, class_DOMCdataSection_methods, dom_cdatasection_class_entry); - zend_hash_add_ptr(&classes, ce.name, &dom_text_prop_handlers); + dom_cdatasection_class_entry = register_class_DOMCdataSection(dom_text_class_entry); + dom_cdatasection_class_entry->create_object = dom_objects_new; + zend_hash_add_ptr(&classes, dom_cdatasection_class_entry->name, &dom_text_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMDocumentType", dom_node_class_entry, class_DOMDocumentType_methods, dom_documenttype_class_entry); + dom_documenttype_class_entry = register_class_DOMDocumentType(dom_node_class_entry); + dom_documenttype_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_documenttype_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_documenttype_prop_handlers, "name", sizeof("name")-1, dom_documenttype_name_read, NULL); @@ -748,17 +743,19 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_documenttype_prop_handlers, "systemId", sizeof("systemId")-1, dom_documenttype_system_id_read, NULL); dom_register_prop_handler(&dom_documenttype_prop_handlers, "internalSubset", sizeof("internalSubset")-1, dom_documenttype_internal_subset_read, NULL); zend_hash_merge(&dom_documenttype_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_documenttype_prop_handlers); + zend_hash_add_ptr(&classes, dom_documenttype_class_entry->name, &dom_documenttype_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMNotation", dom_node_class_entry, class_DOMNotation_methods, dom_notation_class_entry); + dom_notation_class_entry = register_class_DOMNotation(dom_node_class_entry); + dom_notation_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_notation_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_notation_prop_handlers, "publicId", sizeof("publicId")-1, dom_notation_public_id_read, NULL); dom_register_prop_handler(&dom_notation_prop_handlers, "systemId", sizeof("systemId")-1, dom_notation_system_id_read, NULL); zend_hash_merge(&dom_notation_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_notation_prop_handlers); + zend_hash_add_ptr(&classes, dom_notation_class_entry->name, &dom_notation_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMEntity", dom_node_class_entry, class_DOMEntity_methods, dom_entity_class_entry); + dom_entity_class_entry = register_class_DOMEntity(dom_node_class_entry); + dom_entity_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_entity_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_entity_prop_handlers, "publicId", sizeof("publicId")-1, dom_entity_public_id_read, NULL); @@ -768,32 +765,33 @@ PHP_MINIT_FUNCTION(dom) dom_register_prop_handler(&dom_entity_prop_handlers, "encoding", sizeof("encoding")-1, dom_entity_encoding_read, dom_entity_encoding_write); dom_register_prop_handler(&dom_entity_prop_handlers, "version", sizeof("version")-1, dom_entity_version_read, dom_entity_version_write); zend_hash_merge(&dom_entity_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_entity_prop_handlers); + zend_hash_add_ptr(&classes, dom_entity_class_entry->name, &dom_entity_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMEntityReference", dom_node_class_entry, class_DOMEntityReference_methods, dom_entityreference_class_entry); - zend_hash_add_ptr(&classes, ce.name, &dom_node_prop_handlers); + dom_entityreference_class_entry = register_class_DOMEntityReference(dom_node_class_entry); + dom_entityreference_class_entry->create_object = dom_objects_new; + zend_hash_add_ptr(&classes, dom_entityreference_class_entry->name, &dom_node_prop_handlers); - REGISTER_DOM_CLASS(ce, "DOMProcessingInstruction", dom_node_class_entry, class_DOMProcessingInstruction_methods, dom_processinginstruction_class_entry); + dom_processinginstruction_class_entry = register_class_DOMProcessingInstruction(dom_node_class_entry); + dom_processinginstruction_class_entry->create_object = dom_objects_new; zend_hash_init(&dom_processinginstruction_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "target", sizeof("target")-1, dom_processinginstruction_target_read, NULL); dom_register_prop_handler(&dom_processinginstruction_prop_handlers, "data", sizeof("data")-1, dom_processinginstruction_data_read, dom_processinginstruction_data_write); zend_hash_merge(&dom_processinginstruction_prop_handlers, &dom_node_prop_handlers, dom_copy_prop_handler, 0); - zend_hash_add_ptr(&classes, ce.name, &dom_processinginstruction_prop_handlers); + zend_hash_add_ptr(&classes, dom_processinginstruction_class_entry->name, &dom_processinginstruction_prop_handlers); #ifdef LIBXML_XPATH_ENABLED memcpy(&dom_xpath_object_handlers, &dom_object_handlers, sizeof(zend_object_handlers)); dom_xpath_object_handlers.offset = XtOffsetOf(dom_xpath_object, dom) + XtOffsetOf(dom_object, std); dom_xpath_object_handlers.free_obj = dom_xpath_objects_free_storage; - INIT_CLASS_ENTRY(ce, "DOMXPath", class_DOMXPath_methods); - ce.create_object = dom_xpath_objects_new; - dom_xpath_class_entry = zend_register_internal_class_ex(&ce, NULL); + dom_xpath_class_entry = register_class_DOMXPath(); + dom_xpath_class_entry->create_object = dom_xpath_objects_new; zend_hash_init(&dom_xpath_prop_handlers, 0, NULL, dom_dtor_prop_handler, 1); dom_register_prop_handler(&dom_xpath_prop_handlers, "document", sizeof("document")-1, dom_xpath_document_read, NULL); dom_register_prop_handler(&dom_xpath_prop_handlers, "registerNodeNamespaces", sizeof("registerNodeNamespaces")-1, dom_xpath_register_node_ns_read, dom_xpath_register_node_ns_write); - zend_hash_add_ptr(&classes, ce.name, &dom_xpath_prop_handlers); + zend_hash_add_ptr(&classes, dom_xpath_class_entry->name, &dom_xpath_prop_handlers); #endif REGISTER_LONG_CONSTANT("XML_ELEMENT_NODE", XML_ELEMENT_NODE, CONST_CS | CONST_PERSISTENT); diff --git a/ext/dom/php_dom.stub.php b/ext/dom/php_dom.stub.php index edebd13dd5..29e49bcbe2 100644 --- a/ext/dom/php_dom.stub.php +++ b/ext/dom/php_dom.stub.php @@ -1,17 +1,20 @@ ce_flags |= ZEND_ACC_FINAL; + + zval property_code_default_value; + ZVAL_LONG(&property_code_default_value, 0); + zend_string *property_code_name = zend_string_init("code", sizeof("code") - 1, 1); + zend_declare_property_ex(class_entry, property_code_name, &property_code_default_value, ZEND_ACC_PUBLIC, NULL); + zend_string_release(property_code_name); + + return class_entry; +} + +zend_class_entry *register_class_DOMText(zend_class_entry *class_entry_DOMCharacterData) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMText", class_DOMText_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_DOMCharacterData); + + return class_entry; +} + +zend_class_entry *register_class_DOMNamedNodeMap(zend_class_entry *class_entry_IteratorAggregate, zend_class_entry *class_entry_Countable) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMNamedNodeMap", class_DOMNamedNodeMap_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + zend_class_implements(class_entry, 2, class_entry_IteratorAggregate, class_entry_Countable); + + return class_entry; +} + +zend_class_entry *register_class_DOMEntity(zend_class_entry *class_entry_DOMNode) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMEntity", class_DOMEntity_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_DOMNode); + + return class_entry; +} + +zend_class_entry *register_class_DOMEntityReference(zend_class_entry *class_entry_DOMNode) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMEntityReference", class_DOMEntityReference_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_DOMNode); + + return class_entry; +} + +zend_class_entry *register_class_DOMNotation(zend_class_entry *class_entry_DOMNode) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMNotation", class_DOMNotation_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_DOMNode); + + return class_entry; +} + +zend_class_entry *register_class_DOMProcessingInstruction(zend_class_entry *class_entry_DOMNode) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMProcessingInstruction", class_DOMProcessingInstruction_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_DOMNode); + + return class_entry; +} + +zend_class_entry *register_class_DOMXPath() +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DOMXPath", class_DOMXPath_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + + return class_entry; +} +