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_vm_def.h | |
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_vm_def.h')
-rw-r--r-- | Zend/zend_vm_def.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 168fa0de70..68ef127ef6 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -7157,8 +7157,17 @@ ZEND_VM_HANDLER(146, ZEND_DECLARE_ANON_CLASS, ANY, ANY, CACHE_SLOT) zv = zend_hash_find_ex(EG(class_table), rtd_key, 1); if (UNEXPECTED(zv == NULL)) { SAVE_OPLINE(); - ZEND_ASSERT(EX(func)->op_array.fn_flags & ZEND_ACC_PRELOADED); - zend_error_noreturn(E_ERROR, "Anonymous class wasn't preloaded"); + do { + ZEND_ASSERT(EX(func)->op_array.fn_flags & ZEND_ACC_PRELOADED); + if (zend_preload_autoload + && zend_preload_autoload(EX(func)->op_array.filename) == SUCCESS) { + zv = zend_hash_find_ex(EG(class_table), rtd_key, 1); + if (EXPECTED(zv != NULL)) { + break; + } + } + zend_error_noreturn(E_ERROR, "Anonymous class wasn't preloaded"); + } while (0); } ZEND_ASSERT(zv != NULL); ce = Z_CE_P(zv); |