diff options
author | Zeev Suraski <zeev@php.net> | 2006-06-05 16:53:21 +0000 |
---|---|---|
committer | Zeev Suraski <zeev@php.net> | 2006-06-05 16:53:21 +0000 |
commit | 66b90c7052f43066abea88cfba25ea0c18acd961 (patch) | |
tree | 7a7f0b2ad144b77f882330353191fbe4ce664a8b | |
parent | b1683ea891459b102188ce5216f4718800834e2e (diff) | |
download | php-git-66b90c7052f43066abea88cfba25ea0c18acd961.tar.gz |
Final ze1_compat restoration - it was mostly done by hand, so if anybody
spots any (new) problems, let me know. Test wise, the same tests that
failed before are failing now.
-rw-r--r-- | ext/dom/php_dom.c | 21 | ||||
-rw-r--r-- | ext/simplexml/simplexml.c | 38 |
2 files changed, 59 insertions, 0 deletions
diff --git a/ext/dom/php_dom.c b/ext/dom/php_dom.c index 80437a13e3..038529e0d4 100644 --- a/ext/dom/php_dom.c +++ b/ext/dom/php_dom.c @@ -69,6 +69,7 @@ zend_class_entry *dom_xpath_class_entry; zend_class_entry *dom_namespace_node_class_entry; zend_object_handlers dom_object_handlers; +zend_object_handlers dom_ze1_object_handlers; static HashTable classes; @@ -490,12 +491,25 @@ zend_object_value dom_objects_store_clone_obj(zval *zobject TSRMLS_DC) return retval; } + +zend_object_value dom_objects_ze1_clone_obj(zval *zobject TSRMLS_DC) +{ + php_error(E_ERROR, "Cannot clone object of class %s due to 'zend.ze1_compatibility_mode'", Z_OBJCE_P(zobject)->name); + /* Return zobject->value.obj just to satisfy compiler */ + return zobject->value.obj; +} + static zend_function_entry dom_functions[] = { PHP_FE(dom_import_simplexml, NULL) {NULL, NULL, NULL} }; static zend_object_handlers* dom_get_obj_handlers(TSRMLS_D) { + if (EG(ze1_compatibility_mode)) { + return &dom_ze1_object_handlers; + } else { + return &dom_object_handlers; + } return &dom_object_handlers; } @@ -535,6 +549,13 @@ PHP_MINIT_FUNCTION(dom) dom_object_handlers.clone_obj = dom_objects_store_clone_obj; dom_object_handlers.has_property = dom_property_exists; + memcpy(&dom_ze1_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + dom_ze1_object_handlers.read_property = dom_read_property; + dom_ze1_object_handlers.write_property = dom_write_property; + dom_object_handlers.get_property_ptr_ptr = dom_get_property_ptr_ptr; + dom_ze1_object_handlers.clone_obj = dom_objects_ze1_clone_obj; + dom_ze1_object_handlers.has_property = dom_property_exists; + zend_hash_init(&classes, 0, NULL, NULL, 1); INIT_CLASS_ENTRY(ce, "DOMException", php_dom_domexception_class_functions); diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 62e2b7c5c7..f1e2b1dcfa 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -1689,6 +1689,38 @@ static zend_object_handlers sxe_object_handlers = { sxe_count_elements }; +static zend_object_handlers sxe_ze1_object_handlers = { + ZEND_OBJECTS_STORE_HANDLERS, + sxe_property_read, + sxe_property_write, + sxe_dimension_read, + sxe_dimension_write, + sxe_property_get_adr, + sxe_get_value, /* get */ + NULL, + sxe_property_exists, + sxe_property_delete, + sxe_dimension_exists, + sxe_dimension_delete, + sxe_properties_get, + NULL, /* zend_get_std_object_handlers()->get_method,*/ + NULL, /* zend_get_std_object_handlers()->call_method,*/ + NULL, /* zend_get_std_object_handlers()->get_constructor, */ + NULL, /* zend_get_std_object_handlers()->get_class_entry,*/ + NULL, /* zend_get_std_object_handlers()->get_class_name,*/ + sxe_objects_compare, + sxe_object_cast, + sxe_count_elements +}; + +static zend_object_value sxe_object_ze1_clone(zval *zobject TSRMLS_DC) +{ + php_error(E_ERROR, "Cannot clone object of class %s due to 'zend.ze1_compatibility_mode'", Z_OBJCE_P(zobject)->name); + /* Return zobject->value.obj just to satisfy compiler */ + /* FIXME: Should not be a fatal */ + return zobject->value.obj; +} + /* {{{ sxe_object_clone() */ static void @@ -2239,6 +2271,12 @@ PHP_MINIT_FUNCTION(simplexml) sxe_object_handlers.get_class_entry = zend_get_std_object_handlers()->get_class_entry; sxe_object_handlers.get_class_name = zend_get_std_object_handlers()->get_class_name; + sxe_ze1_object_handlers.get_method = zend_get_std_object_handlers()->get_method; + sxe_ze1_object_handlers.get_constructor = zend_get_std_object_handlers()->get_constructor; + sxe_ze1_object_handlers.get_class_entry = zend_get_std_object_handlers()->get_class_entry; + sxe_ze1_object_handlers.get_class_name = zend_get_std_object_handlers()->get_class_name; + sxe_ze1_object_handlers.clone_obj = sxe_object_ze1_clone; + #ifdef HAVE_SPL if (zend_get_module_started("spl") == SUCCESS) { PHP_MINIT(spl_sxe)(INIT_FUNC_ARGS_PASSTHRU); |