Skip to content

Commit 452b797

Browse files
committed
fix(opcache): plug generic_args/turbofish_args gaps and serialize_generic_type_entry order in cache
Signed-off-by: azjezz <azjezz@protonmail.com>
1 parent d509040 commit 452b797

1 file changed

Lines changed: 26 additions & 1 deletion

File tree

ext/opcache/zend_file_cache.c

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,12 @@ static void zend_file_cache_serialize_attribute(zval *zv,
253253

254254
static void zend_file_cache_unserialize_attribute(zval *zv, zend_persistent_script *script, void *buf);
255255

256+
static void zend_file_cache_serialize_type(
257+
zend_type *type, zend_persistent_script *script, zend_file_cache_metainfo *info, void *buf);
258+
259+
static void zend_file_cache_unserialize_type(
260+
zend_type *type, zend_class_entry *scope, zend_persistent_script *script, void *buf);
261+
256262
static void *zend_file_cache_serialize_interned(zend_string *str,
257263
zend_file_cache_metainfo *info)
258264
{
@@ -468,6 +474,13 @@ static void zend_file_cache_serialize_attribute(zval *zv,
468474
SERIALIZE_STR(attr->args[i].name);
469475
zend_file_cache_serialize_zval(&attr->args[i].value, script, info, buf);
470476
}
477+
478+
if (attr->generic_args) {
479+
SERIALIZE_PTR(attr->generic_args);
480+
zend_type *t = attr->generic_args;
481+
UNSERIALIZE_PTR(t);
482+
zend_file_cache_serialize_type(t, script, info, buf);
483+
}
471484
}
472485

473486
static void zend_file_cache_serialize_type(
@@ -515,8 +528,8 @@ static void zend_file_cache_serialize_type(
515528
static void zend_file_cache_serialize_generic_type_entry(
516529
zval *zv, zend_persistent_script *script, zend_file_cache_metainfo *info, void *buf)
517530
{
518-
zend_type *boxed = Z_PTR_P(zv);
519531
SERIALIZE_PTR(Z_PTR_P(zv));
532+
zend_type *boxed = Z_PTR_P(zv);
520533
UNSERIALIZE_PTR(boxed);
521534
zend_file_cache_serialize_type(boxed, script, info, buf);
522535
}
@@ -583,6 +596,9 @@ static void zend_file_cache_serialize_generic_type_table(
583596
if (table->trait_uses) {
584597
zend_file_cache_serialize_generic_type_table_ht(&table->trait_uses, script, info, buf);
585598
}
599+
if (table->turbofish_args) {
600+
zend_file_cache_serialize_generic_type_table_ht(&table->turbofish_args, script, info, buf);
601+
}
586602
}
587603

588604
static void zend_file_cache_serialize_op_array(zend_op_array *op_array,
@@ -1495,6 +1511,11 @@ static void zend_file_cache_unserialize_attribute(zval *zv, zend_persistent_scri
14951511
UNSERIALIZE_STR(attr->args[i].name);
14961512
zend_file_cache_unserialize_zval(&attr->args[i].value, script, buf);
14971513
}
1514+
1515+
if (attr->generic_args) {
1516+
UNSERIALIZE_PTR(attr->generic_args);
1517+
zend_file_cache_unserialize_type(attr->generic_args, NULL, script, buf);
1518+
}
14981519
}
14991520

15001521
static void zend_file_cache_unserialize_type(
@@ -1612,6 +1633,10 @@ static void zend_file_cache_unserialize_generic_type_table(
16121633
if (table->trait_uses) {
16131634
zend_file_cache_unserialize_generic_type_table_ht(&table->trait_uses, scope, script, buf);
16141635
}
1636+
1637+
if (table->turbofish_args) {
1638+
zend_file_cache_unserialize_generic_type_table_ht(&table->turbofish_args, scope, script, buf);
1639+
}
16151640
}
16161641

16171642
static void zend_file_cache_unserialize_op_array(zend_op_array *op_array,

0 commit comments

Comments
 (0)