diff options
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); } |