From ef5164818576d75929834d9f0c15cdfc095f7139 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 10 Feb 2021 18:00:00 +0300 Subject: Use zend_type.ce_cache__ptr for caching class resulution during argument/result type checks --- Zend/zend_compile.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'Zend/zend_compile.c') 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); } -- cgit v1.2.1