From 7585b07dc17cf9c1fecd8fbcdc731dec0d0703d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 17 Feb 2021 13:42:42 +0100 Subject: [PATCH 1/5] Generate class entries from stubs for com, standard, xmlreader, xmlwriter, xsl, zip, Zend --- Zend/zend_builtin_functions.c | 5 +-- Zend/zend_builtin_functions.stub.php | 4 ++ Zend/zend_builtin_functions_arginfo.h | 17 ++++++- ext/com_dotnet/com_extension.c | 25 ++++------- ext/com_dotnet/com_extension.stub.php | 12 +++-- ext/com_dotnet/com_extension_arginfo.h | 59 ++++++++++++++++++++++++- ext/com_dotnet/com_persist.c | 8 +--- ext/com_dotnet/com_persist.stub.php | 2 +- ext/com_dotnet/com_persist_arginfo.h | 13 +++++- ext/dom/php_dom.h | 7 +-- ext/standard/assert.c | 6 +-- ext/standard/assert.stub.php | 7 +++ ext/standard/assert_arginfo.h | 19 ++++++++ ext/standard/basic_functions.stub.php | 2 +- ext/standard/basic_functions_arginfo.h | 2 +- ext/standard/dir.c | 4 +- ext/standard/dir.stub.php | 2 +- ext/standard/dir_arginfo.h | 12 ++++- ext/standard/incomplete_class.c | 12 ++--- ext/standard/incomplete_class.stub.php | 7 +++ ext/standard/incomplete_class_arginfo.h | 20 +++++++++ ext/standard/user_filters.c | 8 +--- ext/standard/user_filters.stub.php | 2 +- ext/standard/user_filters_arginfo.h | 24 +++++++++- ext/xmlreader/php_xmlreader.c | 7 +-- ext/xmlreader/php_xmlreader.stub.php | 2 +- ext/xmlreader/php_xmlreader_arginfo.h | 12 ++++- ext/xmlwriter/php_xmlwriter.c | 7 +-- ext/xmlwriter/php_xmlwriter.stub.php | 2 +- ext/xmlwriter/php_xmlwriter_arginfo.h | 12 ++++- ext/xsl/php_xsl.c | 7 +-- ext/xsl/php_xsl.stub.php | 2 +- ext/xsl/php_xsl_arginfo.h | 12 ++++- ext/zip/php_zip.c | 13 +----- ext/zip/php_zip.stub.php | 22 ++++++++- ext/zip/php_zip_arginfo.h | 55 ++++++++++++++++++++++- ext/zlib/zlib.c | 10 +---- ext/zlib/zlib.stub.php | 4 +- ext/zlib/zlib_arginfo.h | 24 +++++++++- 39 files changed, 357 insertions(+), 113 deletions(-) create mode 100755 ext/standard/assert.stub.php create mode 100644 ext/standard/assert_arginfo.h create mode 100755 ext/standard/incomplete_class.stub.php create mode 100644 ext/standard/incomplete_class_arginfo.h diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 94a119eeec8f2..94a9502bc968c 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -32,10 +32,7 @@ /* }}} */ ZEND_MINIT_FUNCTION(core) { /* {{{ */ - zend_class_entry class_entry; - - INIT_CLASS_ENTRY(class_entry, "stdClass", NULL); - zend_standard_class_def = zend_register_internal_class(&class_entry); + zend_standard_class_def = register_class_stdClass(); zend_register_default_classes(); diff --git a/Zend/zend_builtin_functions.stub.php b/Zend/zend_builtin_functions.stub.php index 6e6175a693dc6..87a530200dc00 100644 --- a/Zend/zend_builtin_functions.stub.php +++ b/Zend/zend_builtin_functions.stub.php @@ -2,6 +2,10 @@ /** @generate-class-entries */ +class stdClass +{ +} + function zend_version(): string {} function func_num_args(): int {} diff --git a/Zend/zend_builtin_functions_arginfo.h b/Zend/zend_builtin_functions_arginfo.h index abf380537ead7..6baaead27dfeb 100644 --- a/Zend/zend_builtin_functions_arginfo.h +++ b/Zend/zend_builtin_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: b2216a294367f50c8b6208653ebf6fa43dc106d1 */ + * Stub hash: 429fc9b22054348101d0b9d6746494e52dc04edf */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_version, 0, 0, IS_STRING, 0) ZEND_END_ARG_INFO() @@ -333,3 +333,18 @@ static const zend_function_entry ext_functions[] = { ZEND_FE(gc_status, arginfo_gc_status) ZEND_FE_END }; + + +static const zend_function_entry class_stdClass_methods[] = { + ZEND_FE_END +}; + +static zend_class_entry *register_class_stdClass(void) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "stdClass", class_stdClass_methods); + class_entry = zend_register_internal_class_ex(&ce, NULL); + + return class_entry; +} diff --git a/ext/com_dotnet/com_extension.c b/ext/com_dotnet/com_extension.c index 5e2c1f69de7fb..6c256e7fc08fd 100644 --- a/ext/com_dotnet/com_extension.c +++ b/ext/com_dotnet/com_extension.c @@ -159,40 +159,33 @@ static PHP_GINIT_FUNCTION(com_dotnet) /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(com_dotnet) { - zend_class_entry ce, *tmp; + zend_class_entry *tmp; php_com_wrapper_minit(INIT_FUNC_ARGS_PASSTHRU); php_com_persist_minit(INIT_FUNC_ARGS_PASSTHRU); - INIT_CLASS_ENTRY(ce, "com_exception", NULL); - php_com_exception_class_entry = zend_register_internal_class_ex(&ce, zend_ce_exception); - php_com_exception_class_entry->ce_flags |= ZEND_ACC_FINAL; + php_com_exception_class_entry = register_class_com_exception(zend_ce_exception); /* php_com_exception_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */ - INIT_CLASS_ENTRY(ce, "com_safearray_proxy", NULL); - php_com_saproxy_class_entry = zend_register_internal_class(&ce); - php_com_saproxy_class_entry->ce_flags |= ZEND_ACC_FINAL; + php_com_saproxy_class_entry = register_class_com_safearray_proxy(); /* php_com_saproxy_class_entry->constructor->common.fn_flags |= ZEND_ACC_PROTECTED; */ php_com_saproxy_class_entry->get_iterator = php_com_saproxy_iter_get; - INIT_CLASS_ENTRY(ce, "variant", class_variant_methods); - ce.create_object = php_com_object_new; - php_com_variant_class_entry = zend_register_internal_class(&ce); + php_com_variant_class_entry = register_class_variant(); + php_com_variant_class_entry->create_object = php_com_object_new; php_com_variant_class_entry->get_iterator = php_com_iter_get; php_com_variant_class_entry->serialize = zend_class_serialize_deny; php_com_variant_class_entry->unserialize = zend_class_unserialize_deny; - INIT_CLASS_ENTRY(ce, "com", class_com_methods); - ce.create_object = php_com_object_new; - tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry); + tmp = register_class_com(php_com_variant_class_entry); + tmp->create_object = php_com_object_new; tmp->get_iterator = php_com_iter_get; tmp->serialize = zend_class_serialize_deny; tmp->unserialize = zend_class_unserialize_deny; #if HAVE_MSCOREE_H - INIT_CLASS_ENTRY(ce, "dotnet", class_dotnet_methods); - ce.create_object = php_com_object_new; - tmp = zend_register_internal_class_ex(&ce, php_com_variant_class_entry); + tmp = register_class_dotnet(php_com_variant_class_entry); + tmp->create_object = php_com_object_new; tmp->get_iterator = php_com_iter_get; tmp->serialize = zend_class_serialize_deny; tmp->unserialize = zend_class_unserialize_deny; diff --git a/ext/com_dotnet/com_extension.stub.php b/ext/com_dotnet/com_extension.stub.php index e3194efe06a8a..8c46f319b95ab 100644 --- a/ext/com_dotnet/com_extension.stub.php +++ b/ext/com_dotnet/com_extension.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL; + + return class_entry; +} + +static zend_class_entry *register_class_com_exception(zend_class_entry *class_entry_Exception) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "com_exception", class_com_exception_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_Exception); + class_entry->ce_flags |= ZEND_ACC_FINAL; + + return class_entry; +} diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c index bf0f7062fb894..2c2cc4226ea61 100644 --- a/ext/com_dotnet/com_persist.c +++ b/ext/com_dotnet/com_persist.c @@ -721,16 +721,12 @@ static zend_object* helper_new(zend_class_entry *ce) int php_com_persist_minit(INIT_FUNC_ARGS) { - zend_class_entry ce; - memcpy(&helper_handlers, &std_object_handlers, sizeof(helper_handlers)); helper_handlers.free_obj = helper_free_storage; helper_handlers.clone_obj = helper_clone; - INIT_CLASS_ENTRY(ce, "COMPersistHelper", class_COMPersistHelper_methods); - ce.create_object = helper_new; - helper_ce = zend_register_internal_class(&ce); - helper_ce->ce_flags |= ZEND_ACC_FINAL; + helper_ce = register_class_COMPersistHelper(); + helper_ce->create_object = helper_new; le_istream = zend_register_list_destructors_ex(istream_dtor, NULL, "com_dotnet_istream_wrapper", module_number); diff --git a/ext/com_dotnet/com_persist.stub.php b/ext/com_dotnet/com_persist.stub.php index b0e9ef6b5c785..2a2b7ac5cbef1 100644 --- a/ext/com_dotnet/com_persist.stub.php +++ b/ext/com_dotnet/com_persist.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL; + + return class_entry; +} diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h index 24e1ea646a05d..5989523152b6f 100644 --- a/ext/dom/php_dom.h +++ b/ext/dom/php_dom.h @@ -132,11 +132,6 @@ void dom_parent_node_after(dom_object *context, zval *nodes, int nodesc); void dom_parent_node_before(dom_object *context, zval *nodes, int nodesc); void dom_child_node_remove(dom_object *context); -#define REGISTER_DOM_CLASS(ce, name, parent_ce, funcs, entry) \ -INIT_CLASS_ENTRY(ce, name, funcs); \ -ce.create_object = dom_objects_new; \ -entry = zend_register_internal_class_ex(&ce, parent_ce); - #define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \ __intern = Z_DOMOBJ_P(__id); \ if (__intern->ptr == NULL || !(__ptr = (__prtype)((php_libxml_node_ptr *)__intern->ptr)->node)) { \ @@ -146,7 +141,7 @@ entry = zend_register_internal_class_ex(&ce, parent_ce); } #define DOM_NO_ARGS() \ - if (zend_parse_parameters_none() == FAILURE) { \ + if (zend_parse_parameters_none() == failure) { \ RETURN_THROWS(); \ } diff --git a/ext/standard/assert.c b/ext/standard/assert.c index fae6d940ba205..c85bb74a74c1a 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -17,6 +17,7 @@ /* {{{ includes */ #include "php.h" #include "php_assert.h" +#include "assert_arginfo.h" #include "php_ini.h" #include "zend_exceptions.h" /* }}} */ @@ -89,8 +90,6 @@ static void php_assert_init_globals(zend_assert_globals *assert_globals_p) /* {{ PHP_MINIT_FUNCTION(assert) /* {{{ */ { - zend_class_entry ce; - ZEND_INIT_MODULE_GLOBALS(assert, php_assert_init_globals, NULL); REGISTER_INI_ENTRIES(); @@ -101,8 +100,7 @@ PHP_MINIT_FUNCTION(assert) /* {{{ */ REGISTER_LONG_CONSTANT("ASSERT_WARNING", ASSERT_WARNING, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_EXCEPTION", ASSERT_EXCEPTION, CONST_CS|CONST_PERSISTENT); - INIT_CLASS_ENTRY(ce, "AssertionError", NULL); - assertion_error_ce = zend_register_internal_class_ex(&ce, zend_ce_error); + assertion_error_ce = register_class_AssertionError(zend_ce_error); return SUCCESS; } diff --git a/ext/standard/assert.stub.php b/ext/standard/assert.stub.php new file mode 100755 index 0000000000000..85fc99874af64 --- /dev/null +++ b/ext/standard/assert.stub.php @@ -0,0 +1,7 @@ +ce_flags |= ZEND_ACC_FINAL; + php_ce_incomplete_class = register_class___PHP_Incomplete_Class(); + php_ce_incomplete_class->create_object = php_create_incomplete_object; } /* }}} */ diff --git a/ext/standard/incomplete_class.stub.php b/ext/standard/incomplete_class.stub.php new file mode 100755 index 0000000000000..4651926a5a8ff --- /dev/null +++ b/ext/standard/incomplete_class.stub.php @@ -0,0 +1,7 @@ +ce_flags |= ZEND_ACC_FINAL; + + return class_entry; +} diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c index 6c5574f9912e6..54b3835f0bc9c 100644 --- a/ext/standard/user_filters.c +++ b/ext/standard/user_filters.c @@ -71,14 +71,8 @@ static ZEND_RSRC_DTOR_FUNC(php_bucket_dtor) PHP_MINIT_FUNCTION(user_filters) { - zend_class_entry *php_user_filter; /* init the filter class ancestor */ - INIT_CLASS_ENTRY(user_filter_class_entry, "php_user_filter", class_php_user_filter_methods); - if ((php_user_filter = zend_register_internal_class(&user_filter_class_entry)) == NULL) { - return FAILURE; - } - zend_declare_property_string(php_user_filter, "filtername", sizeof("filtername")-1, "", ZEND_ACC_PUBLIC); - zend_declare_property_string(php_user_filter, "params", sizeof("params")-1, "", ZEND_ACC_PUBLIC); + zend_class_entry *php_user_filter = register_class_php_user_filter(); /* init the filter resource; it has no dtor, as streams will always clean it up * at the correct time */ diff --git a/ext/standard/user_filters.stub.php b/ext/standard/user_filters.stub.php index 7beb014f62f68..2a20b88780d36 100755 --- a/ext/standard/user_filters.stub.php +++ b/ext/standard/user_filters.stub.php @@ -1,6 +1,6 @@ create_object = xmlreader_objects_new; memcpy(&xmlreader_open_fn, zend_hash_str_find_ptr(&xmlreader_class_entry->function_table, "open", sizeof("open")-1), sizeof(zend_internal_function)); xmlreader_open_fn.fn_flags &= ~ZEND_ACC_STATIC; diff --git a/ext/xmlreader/php_xmlreader.stub.php b/ext/xmlreader/php_xmlreader.stub.php index ecad4b392b819..a551ec0debb03 100644 --- a/ext/xmlreader/php_xmlreader.stub.php +++ b/ext/xmlreader/php_xmlreader.stub.php @@ -1,6 +1,6 @@ create_object = xmlwriter_object_new; return SUCCESS; } diff --git a/ext/xmlwriter/php_xmlwriter.stub.php b/ext/xmlwriter/php_xmlwriter.stub.php index 9334545ffae07..ee90003399b03 100644 --- a/ext/xmlwriter/php_xmlwriter.stub.php +++ b/ext/xmlwriter/php_xmlwriter.stub.php @@ -1,6 +1,6 @@ create_object = xsl_objects_new; #ifdef HAVE_XSL_EXSLT exsltRegisterAll(); diff --git a/ext/xsl/php_xsl.stub.php b/ext/xsl/php_xsl.stub.php index 536f82ac20052..6f52e5570e1e4 100644 --- a/ext/xsl/php_xsl.stub.php +++ b/ext/xsl/php_xsl.stub.php @@ -1,6 +1,6 @@ create_object = php_zip_object_new; zend_hash_init(&zip_prop_handlers, 0, NULL, php_zip_free_prop_handler, 1); php_zip_register_prop_handler(&zip_prop_handlers, "lastId", php_zip_last_id, NULL, IS_LONG); @@ -3050,7 +3042,6 @@ static PHP_MINIT_FUNCTION(zip) php_zip_register_prop_handler(&zip_prop_handlers, "numFiles", php_zip_get_num_files, NULL, IS_LONG); php_zip_register_prop_handler(&zip_prop_handlers, "filename", NULL, php_zipobj_get_filename, IS_STRING); php_zip_register_prop_handler(&zip_prop_handlers, "comment", NULL, php_zipobj_get_zip_comment, IS_STRING); - zend_class_implements(zip_class_entry, 1, zend_ce_countable); REGISTER_ZIP_CLASS_CONST_LONG("CREATE", ZIP_CREATE); REGISTER_ZIP_CLASS_CONST_LONG("EXCL", ZIP_EXCL); diff --git a/ext/zip/php_zip.stub.php b/ext/zip/php_zip.stub.php index ff7b9d99fbe9f..eed1d4419ffb9 100644 --- a/ext/zip/php_zip.stub.php +++ b/ext/zip/php_zip.stub.php @@ -1,6 +1,6 @@ ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + inflate_context_ce = register_class_InflateContext(); inflate_context_ce->create_object = inflate_context_create_object; inflate_context_ce->serialize = zend_class_serialize_deny; inflate_context_ce->unserialize = zend_class_unserialize_deny; @@ -1352,10 +1349,7 @@ static PHP_MINIT_FUNCTION(zlib) inflate_context_object_handlers.clone_obj = NULL; inflate_context_object_handlers.compare = zend_objects_not_comparable; - zend_class_entry deflate_ce; - INIT_CLASS_ENTRY(deflate_ce, "DeflateContext", class_DeflateContext_methods); - deflate_context_ce = zend_register_internal_class(&deflate_ce); - deflate_context_ce->ce_flags |= ZEND_ACC_FINAL | ZEND_ACC_NO_DYNAMIC_PROPERTIES; + deflate_context_ce = register_class_DeflateContext(); deflate_context_ce->create_object = deflate_context_create_object; deflate_context_ce->serialize = zend_class_serialize_deny; deflate_context_ce->unserialize = zend_class_unserialize_deny; diff --git a/ext/zlib/zlib.stub.php b/ext/zlib/zlib.stub.php index c047a535417ef..1aaafcdce22b1 100644 --- a/ext/zlib/zlib.stub.php +++ b/ext/zlib/zlib.stub.php @@ -1,11 +1,13 @@ ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NO_DYNAMIC_PROPERTIES; + + return class_entry; +} + +static zend_class_entry *register_class_DeflateContext(void) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "DeflateContext", class_DeflateContext_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; +} From bee7a763ccdde564c7247d302140bea81a4b7ecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Wed, 17 Feb 2021 15:32:36 +0100 Subject: [PATCH 2/5] Fix review comments --- ext/dom/php_dom.h | 2 +- ext/standard/assert.c | 5 ---- ext/standard/assert.stub.php | 7 ------ ext/standard/assert_arginfo.h | 19 -------------- ext/standard/basic_functions.c | 6 ++++- ext/standard/basic_functions.stub.php | 8 ++++++ ext/standard/basic_functions_arginfo.h | 33 ++++++++++++++++++++++++- ext/standard/incomplete_class.c | 5 +--- ext/standard/incomplete_class.stub.php | 7 ------ ext/standard/incomplete_class_arginfo.h | 20 --------------- ext/standard/php_assert.h | 2 ++ ext/standard/php_incomplete_class.h | 2 +- ext/standard/user_filters.c | 4 +-- 13 files changed, 52 insertions(+), 68 deletions(-) delete mode 100755 ext/standard/assert.stub.php delete mode 100644 ext/standard/assert_arginfo.h delete mode 100755 ext/standard/incomplete_class.stub.php delete mode 100644 ext/standard/incomplete_class_arginfo.h diff --git a/ext/dom/php_dom.h b/ext/dom/php_dom.h index 5989523152b6f..0c5fc9778f8af 100644 --- a/ext/dom/php_dom.h +++ b/ext/dom/php_dom.h @@ -141,7 +141,7 @@ void dom_child_node_remove(dom_object *context); } #define DOM_NO_ARGS() \ - if (zend_parse_parameters_none() == failure) { \ + if (zend_parse_parameters_none() == FAILURE) { \ RETURN_THROWS(); \ } diff --git a/ext/standard/assert.c b/ext/standard/assert.c index c85bb74a74c1a..bbaf7cc5403ec 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -17,7 +17,6 @@ /* {{{ includes */ #include "php.h" #include "php_assert.h" -#include "assert_arginfo.h" #include "php_ini.h" #include "zend_exceptions.h" /* }}} */ @@ -33,8 +32,6 @@ ZEND_END_MODULE_GLOBALS(assert) ZEND_DECLARE_MODULE_GLOBALS(assert) -static zend_class_entry *assertion_error_ce; - #define ASSERTG(v) ZEND_MODULE_GLOBALS_ACCESSOR(assert, v) #define SAFE_STRING(s) ((s)?(s):"") @@ -100,8 +97,6 @@ PHP_MINIT_FUNCTION(assert) /* {{{ */ REGISTER_LONG_CONSTANT("ASSERT_WARNING", ASSERT_WARNING, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_EXCEPTION", ASSERT_EXCEPTION, CONST_CS|CONST_PERSISTENT); - assertion_error_ce = register_class_AssertionError(zend_ce_error); - return SUCCESS; } /* }}} */ diff --git a/ext/standard/assert.stub.php b/ext/standard/assert.stub.php deleted file mode 100755 index 85fc99874af64..0000000000000 --- a/ext/standard/assert.stub.php +++ /dev/null @@ -1,7 +0,0 @@ -ce_flags |= ZEND_ACC_FINAL; + + return class_entry; +} + +static zend_class_entry *register_class_AssertionError(zend_class_entry *class_entry_Error) +{ + zend_class_entry ce, *class_entry; + + INIT_CLASS_ENTRY(ce, "AssertionError", class_AssertionError_methods); + class_entry = zend_register_internal_class_ex(&ce, class_entry_Error); + + return class_entry; +} diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c index 8c68543d41ee4..c59eb2d52cc5c 100644 --- a/ext/standard/incomplete_class.c +++ b/ext/standard/incomplete_class.c @@ -16,8 +16,6 @@ #include "php.h" #include "basic_functions.h" -#include "basic_functions_arginfo.h" -#include "incomplete_class_arginfo.h" #include "php_incomplete_class.h" #define INCOMPLETE_CLASS_MSG \ @@ -110,7 +108,7 @@ static zend_object *php_create_incomplete_object(zend_class_entry *class_type) return object; } -PHPAPI void php_register_incomplete_class(void) +PHPAPI void php_register_incomplete_class_handlers(void) { memcpy(&php_incomplete_object_handlers, &std_object_handlers, sizeof(zend_object_handlers)); php_incomplete_object_handlers.read_property = incomplete_class_get_property; @@ -120,7 +118,6 @@ PHPAPI void php_register_incomplete_class(void) php_incomplete_object_handlers.get_property_ptr_ptr = incomplete_class_get_property_ptr_ptr; php_incomplete_object_handlers.get_method = incomplete_class_get_method; - php_ce_incomplete_class = register_class___PHP_Incomplete_Class(); php_ce_incomplete_class->create_object = php_create_incomplete_object; } /* }}} */ diff --git a/ext/standard/incomplete_class.stub.php b/ext/standard/incomplete_class.stub.php deleted file mode 100755 index 4651926a5a8ff..0000000000000 --- a/ext/standard/incomplete_class.stub.php +++ /dev/null @@ -1,7 +0,0 @@ -ce_flags |= ZEND_ACC_FINAL; - - return class_entry; -} diff --git a/ext/standard/php_assert.h b/ext/standard/php_assert.h index a0d81ed84eee7..be132dfde8337 100644 --- a/ext/standard/php_assert.h +++ b/ext/standard/php_assert.h @@ -23,4 +23,6 @@ PHP_RINIT_FUNCTION(assert); PHP_RSHUTDOWN_FUNCTION(assert); PHP_MINFO_FUNCTION(assert); +static zend_class_entry *assertion_error_ce; + #endif /* PHP_ASSERT_H */ diff --git a/ext/standard/php_incomplete_class.h b/ext/standard/php_incomplete_class.h index fc2caaa62c9cb..0464358d1bf61 100644 --- a/ext/standard/php_incomplete_class.h +++ b/ext/standard/php_incomplete_class.h @@ -49,7 +49,7 @@ extern PHPAPI zend_class_entry *php_ce_incomplete_class; extern "C" { #endif -PHPAPI void php_register_incomplete_class(void); +PHPAPI void php_register_incomplete_class_handlers(void); PHPAPI zend_string *php_lookup_class_name(zend_object *object); PHPAPI void php_store_class_name(zval *object, zend_string *name); diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c index 54b3835f0bc9c..75cdcc734e5f7 100644 --- a/ext/standard/user_filters.c +++ b/ext/standard/user_filters.c @@ -58,7 +58,7 @@ PHP_METHOD(php_user_filter, onClose) ZEND_PARSE_PARAMETERS_NONE(); } -static zend_class_entry user_filter_class_entry; +static zend_class_entry *user_filter_class_entry; static ZEND_RSRC_DTOR_FUNC(php_bucket_dtor) { @@ -72,7 +72,7 @@ static ZEND_RSRC_DTOR_FUNC(php_bucket_dtor) PHP_MINIT_FUNCTION(user_filters) { /* init the filter class ancestor */ - zend_class_entry *php_user_filter = register_class_php_user_filter(); + user_filter_class_entry = register_class_php_user_filter(); /* init the filter resource; it has no dtor, as streams will always clean it up * at the correct time */ From ce42b852ce127b86a8d459107e389f88ffdfcce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Kocsis?= Date: Fri, 19 Feb 2021 09:37:18 +0100 Subject: [PATCH 3/5] Fix build --- ext/standard/assert.c | 5 +++++ ext/standard/assert.stub.php | 7 +++++++ ext/standard/assert_arginfo.h | 19 +++++++++++++++++++ ext/standard/basic_functions.c | 3 --- ext/standard/basic_functions.stub.php | 4 ---- ext/standard/basic_functions_arginfo.h | 17 +---------------- ext/standard/php_assert.h | 2 -- ext/zip/php_zip.stub.php | 3 --- ext/zip/php_zip_arginfo.h | 8 +------- 9 files changed, 33 insertions(+), 35 deletions(-) create mode 100755 ext/standard/assert.stub.php create mode 100644 ext/standard/assert_arginfo.h diff --git a/ext/standard/assert.c b/ext/standard/assert.c index bbaf7cc5403ec..977abc6936c1b 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -17,6 +17,7 @@ /* {{{ includes */ #include "php.h" #include "php_assert.h" +#include "assert_arginfo.h" #include "php_ini.h" #include "zend_exceptions.h" /* }}} */ @@ -44,6 +45,8 @@ enum { ASSERT_EXCEPTION }; +static zend_class_entry *assertion_error_ce; + static PHP_INI_MH(OnChangeCallback) /* {{{ */ { if (EG(current_execute_data)) { @@ -91,6 +94,8 @@ PHP_MINIT_FUNCTION(assert) /* {{{ */ REGISTER_INI_ENTRIES(); + assertion_error_ce = register_class_AssertionError(zend_ce_error); + REGISTER_LONG_CONSTANT("ASSERT_ACTIVE", ASSERT_ACTIVE, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", ASSERT_CALLBACK, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_BAIL", ASSERT_BAIL, CONST_CS|CONST_PERSISTENT); diff --git a/ext/standard/assert.stub.php b/ext/standard/assert.stub.php new file mode 100755 index 0000000000000..85fc99874af64 --- /dev/null +++ b/ext/standard/assert.stub.php @@ -0,0 +1,7 @@ + Date: Mon, 22 Feb 2021 10:43:44 +0100 Subject: [PATCH 4/5] Add AssertionError to basic_functions.stub.php --- ext/standard/assert.c | 5 +---- ext/standard/assert.stub.php | 7 ------- ext/standard/assert_arginfo.h | 19 ------------------- ext/standard/basic_functions.c | 2 ++ ext/standard/basic_functions.stub.php | 4 ++++ ext/standard/basic_functions_arginfo.h | 17 ++++++++++++++++- ext/standard/php_assert.h | 2 ++ 7 files changed, 25 insertions(+), 31 deletions(-) delete mode 100755 ext/standard/assert.stub.php delete mode 100644 ext/standard/assert_arginfo.h diff --git a/ext/standard/assert.c b/ext/standard/assert.c index 977abc6936c1b..8b2e25fcc5a12 100644 --- a/ext/standard/assert.c +++ b/ext/standard/assert.c @@ -17,7 +17,6 @@ /* {{{ includes */ #include "php.h" #include "php_assert.h" -#include "assert_arginfo.h" #include "php_ini.h" #include "zend_exceptions.h" /* }}} */ @@ -45,7 +44,7 @@ enum { ASSERT_EXCEPTION }; -static zend_class_entry *assertion_error_ce; +PHPAPI zend_class_entry *assertion_error_ce; static PHP_INI_MH(OnChangeCallback) /* {{{ */ { @@ -94,8 +93,6 @@ PHP_MINIT_FUNCTION(assert) /* {{{ */ REGISTER_INI_ENTRIES(); - assertion_error_ce = register_class_AssertionError(zend_ce_error); - REGISTER_LONG_CONSTANT("ASSERT_ACTIVE", ASSERT_ACTIVE, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", ASSERT_CALLBACK, CONST_CS|CONST_PERSISTENT); REGISTER_LONG_CONSTANT("ASSERT_BAIL", ASSERT_BAIL, CONST_CS|CONST_PERSISTENT); diff --git a/ext/standard/assert.stub.php b/ext/standard/assert.stub.php deleted file mode 100755 index 85fc99874af64..0000000000000 --- a/ext/standard/assert.stub.php +++ /dev/null @@ -1,7 +0,0 @@ - Date: Mon, 22 Feb 2021 11:58:43 +0100 Subject: [PATCH 5/5] Adapt test to the new class registration order --- .../tests/ReflectionExtension_getClassNames_basic.phpt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/reflection/tests/ReflectionExtension_getClassNames_basic.phpt b/ext/reflection/tests/ReflectionExtension_getClassNames_basic.phpt index e90209ee672d6..5c4d1cb87f1d7 100644 --- a/ext/reflection/tests/ReflectionExtension_getClassNames_basic.phpt +++ b/ext/reflection/tests/ReflectionExtension_getClassNames_basic.phpt @@ -7,14 +7,14 @@ Felix De Vliegher $standard = new ReflectionExtension('standard'); var_dump($standard->getClassNames()); ?> ---EXPECTF-- +--EXPECT-- array(4) { [0]=> - %s(22) "__PHP_Incomplete_Class" + string(22) "__PHP_Incomplete_Class" [1]=> - %s(15) "php_user_filter" + string(14) "AssertionError" [2]=> - %s(9) "Directory" + string(15) "php_user_filter" [3]=> - %s(14) "AssertionError" + string(9) "Directory" }