@@ -100,14 +100,15 @@ ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_constant(zend_string *name, ze
100100 return (zend_ast * ) ast ;
101101}
102102
103- ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_op_array (zend_op_array * op_array , zend_ast * original_ast , zend_ast_attr attr ) {
103+ ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_op_array (zend_op_array * op_array , zend_string * original_ast ) {
104104 zend_ast_op_array * ast ;
105105
106106 ast = zend_ast_alloc (sizeof (zend_ast_op_array ));
107107 ast -> kind = ZEND_AST_OP_ARRAY ;
108- ast -> attr = attr ;
108+ ast -> attr = 0 ;
109+ ast -> lineno = CG (zend_lineno );
109110 ast -> op_array = op_array ;
110- ast -> ast = original_ast ;
111+ ast -> original_ast = original_ast ;
111112
112113 return (zend_ast * ) ast ;
113114}
@@ -1091,7 +1092,7 @@ static size_t ZEND_FASTCALL zend_ast_tree_size(zend_ast *ast)
10911092 if (ast -> kind == ZEND_AST_ZVAL || ast -> kind == ZEND_AST_CONSTANT ) {
10921093 size = sizeof (zend_ast_zval );
10931094 } else if (ast -> kind == ZEND_AST_OP_ARRAY ) {
1094- size = sizeof (zend_ast_op_array ) + zend_ast_tree_size ( zend_ast_get_op_array ( ast ) -> ast ) ;
1095+ size = sizeof (zend_ast_op_array );
10951096 } else if (zend_ast_is_list (ast )) {
10961097 uint32_t i ;
10971098 zend_ast_list * list = zend_ast_get_list (ast );
@@ -1161,10 +1162,10 @@ static void* ZEND_FASTCALL zend_ast_tree_copy(zend_ast *ast, void *buf)
11611162 zend_ast_op_array * new = (zend_ast_op_array * )buf ;
11621163 new -> kind = old -> kind ;
11631164 new -> attr = old -> attr ;
1165+ new -> lineno = old -> lineno ;
11641166 new -> op_array = old -> op_array ;
1167+ new -> original_ast = zend_string_copy (old -> original_ast );
11651168 buf = (void * )((char * )buf + sizeof (zend_ast_op_array ));
1166- new -> ast = (zend_ast * )buf ;
1167- buf = zend_ast_tree_copy (old -> ast , buf );
11681169 } else if (zend_ast_is_decl (ast )) {
11691170 zend_ast_decl * old = (zend_ast_decl * )ast ;
11701171 zend_ast_decl * new = (zend_ast_decl * )buf ;
@@ -1257,7 +1258,7 @@ ZEND_API void ZEND_FASTCALL zend_ast_destroy(zend_ast *ast)
12571258 } else if (EXPECTED (ast -> kind == ZEND_AST_CONSTANT )) {
12581259 zend_string_release_ex (zend_ast_get_constant_name (ast ), 0 );
12591260 } else if (EXPECTED (ast -> kind == ZEND_AST_OP_ARRAY )) {
1260- zend_ast_destroy (zend_ast_get_op_array (ast )-> ast );
1261+ zend_string_release_ex (zend_ast_get_op_array (ast )-> original_ast , 0 );
12611262 } else if (zend_ast_is_decl (ast )) {
12621263 zend_ast_decl * decl = (zend_ast_decl * ) ast ;
12631264
@@ -1875,10 +1876,9 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
18751876 smart_str_appendl (str , ZSTR_VAL (name ), ZSTR_LEN (name ));
18761877 break ;
18771878 }
1878- case ZEND_AST_OP_ARRAY : {
1879- zend_ast_export_ex (str , zend_ast_get_op_array (ast )-> ast , priority , indent );
1879+ case ZEND_AST_OP_ARRAY :
1880+ smart_str_append (str , zend_ast_get_op_array (ast )-> original_ast );
18801881 break ;
1881- }
18821882 case ZEND_AST_CONSTANT_CLASS :
18831883 smart_str_appendl (str , "__CLASS__" , sizeof ("__CLASS__" )- 1 );
18841884 break ;
0 commit comments