}
}
-static zend_ast *zend_file_cache_serialize_ast(zend_ast *ast,
- zend_persistent_script *script,
- zend_file_cache_metainfo *info,
- void *buf)
+static void zend_file_cache_serialize_ast(zend_ast *ast,
+ zend_persistent_script *script,
+ zend_file_cache_metainfo *info,
+ void *buf)
{
uint32_t i;
- zend_ast *ret;
-
- SERIALIZE_PTR(ast);
- ret = ast;
- UNSERIALIZE_PTR(ast);
+ zend_ast *tmp;
if (ast->kind == ZEND_AST_ZVAL || ast->kind == ZEND_AST_CONSTANT) {
zend_file_cache_serialize_zval(&((zend_ast_zval*)ast)->val, script, info, buf);
} else if (zend_ast_is_list(ast)) {
zend_ast_list *list = zend_ast_get_list(ast);
for (i = 0; i < list->children; i++) {
- if (list->child[i]) {
- list->child[i] = zend_file_cache_serialize_ast(list->child[i], script, info, buf);
+ if (list->child[i] && !IS_SERIALIZED(list->child[i])) {
+ SERIALIZE_PTR(list->child[i]);
+ tmp = list->child[i];
+ UNSERIALIZE_PTR(tmp);
+ zend_file_cache_serialize_ast(tmp, script, info, buf);
}
}
} else {
uint32_t children = zend_ast_get_num_children(ast);
for (i = 0; i < children; i++) {
- if (ast->child[i]) {
- ast->child[i] = zend_file_cache_serialize_ast(ast->child[i], script, info, buf);
+ if (ast->child[i] && !IS_SERIALIZED(ast->child[i])) {
+ SERIALIZE_PTR(ast->child[i]);
+ tmp = ast->child[i];
+ UNSERIALIZE_PTR(tmp);
+ zend_file_cache_serialize_ast(tmp, script, info, buf);
}
}
}
- return ret;
}
static void zend_file_cache_serialize_zval(zval *zv,
SERIALIZE_PTR(Z_AST_P(zv));
ast = Z_AST_P(zv);
UNSERIALIZE_PTR(ast);
- zend_file_cache_serialize_ast(Z_ASTVAL_P(zv), script, info, buf);
+ zend_file_cache_serialize_ast(GC_AST(ast), script, info, buf);
}
break;
}
}
}
-static zend_ast *zend_file_cache_unserialize_ast(zend_ast *ast,
- zend_persistent_script *script,
- void *buf)
+static void zend_file_cache_unserialize_ast(zend_ast *ast,
+ zend_persistent_script *script,
+ void *buf)
{
uint32_t i;
- UNSERIALIZE_PTR(ast);
-
if (ast->kind == ZEND_AST_ZVAL || ast->kind == ZEND_AST_CONSTANT) {
zend_file_cache_unserialize_zval(&((zend_ast_zval*)ast)->val, script, buf);
} else if (zend_ast_is_list(ast)) {
zend_ast_list *list = zend_ast_get_list(ast);
for (i = 0; i < list->children; i++) {
- if (list->child[i]) {
- list->child[i] = zend_file_cache_unserialize_ast(list->child[i], script, buf);
+ if (list->child[i] && !IS_UNSERIALIZED(list->child[i])) {
+ UNSERIALIZE_PTR(list->child[i]);
+ zend_file_cache_unserialize_ast(list->child[i], script, buf);
}
}
} else {
uint32_t children = zend_ast_get_num_children(ast);
for (i = 0; i < children; i++) {
- if (ast->child[i]) {
- ast->child[i] = zend_file_cache_unserialize_ast(ast->child[i], script, buf);
+ if (ast->child[i] && !IS_UNSERIALIZED(ast->child[i])) {
+ UNSERIALIZE_PTR(ast->child[i]);
+ zend_file_cache_unserialize_ast(ast->child[i], script, buf);
}
}
}
- return ast;
}
static void zend_file_cache_unserialize_zval(zval *zv,