summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-01-02 15:16:24 +0100
committerNikita Popov <nikita.ppv@gmail.com>2020-01-02 15:16:24 +0100
commit48622970fb10e21d83aaccd15076850d1e1817d3 (patch)
treeb3c22fa1f024f3476ad2268804dc67a4a807f176
parent36d5fbbd6bceb1e0e1130bb1fff07a702d548594 (diff)
downloadphp-git-48622970fb10e21d83aaccd15076850d1e1817d3.tar.gz
Extract functions for file cache type serialization
This is already done in master.
-rw-r--r--ext/opcache/zend_file_cache.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c
index 6b8ef20434..36345e63d8 100644
--- a/ext/opcache/zend_file_cache.c
+++ b/ext/opcache/zend_file_cache.c
@@ -371,6 +371,21 @@ static void zend_file_cache_serialize_zval(zval *zv,
}
}
+static void zend_file_cache_serialize_type(
+ zend_type *type, zend_persistent_script *script, zend_file_cache_metainfo *info, void *buf)
+{
+ if (ZEND_TYPE_IS_CLASS(*type)) {
+ zend_bool allow_null = ZEND_TYPE_ALLOW_NULL(*type);
+ zend_string *type_name = ZEND_TYPE_NAME(*type);
+
+ SERIALIZE_STR(type_name);
+ *type =
+ (Z_UL(1) << (sizeof(zend_type)*8-1)) | /* type is class */
+ (allow_null ? (Z_UL(1) << (sizeof(zend_type)*8-2)) : Z_UL(0)) | /* type allow null */
+ (zend_type)type_name;
+ }
+}
+
static void zend_file_cache_serialize_op_array(zend_op_array *op_array,
zend_persistent_script *script,
zend_file_cache_metainfo *info,
@@ -498,16 +513,7 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra
if (!IS_SERIALIZED(p->name)) {
SERIALIZE_STR(p->name);
}
- if (ZEND_TYPE_IS_CLASS(p->type)) {
- zend_bool allow_null = ZEND_TYPE_ALLOW_NULL(p->type);
- zend_string *type_name = ZEND_TYPE_NAME(p->type);
-
- SERIALIZE_STR(type_name);
- p->type =
- (Z_UL(1) << (sizeof(zend_type)*8-1)) | /* type is class */
- (allow_null ? (Z_UL(1) << (sizeof(zend_type)*8-2)) : Z_UL(0)) | /* type allow null */
- (zend_type)type_name;
- }
+ zend_file_cache_serialize_type(&p->type, script, info, buf);
p++;
}
}
@@ -1080,6 +1086,18 @@ static void zend_file_cache_unserialize_zval(zval *zv,
}
}
+static void zend_file_cache_unserialize_type(
+ zend_type *type, zend_persistent_script *script, void *buf)
+{
+ if (*type & (Z_UL(1) << (sizeof(zend_type)*8-1))) { /* type is class */
+ zend_bool allow_null = (*type & (Z_UL(1) << (sizeof(zend_type)*8-2))) != 0; /* type allow null */
+ zend_string *type_name = (zend_string*)(*type & ~(((Z_UL(1) << (sizeof(zend_type)*8-1))) | ((Z_UL(1) << (sizeof(zend_type)*8-2)))));
+
+ UNSERIALIZE_STR(type_name);
+ *type = ZEND_TYPE_ENCODE_CLASS(type_name, allow_null);
+ }
+}
+
static void zend_file_cache_unserialize_op_array(zend_op_array *op_array,
zend_persistent_script *script,
void *buf)
@@ -1195,13 +1213,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
if (!IS_UNSERIALIZED(p->name)) {
UNSERIALIZE_STR(p->name);
}
- if (p->type & (Z_UL(1) << (sizeof(zend_type)*8-1))) { /* type is class */
- zend_bool allow_null = (p->type & (Z_UL(1) << (sizeof(zend_type)*8-2))) != 0; /* type allow null */
- zend_string *type_name = (zend_string*)(p->type & ~(((Z_UL(1) << (sizeof(zend_type)*8-1))) | ((Z_UL(1) << (sizeof(zend_type)*8-2)))));
-
- UNSERIALIZE_STR(type_name);
- p->type = ZEND_TYPE_ENCODE_CLASS(type_name, allow_null);
- }
+ zend_file_cache_unserialize_type(&p->type, script, buf);
p++;
}
}