|
29 | 29 | #include "zend_operators.h" |
30 | 30 | #include "zend_interfaces.h" |
31 | 31 | #include "zend_attributes.h" |
| 32 | +#include "zend_class_alias.h" |
32 | 33 |
|
33 | 34 | #ifdef HAVE_JIT |
34 | 35 | # include "Optimizer/zend_func_info.h" |
@@ -909,6 +910,21 @@ static void zend_persist_class_constant(zval *zv) |
909 | 910 | zend_persist_type(&c->type); |
910 | 911 | } |
911 | 912 |
|
| 913 | +zend_class_alias *zend_persist_class_alias_entry(zend_class_alias *orig_alias) |
| 914 | +{ |
| 915 | + Bucket *p; |
| 916 | + zend_class_alias *alias = orig_alias; |
| 917 | + |
| 918 | + alias = zend_shared_memdup_put(alias, sizeof(zend_class_alias)); |
| 919 | + alias->ce = zend_persist_class_entry(alias->ce); |
| 920 | + // zend_accel_store_string(alias->name); |
| 921 | + if (alias->attributes) { |
| 922 | + alias->attributes = zend_persist_attributes(alias->attributes); |
| 923 | + } |
| 924 | + |
| 925 | + return alias; |
| 926 | +} |
| 927 | + |
912 | 928 | zend_class_entry *zend_persist_class_entry(zend_class_entry *orig_ce) |
913 | 929 | { |
914 | 930 | Bucket *p; |
@@ -1296,7 +1312,12 @@ static void zend_accel_persist_class_table(HashTable *class_table) |
1296 | 1312 | ZEND_HASH_MAP_FOREACH_BUCKET(class_table, p) { |
1297 | 1313 | ZEND_ASSERT(p->key != NULL); |
1298 | 1314 | zend_accel_store_interned_string(p->key); |
1299 | | - Z_CE(p->val) = zend_persist_class_entry(Z_CE(p->val)); |
| 1315 | + if (Z_TYPE(p->val) == IS_ALIAS_PTR) { |
| 1316 | + Z_CLASS_ALIAS(p->val) = zend_persist_class_alias_entry(Z_CLASS_ALIAS(p->val)); |
| 1317 | + } else { |
| 1318 | + ZEND_ASSERT(Z_TYPE(p->val) == IS_PTR); |
| 1319 | + Z_CE(p->val) = zend_persist_class_entry(Z_CE(p->val)); |
| 1320 | + } |
1300 | 1321 | } ZEND_HASH_FOREACH_END(); |
1301 | 1322 | ZEND_HASH_MAP_FOREACH_BUCKET(class_table, p) { |
1302 | 1323 | if (EXPECTED(Z_TYPE(p->val) != IS_ALIAS_PTR)) { |
|
0 commit comments