]> granicus.if.org Git - php/commitdiff
Persist class name before methods, because it may be used insted of "self"
authorDmitry Stogov <dmitry@zend.com>
Mon, 15 Feb 2021 09:33:53 +0000 (12:33 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 15 Feb 2021 09:33:53 +0000 (12:33 +0300)
ext/opcache/zend_persist.c
ext/opcache/zend_persist_calc.c

index e5aad26133fac9d628e6799696ddace96e803bca..ea6fa096b645d04fe91b256aa2d2124965aae93d 100644 (file)
@@ -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);
                }
index d708758a338ddc2ffc2603b4182dc71e2abf1a8a..015490b07a16144dd88d8d31c0d47544989b6468 100644 (file)
@@ -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);
                }