diff options
author | Dmitry Stogov <dmitry@zend.com> | 2021-02-10 18:00:00 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2021-02-10 18:00:00 +0300 |
commit | ef5164818576d75929834d9f0c15cdfc095f7139 (patch) | |
tree | a7dd0242dc053a42b9885bb031707ec84d2be6c7 /Zend/zend_compile.c | |
parent | a8f6d44c1c36e95c0b053555b2c616fe396ab810 (diff) | |
download | php-git-ef5164818576d75929834d9f0c15cdfc095f7139.tar.gz |
Use zend_type.ce_cache__ptr for caching class resulution during argument/result type checks
Diffstat (limited to 'Zend/zend_compile.c')
-rw-r--r-- | Zend/zend_compile.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index d617547f81..069acae0c1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1197,7 +1197,13 @@ zend_string *zend_type_to_string_resolved(zend_type type, zend_class_entry *scop } else { if (ZEND_TYPE_HAS_CE_CACHE(*list_type) && ZEND_TYPE_CE_CACHE(*list_type)) { - str = add_type_string(str, ZEND_TYPE_CE_CACHE(*list_type)->name); + zend_class_entry *ce = ZEND_TYPE_CE_CACHE(*list_type); + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + zend_string *tmp = zend_string_init(ZSTR_VAL(ce->name), strlen(ZSTR_VAL(ce->name)), 0); + str = add_type_string(str, tmp); + } else { + str = add_type_string(str, ce->name); + } } else { zend_string *resolved = resolve_class_name(ZEND_TYPE_NAME(*list_type), scope); str = add_type_string(str, resolved); @@ -1208,7 +1214,12 @@ zend_string *zend_type_to_string_resolved(zend_type type, zend_class_entry *scop } else if (ZEND_TYPE_HAS_NAME(type)) { if (ZEND_TYPE_HAS_CE_CACHE(type) && ZEND_TYPE_CE_CACHE(type)) { - str = zend_string_copy(ZEND_TYPE_CE_CACHE(type)->name); + zend_class_entry *ce = ZEND_TYPE_CE_CACHE(type); + if (ce->ce_flags & ZEND_ACC_ANON_CLASS) { + str = zend_string_init(ZSTR_VAL(ce->name), strlen(ZSTR_VAL(ce->name)), 0); + } else { + str = zend_string_copy(ce->name); + } } else { str = resolve_class_name(ZEND_TYPE_NAME(type), scope); } |