From: Dmitry Stogov Date: Mon, 15 Feb 2021 09:33:53 +0000 (+0300) Subject: Persist class name before methods, because it may be used insted of "self" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=15f713bd850977f1650b9e902b6ecfe1ac818a13;p=php Persist class name before methods, because it may be used insted of "self" --- diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index e5aad26133..ea6fa096b6 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -846,6 +846,13 @@ zend_class_entry *zend_persist_class_entry(zend_class_entry *orig_ce) } ce->inheritance_cache = NULL; + if (!(ce->ce_flags & ZEND_ACC_CACHED)) { + zend_accel_store_interned_string(ce->name); + if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { + zend_accel_store_interned_string(ce->parent_name); + } + } + zend_hash_persist(&ce->function_table); ZEND_HASH_FOREACH_BUCKET(&ce->function_table, p) { ZEND_ASSERT(p->key != NULL); @@ -950,11 +957,6 @@ zend_class_entry *zend_persist_class_entry(zend_class_entry *orig_ce) ce->ce_flags |= ZEND_ACC_CACHED; - zend_accel_store_interned_string(ce->name); - if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { - zend_accel_store_interned_string(ce->parent_name); - } - if (ce->info.user.filename) { zend_accel_store_string(ce->info.user.filename); } diff --git a/ext/opcache/zend_persist_calc.c b/ext/opcache/zend_persist_calc.c index d708758a33..015490b07a 100644 --- a/ext/opcache/zend_persist_calc.c +++ b/ext/opcache/zend_persist_calc.c @@ -387,6 +387,13 @@ void zend_persist_class_entry_calc(zend_class_entry *ce) ADD_SIZE(sizeof(zend_class_entry)); + if (!(ce->ce_flags & ZEND_ACC_CACHED)) { + ADD_INTERNED_STRING(ce->name); + if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { + ADD_INTERNED_STRING(ce->parent_name); + } + } + zend_hash_persist_calc(&ce->function_table); ZEND_HASH_FOREACH_BUCKET(&ce->function_table, p) { ZEND_ASSERT(p->key != NULL); @@ -444,11 +451,6 @@ void zend_persist_class_entry_calc(zend_class_entry *ce) return; } - ADD_INTERNED_STRING(ce->name); - if (ce->parent_name && !(ce->ce_flags & ZEND_ACC_LINKED)) { - ADD_INTERNED_STRING(ce->parent_name); - } - if (ce->info.user.filename) { ADD_STRING(ce->info.user.filename); }