mirror of
https://github.com/php/php-src.git
synced 2024-12-12 03:15:29 +08:00
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.
This commit is contained in:
parent
b1683ea891
commit
66b90c7052
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user