diff options
author | Dmitry Stogov <dmitry@zend.com> | 2020-03-13 11:42:07 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2020-03-13 11:42:07 +0300 |
commit | 78b64bd4ed2c242287ea47bcf2b16a84c0807a65 (patch) | |
tree | c2af85350b888542f2494ecf2841182f816cc12d /Zend/zend_compile.c | |
parent | c9db32271a8083721582c5ec1dd09c4d4f562c74 (diff) | |
parent | c5159b383218968be307fb96f9fd19b2b6e17c90 (diff) | |
download | php-git-78b64bd4ed2c242287ea47bcf2b16a84c0807a65.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Check asserts early
identation fix
Call global code of preloaded script in global context
Avoid "Anonymous class wasn't preloaded" error by lazely loading of not preloaded part of a preloaded script
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r-- | Zend/zend_compile.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index fc5b92f09c..2050e3ba71 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1125,11 +1125,21 @@ ZEND_API int do_bind_class(zval *lcname, zend_string *lc_parent_name) /* {{{ */ ce = zend_hash_find_ptr(EG(class_table), Z_STR_P(lcname)); if (ce) { zend_error_noreturn(E_COMPILE_ERROR, "Cannot declare %s %s, because the name is already in use", zend_get_object_type(ce), ZSTR_VAL(ce->name)); + return FAILURE; } else { - ZEND_ASSERT(EG(current_execute_data)->func->op_array.fn_flags & ZEND_ACC_PRELOADED); - zend_error_noreturn(E_ERROR, "Class %s wasn't preloaded", Z_STRVAL_P(lcname)); + do { + ZEND_ASSERT(EG(current_execute_data)->func->op_array.fn_flags & ZEND_ACC_PRELOADED); + if (zend_preload_autoload + && zend_preload_autoload(EG(current_execute_data)->func->op_array.filename) == SUCCESS) { + zv = zend_hash_find_ex(EG(class_table), Z_STR_P(rtd_key), 1); + if (EXPECTED(zv != NULL)) { + break; + } + } + zend_error_noreturn(E_ERROR, "Class %s wasn't preloaded", Z_STRVAL_P(lcname)); + return FAILURE; + } while (0); } - return FAILURE; } /* Register the derived class */ |