diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-02 15:16:24 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2020-01-02 15:16:24 +0100 |
commit | 48622970fb10e21d83aaccd15076850d1e1817d3 (patch) | |
tree | b3c22fa1f024f3476ad2268804dc67a4a807f176 /ext/opcache | |
parent | 36d5fbbd6bceb1e0e1130bb1fff07a702d548594 (diff) | |
download | php-git-48622970fb10e21d83aaccd15076850d1e1817d3.tar.gz |
Extract functions for file cache type serialization
This is already done in master.
Diffstat (limited to 'ext/opcache')
-rw-r--r-- | ext/opcache/zend_file_cache.c | 46 |
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++; } } |