Lines Matching refs:ast

92 static bool zend_try_ct_eval_array(zval *result, zend_ast *ast);
95 static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref);
96 static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref);
97 static void zend_compile_expr(znode *result, zend_ast *ast);
98 static void zend_compile_stmt(zend_ast *ast);
99 static void zend_compile_assign(znode *result, zend_ast *ast);
1002 zend_string *zend_resolve_class_name_ast(zend_ast *ast) /* {{{ */ in zend_resolve_class_name_ast() argument
1004 zval *class_name = zend_ast_get_zval(ast); in zend_resolve_class_name_ast()
1008 return zend_resolve_class_name(Z_STR_P(class_name), ast->attr); in zend_resolve_class_name_ast()
1023 static bool zend_is_call(zend_ast *ast);
1562 static zend_string *zend_resolve_const_class_name_reference(zend_ast *ast, const char *type) in zend_resolve_const_class_name_reference() argument
1564 zend_string *class_name = zend_ast_get_str(ast); in zend_resolve_const_class_name_reference()
1565 if (ZEND_FETCH_CLASS_DEFAULT != zend_get_class_fetch_type_ast(ast)) { in zend_resolve_const_class_name_reference()
1570 return zend_resolve_class_name(class_name, ast->attr); in zend_resolve_const_class_name_reference()
1939 zend_ast *zend_negate_num_string(zend_ast *ast) /* {{{ */ in zend_negate_num_string() argument
1941 zval *zv = zend_ast_get_zval(ast); in zend_negate_num_string()
1957 return ast; in zend_negate_num_string()
2298 static bool zend_ast_is_short_circuited(const zend_ast *ast) in zend_ast_is_short_circuited() argument
2300 switch (ast->kind) { in zend_ast_is_short_circuited()
2306 return zend_ast_is_short_circuited(ast->child[0]); in zend_ast_is_short_circuited()
2315 static void zend_assert_not_short_circuited(const zend_ast *ast) in zend_assert_not_short_circuited() argument
2317 if (zend_ast_is_short_circuited(ast)) { in zend_assert_not_short_circuited()
2328 static void zend_short_circuiting_mark_inner(zend_ast *ast) { in zend_short_circuiting_mark_inner() argument
2329 if (zend_ast_kind_is_short_circuited(ast->kind)) { in zend_short_circuiting_mark_inner()
2330 ast->attr |= ZEND_SHORT_CIRCUITING_INNER; in zend_short_circuiting_mark_inner()
2339 static void zend_short_circuiting_commit(uint32_t checkpoint, znode *result, zend_ast *ast) in zend_short_circuiting_commit() argument
2341 bool is_short_circuited = zend_ast_kind_is_short_circuited(ast->kind) in zend_short_circuiting_commit()
2342 || ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY; in zend_short_circuiting_commit()
2349 if (ast->attr & ZEND_SHORT_CIRCUITING_INNER) { in zend_short_circuiting_commit()
2360 ast->kind == ZEND_AST_ISSET ? ZEND_SHORT_CIRCUITING_CHAIN_ISSET : in zend_short_circuiting_commit()
2361 ast->kind == ZEND_AST_EMPTY ? ZEND_SHORT_CIRCUITING_CHAIN_EMPTY : in zend_short_circuiting_commit()
2539 static inline bool zend_is_variable(zend_ast *ast) /* {{{ */ in zend_is_variable() argument
2541 return ast->kind == ZEND_AST_VAR in zend_is_variable()
2542 || ast->kind == ZEND_AST_DIM in zend_is_variable()
2543 || ast->kind == ZEND_AST_PROP in zend_is_variable()
2544 || ast->kind == ZEND_AST_NULLSAFE_PROP in zend_is_variable()
2545 || ast->kind == ZEND_AST_STATIC_PROP; in zend_is_variable()
2549 static inline bool zend_is_call(zend_ast *ast) /* {{{ */ in zend_is_call() argument
2551 return ast->kind == ZEND_AST_CALL in zend_is_call()
2552 || ast->kind == ZEND_AST_METHOD_CALL in zend_is_call()
2553 || ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL in zend_is_call()
2554 || ast->kind == ZEND_AST_STATIC_CALL; in zend_is_call()
2558 static inline bool zend_is_variable_or_call(zend_ast *ast) /* {{{ */ in zend_is_variable_or_call() argument
2560 return zend_is_variable(ast) || zend_is_call(ast); in zend_is_variable_or_call()
2564 static inline bool zend_is_unticked_stmt(zend_ast *ast) /* {{{ */ in zend_is_unticked_stmt() argument
2566 return ast->kind == ZEND_AST_STMT_LIST || ast->kind == ZEND_AST_LABEL in zend_is_unticked_stmt()
2567 || ast->kind == ZEND_AST_PROP_DECL || ast->kind == ZEND_AST_CLASS_CONST_GROUP in zend_is_unticked_stmt()
2568 || ast->kind == ZEND_AST_USE_TRAIT || ast->kind == ZEND_AST_METHOD; in zend_is_unticked_stmt()
2572 static inline bool zend_can_write_to_variable(zend_ast *ast) /* {{{ */ in zend_can_write_to_variable() argument
2575 ast->kind == ZEND_AST_DIM in zend_can_write_to_variable()
2576 || ast->kind == ZEND_AST_PROP in zend_can_write_to_variable()
2578 ast = ast->child[0]; in zend_can_write_to_variable()
2581 return zend_is_variable_or_call(ast) && !zend_ast_is_short_circuited(ast); in zend_can_write_to_variable()
2694 static zend_result zend_try_compile_cv(znode *result, zend_ast *ast) /* {{{ */ in zend_try_compile_cv() argument
2696 zend_ast *name_ast = ast->child[0]; in zend_try_compile_cv()
2725 static zend_op *zend_compile_simple_var_no_cv(znode *result, zend_ast *ast, uint32_t type, bool del… in zend_compile_simple_var_no_cv() argument
2727 zend_ast *name_ast = ast->child[0]; in zend_compile_simple_var_no_cv()
2755 static bool is_this_fetch(zend_ast *ast) /* {{{ */ in is_this_fetch() argument
2757 if (ast->kind == ZEND_AST_VAR && ast->child[0]->kind == ZEND_AST_ZVAL) { in is_this_fetch()
2758 zval *name = zend_ast_get_zval(ast->child[0]); in is_this_fetch()
2766 static bool is_globals_fetch(const zend_ast *ast) in is_globals_fetch() argument
2768 if (ast->kind == ZEND_AST_VAR && ast->child[0]->kind == ZEND_AST_ZVAL) { in is_globals_fetch()
2769 zval *name = zend_ast_get_zval(ast->child[0]); in is_globals_fetch()
2776 static bool is_global_var_fetch(zend_ast *ast) in is_global_var_fetch() argument
2778 return ast->kind == ZEND_AST_DIM && is_globals_fetch(ast->child[0]); in is_global_var_fetch()
2791 static zend_op *zend_compile_simple_var(znode *result, zend_ast *ast, uint32_t type, bool delayed) … in zend_compile_simple_var() argument
2793 if (is_this_fetch(ast)) { in zend_compile_simple_var()
2801 } else if (is_globals_fetch(ast)) { in zend_compile_simple_var()
2808 } else if (zend_try_compile_cv(result, ast) == FAILURE) { in zend_compile_simple_var()
2809 return zend_compile_simple_var_no_cv(result, ast, type, delayed); in zend_compile_simple_var()
2815 static void zend_separate_if_call_and_write(znode *node, zend_ast *ast, uint32_t type) /* {{{ */ in zend_separate_if_call_and_write() argument
2821 && zend_is_call(ast)) { in zend_separate_if_call_and_write()
2843 static zend_op *zend_delayed_compile_dim(znode *result, zend_ast *ast, uint32_t type, bool by_ref) in zend_delayed_compile_dim() argument
2845 if (ast->attr == ZEND_DIM_ALTERNATIVE_SYNTAX) { in zend_delayed_compile_dim()
2848 zend_ast *var_ast = ast->child[0]; in zend_delayed_compile_dim()
2849 zend_ast *dim_ast = ast->child[1]; in zend_delayed_compile_dim()
2909 static zend_op *zend_compile_dim(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */ in zend_compile_dim() argument
2912 zend_delayed_compile_dim(result, ast, type, by_ref); in zend_compile_dim()
2917 static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_delayed_compile_prop() argument
2919 zend_ast *obj_ast = ast->child[0]; in zend_delayed_compile_prop()
2920 zend_ast *prop_ast = ast->child[1]; in zend_delayed_compile_prop()
2924 bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_PROP; in zend_delayed_compile_prop()
2991 static zend_op *zend_compile_prop(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ … in zend_compile_prop() argument
2994 zend_op *opline = zend_delayed_compile_prop(result, ast, type); in zend_compile_prop()
3002 static zend_op *zend_compile_static_prop(znode *result, zend_ast *ast, uint32_t type, bool by_ref, … in zend_compile_static_prop() argument
3004 zend_ast *class_ast = ast->child[0]; in zend_compile_static_prop()
3005 zend_ast *prop_ast = ast->child[1]; in zend_compile_static_prop()
3061 static bool zend_propagate_list_refs(zend_ast *ast) { /* {{{ */ in zend_propagate_list_refs() argument
3062 zend_ast_list *list = zend_ast_get_list(ast); in zend_propagate_list_refs()
3094 znode *result, zend_ast *ast, znode *expr_node, zend_ast_attr array_style) /* {{{ */ in zend_compile_list_assign() argument
3096 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_list_assign()
3183 static void zend_ensure_writable_variable(const zend_ast *ast) /* {{{ */ in zend_ensure_writable_variable() argument
3185 if (ast->kind == ZEND_AST_CALL) { in zend_ensure_writable_variable()
3189 ast->kind == ZEND_AST_METHOD_CALL in zend_ensure_writable_variable()
3190 || ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL in zend_ensure_writable_variable()
3191 || ast->kind == ZEND_AST_STATIC_CALL in zend_ensure_writable_variable()
3195 if (zend_ast_is_short_circuited(ast)) { in zend_ensure_writable_variable()
3198 if (is_globals_fetch(ast)) { in zend_ensure_writable_variable()
3247 static void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign() argument
3249 zend_ast *var_ast = ast->child[0]; in zend_compile_assign()
3250 zend_ast *expr_ast = ast->child[1]; in zend_compile_assign()
3344 static void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign_ref() argument
3346 zend_ast *target_ast = ast->child[0]; in zend_compile_assign_ref()
3347 zend_ast *source_ast = ast->child[1]; in zend_compile_assign_ref()
3416 static void zend_compile_compound_assign(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_compound_assign() argument
3418 zend_ast *var_ast = ast->child[0]; in zend_compile_compound_assign()
3419 zend_ast *expr_ast = ast->child[1]; in zend_compile_compound_assign()
3420 uint32_t opcode = ast->attr; in zend_compile_compound_assign()
3512 zend_ast *ast, zend_function *fbc, bool *may_have_extra_named_args) /* {{{ */ in zend_compile_args() argument
3514 zend_ast_list *args = zend_ast_get_list(ast); in zend_compile_args()
3634 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_args()
4506 static void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_call() argument
4508 zend_ast *name_ast = ast->child[0]; in zend_compile_call()
4509 zend_ast *args_ast = ast->child[1]; in zend_compile_call()
4516 zend_compile_dynamic_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4526 …ompile_assert(result, zend_ast_get_list(args_ast), Z_STR(name_node.u.constant), NULL, ast->lineno); in zend_compile_call()
4531 zend_compile_memoized_expr(result, ast); in zend_compile_call()
4534 zend_compile_ns_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4552 zend_compile_assert(result, zend_ast_get_list(args_ast), lcname, fbc, ast->lineno); in zend_compile_call()
4557 zend_compile_memoized_expr(result, ast); in zend_compile_call()
4568 zend_compile_dynamic_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4587 zend_compile_call_common(result, args_ast, fbc, ast->lineno); in zend_compile_call()
4592 static void zend_compile_method_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_method_call() argument
4594 zend_ast *obj_ast = ast->child[0]; in zend_compile_method_call()
4595 zend_ast *method_ast = ast->child[1]; in zend_compile_method_call()
4596 zend_ast *args_ast = ast->child[2]; in zend_compile_method_call()
4601 bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL; in zend_compile_method_call()
4684 static void zend_compile_static_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_static_call() argument
4686 zend_ast *class_ast = ast->child[0]; in zend_compile_static_call()
4687 zend_ast *method_ast = ast->child[1]; in zend_compile_static_call()
4688 zend_ast *args_ast = ast->child[2]; in zend_compile_static_call()
4756 static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel);
4758 static void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_new() argument
4760 zend_ast *class_ast = ast->child[0]; in zend_compile_new()
4761 zend_ast *args_ast = ast->child[1]; in zend_compile_new()
4784 zend_compile_call_common(&ctor_result, args_ast, NULL, ast->lineno); in zend_compile_new()
4789 static void zend_compile_clone(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_clone() argument
4791 zend_ast *obj_ast = ast->child[0]; in zend_compile_clone()
4800 static void zend_compile_global_var(zend_ast *ast) /* {{{ */ in zend_compile_global_var() argument
4802 zend_ast *var_ast = ast->child[0]; in zend_compile_global_var()
4860 static void zend_compile_static_var(zend_ast *ast) /* {{{ */ in zend_compile_static_var() argument
4862 zend_ast *var_ast = ast->child[0]; in zend_compile_static_var()
4863 zend_ast **value_ast_ptr = &ast->child[1]; in zend_compile_static_var()
4876 static void zend_compile_unset(zend_ast *ast) /* {{{ */ in zend_compile_unset() argument
4878 zend_ast *var_ast = ast->child[0]; in zend_compile_unset()
5015 static void zend_compile_return(zend_ast *ast) /* {{{ */ in zend_compile_return() argument
5017 zend_ast *expr_ast = ast->child[0]; in zend_compile_return()
5071 static void zend_compile_echo(zend_ast *ast) /* {{{ */ in zend_compile_echo() argument
5074 zend_ast *expr_ast = ast->child[0]; in zend_compile_echo()
5084 static void zend_compile_throw(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_throw() argument
5086 zend_ast *expr_ast = ast->child[0]; in zend_compile_throw()
5101 static void zend_compile_break_continue(zend_ast *ast) /* {{{ */ in zend_compile_break_continue() argument
5103 zend_ast *depth_ast = ast->child[0]; in zend_compile_break_continue()
5108 ZEND_ASSERT(ast->kind == ZEND_AST_BREAK || ast->kind == ZEND_AST_CONTINUE); in zend_compile_break_continue()
5114 "is no longer supported", ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5120 ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5130 ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5134 ast->kind == ZEND_AST_BREAK ? "break" : "continue", in zend_compile_break_continue()
5139 if (ast->kind == ZEND_AST_CONTINUE) { in zend_compile_break_continue()
5172 opline = zend_emit_op(NULL, ast->kind == ZEND_AST_BREAK ? ZEND_BRK : ZEND_CONT, NULL, NULL); in zend_compile_break_continue()
5239 static void zend_compile_goto(zend_ast *ast) /* {{{ */ in zend_compile_goto() argument
5241 zend_ast *label_ast = ast->child[0]; in zend_compile_goto()
5256 static void zend_compile_label(zend_ast *ast) /* {{{ */ in zend_compile_label() argument
5258 zend_string *label = zend_ast_get_str(ast->child[0]); in zend_compile_label()
5275 static void zend_compile_while(zend_ast *ast) /* {{{ */ in zend_compile_while() argument
5277 zend_ast *cond_ast = ast->child[0]; in zend_compile_while()
5278 zend_ast *stmt_ast = ast->child[1]; in zend_compile_while()
5299 static void zend_compile_do_while(zend_ast *ast) /* {{{ */ in zend_compile_do_while() argument
5301 zend_ast *stmt_ast = ast->child[0]; in zend_compile_do_while()
5302 zend_ast *cond_ast = ast->child[1]; in zend_compile_do_while()
5321 static void zend_compile_expr_list(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_expr_list() argument
5329 if (!ast) { in zend_compile_expr_list()
5333 list = zend_ast_get_list(ast); in zend_compile_expr_list()
5343 static void zend_compile_for(zend_ast *ast) /* {{{ */ in zend_compile_for() argument
5345 zend_ast *init_ast = ast->child[0]; in zend_compile_for()
5346 zend_ast *cond_ast = ast->child[1]; in zend_compile_for()
5347 zend_ast *loop_ast = ast->child[2]; in zend_compile_for()
5348 zend_ast *stmt_ast = ast->child[3]; in zend_compile_for()
5377 static void zend_compile_foreach(zend_ast *ast) /* {{{ */ in zend_compile_foreach() argument
5379 zend_ast *expr_ast = ast->child[0]; in zend_compile_foreach()
5380 zend_ast *value_ast = ast->child[1]; in zend_compile_foreach()
5381 zend_ast *key_ast = ast->child[2]; in zend_compile_foreach()
5382 zend_ast *stmt_ast = ast->child[3]; in zend_compile_foreach()
5454 CG(zend_lineno) = ast->lineno; in zend_compile_foreach()
5469 static void zend_compile_if(zend_ast *ast) /* {{{ */ in zend_compile_if() argument
5471 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_if()
5577 static void zend_compile_switch(zend_ast *ast) /* {{{ */ in zend_compile_switch() argument
5579 zend_ast *expr_ast = ast->child[0]; in zend_compile_switch()
5580 zend_ast_list *cases = zend_ast_get_list(ast->child[1]); in zend_compile_switch()
5755 static void zend_compile_match(znode *result, zend_ast *ast) in zend_compile_match() argument
5757 zend_ast *expr_ast = ast->child[0]; in zend_compile_match()
5758 zend_ast_list *arms = zend_ast_get_list(ast->child[1]); in zend_compile_match()
5941 static void zend_compile_try(zend_ast *ast) /* {{{ */ in zend_compile_try() argument
5943 zend_ast *try_ast = ast->child[0]; in zend_compile_try()
5944 zend_ast_list *catches = zend_ast_get_list(ast->child[1]); in zend_compile_try()
5945 zend_ast *finally_ast = ast->child[2]; in zend_compile_try()
6116 bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */ in zend_handle_encoding_declaration() argument
6118 zend_ast_list *declares = zend_ast_get_list(ast); in zend_handle_encoding_declaration()
6168 static zend_result zend_is_first_statement(zend_ast *ast, bool allow_nop) /* {{{ */ in zend_is_first_statement() argument
6171 zend_ast_list *file_ast = zend_ast_get_list(CG(ast)); in zend_is_first_statement()
6174 if (file_ast->child[i] == ast) { in zend_is_first_statement()
6189 static void zend_compile_declare(zend_ast *ast) /* {{{ */ in zend_compile_declare() argument
6191 zend_ast_list *declares = zend_ast_get_list(ast->child[0]); in zend_compile_declare()
6192 zend_ast *stmt_ast = ast->child[1]; in zend_compile_declare()
6213 if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { in zend_compile_declare()
6220 if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { in zend_compile_declare()
6225 if (ast->child[1] != NULL) { in zend_compile_declare()
6253 static void zend_compile_stmt_list(zend_ast *ast) /* {{{ */ in zend_compile_stmt_list() argument
6255 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_stmt_list()
6288 static zend_type zend_compile_single_typename(zend_ast *ast) in zend_compile_single_typename() argument
6290 ZEND_ASSERT(!(ast->attr & ZEND_TYPE_NULLABLE)); in zend_compile_single_typename()
6291 if (ast->kind == ZEND_AST_TYPE) { in zend_compile_single_typename()
6292 if (ast->attr == IS_STATIC && !CG(active_class_entry) && zend_is_scope_known()) { in zend_compile_single_typename()
6297 return (zend_type) ZEND_TYPE_INIT_CODE(ast->attr, 0, 0); in zend_compile_single_typename()
6299 zend_string *class_name = zend_ast_get_str(ast); in zend_compile_single_typename()
6303 if ((ast->attr & ZEND_NAME_NOT_FQ) != ZEND_NAME_NOT_FQ) { in zend_compile_single_typename()
6320 zend_string *orig_name = zend_ast_get_str(ast); in zend_compile_single_typename()
6321 uint32_t fetch_type = zend_get_class_fetch_type_ast(ast); in zend_compile_single_typename()
6323 class_name = zend_resolve_class_name_ast(ast); in zend_compile_single_typename()
6330 if (ast->attr == ZEND_NAME_NOT_FQ in zend_compile_single_typename()
6439 zend_ast *ast, bool force_allow_null) /* {{{ */ in zend_compile_typename() argument
6441 bool is_marked_nullable = ast->attr & ZEND_TYPE_NULLABLE; in zend_compile_typename()
6442 zend_ast_attr orig_ast_attr = ast->attr; in zend_compile_typename()
6446 ast->attr &= ~ZEND_TYPE_NULLABLE; in zend_compile_typename()
6449 if (ast->kind == ZEND_AST_TYPE_UNION) { in zend_compile_typename()
6450 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_typename()
6562 } else if (ast->kind == ZEND_AST_TYPE_INTERSECTION) { in zend_compile_typename()
6563 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_typename()
6629 type = zend_compile_single_typename(ast); in zend_compile_typename()
6655 ast->attr = orig_ast_attr; in zend_compile_typename()
6676 HashTable **attributes, zend_ast *ast, uint32_t offset, uint32_t target, uint32_t promoted in zend_compile_attributes() argument
6681 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_attributes()
6684 ZEND_ASSERT(ast->kind == ZEND_AST_ATTRIBUTE_LIST); in zend_compile_attributes()
6791 static void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast, uint32_t fallback_return_… in zend_compile_params() argument
6793 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_params()
7120 static void find_implicit_binds_recursively(closure_info *info, zend_ast *ast) { in find_implicit_binds_recursively() argument
7121 if (!ast) { in find_implicit_binds_recursively()
7125 if (ast->kind == ZEND_AST_VAR) { in find_implicit_binds_recursively()
7126 zend_ast *name_ast = ast->child[0]; in find_implicit_binds_recursively()
7144 } else if (zend_ast_is_list(ast)) { in find_implicit_binds_recursively()
7145 zend_ast_list *list = zend_ast_get_list(ast); in find_implicit_binds_recursively()
7150 } else if (ast->kind == ZEND_AST_CLOSURE) { in find_implicit_binds_recursively()
7152 zend_ast_decl *closure_ast = (zend_ast_decl *) ast; in find_implicit_binds_recursively()
7161 } else if (ast->kind == ZEND_AST_ARROW_FUNC) { in find_implicit_binds_recursively()
7163 zend_ast_decl *closure_ast = (zend_ast_decl *) ast; in find_implicit_binds_recursively()
7165 } else if (!zend_ast_is_special(ast)) { in find_implicit_binds_recursively()
7166 uint32_t i, children = zend_ast_get_num_children(ast); in find_implicit_binds_recursively()
7168 find_implicit_binds_recursively(info, ast->child[i]); in find_implicit_binds_recursively()
7216 static void zend_compile_closure_uses(zend_ast *ast) /* {{{ */ in zend_compile_closure_uses() argument
7219 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_closure_uses()
7404 static void zend_compile_func_decl(znode *result, zend_ast *ast, bool toplevel) /* {{{ */ in zend_compile_func_decl() argument
7406 zend_ast_decl *decl = (zend_ast_decl *) ast; in zend_compile_func_decl()
7498 if (ast->kind == ZEND_AST_ARROW_FUNC && decl->child[2]->kind != ZEND_AST_RETURN) { in zend_compile_func_decl()
7546 static void zend_compile_prop_decl(zend_ast *ast, zend_ast *type_ast, uint32_t flags, zend_ast *att… in zend_compile_prop_decl() argument
7548 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_prop_decl()
7659 static void zend_compile_prop_group(zend_ast *ast) /* {{{ */ in zend_compile_prop_group() argument
7661 zend_ast *type_ast = ast->child[0]; in zend_compile_prop_group()
7662 zend_ast *prop_ast = ast->child[1]; in zend_compile_prop_group()
7663 zend_ast *attr_ast = ast->child[2]; in zend_compile_prop_group()
7665 zend_compile_prop_decl(prop_ast, type_ast, ast->attr, attr_ast); in zend_compile_prop_group()
7683 static void zend_compile_class_const_decl(zend_ast *ast, uint32_t flags, zend_ast *attr_ast) /* {{{… in zend_compile_class_const_decl() argument
7685 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_class_const_decl()
7720 static void zend_compile_class_const_group(zend_ast *ast) /* {{{ */ in zend_compile_class_const_group() argument
7722 zend_ast *const_ast = ast->child[0]; in zend_compile_class_const_group()
7723 zend_ast *attr_ast = ast->child[1]; in zend_compile_class_const_group()
7725 zend_compile_class_const_decl(const_ast, ast->attr, attr_ast); in zend_compile_class_const_group()
7729 static void zend_compile_method_ref(zend_ast *ast, zend_trait_method_reference *method_ref) /* {{{ … in zend_compile_method_ref() argument
7731 zend_ast *class_ast = ast->child[0]; in zend_compile_method_ref()
7732 zend_ast *method_ast = ast->child[1]; in zend_compile_method_ref()
7744 static void zend_compile_trait_precedence(zend_ast *ast) /* {{{ */ in zend_compile_trait_precedence() argument
7746 zend_ast *method_ref_ast = ast->child[0]; in zend_compile_trait_precedence()
7747 zend_ast *insteadof_ast = ast->child[1]; in zend_compile_trait_precedence()
7765 static void zend_compile_trait_alias(zend_ast *ast) /* {{{ */ in zend_compile_trait_alias() argument
7767 zend_ast *method_ref_ast = ast->child[0]; in zend_compile_trait_alias()
7768 zend_ast *alias_ast = ast->child[1]; in zend_compile_trait_alias()
7769 uint32_t modifiers = ast->attr; in zend_compile_trait_alias()
7789 static void zend_compile_use_trait(zend_ast *ast) /* {{{ */ in zend_compile_use_trait() argument
7791 zend_ast_list *traits = zend_ast_get_list(ast->child[0]); in zend_compile_use_trait()
7792 zend_ast_list *adaptations = ast->child[1] ? zend_ast_get_list(ast->child[1]) : NULL; in zend_compile_use_trait()
7832 static void zend_compile_implements(zend_ast *ast) /* {{{ */ in zend_compile_implements() argument
7834 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_implements()
7893 static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel) /* {{{ */ in zend_compile_class_decl() argument
7895 zend_ast_decl *decl = (zend_ast_decl *) ast; in zend_compile_class_decl()
7994 CG(zend_lineno) = ast->lineno; in zend_compile_class_decl()
8083 static void zend_compile_enum_case(zend_ast *ast) in zend_compile_enum_case() argument
8090 zend_string *enum_case_name = zval_make_interned_string(zend_ast_get_zval(ast->child[0])); in zend_compile_enum_case()
8101 zend_ast *case_value_ast = ast->child[1]; in zend_compile_enum_case()
8103 ast->child[1] = NULL; in zend_compile_enum_case()
8120 zend_ast *doc_comment_ast = ast->child[2]; in zend_compile_enum_case()
8130 zend_ast *attr_ast = ast->child[3]; in zend_compile_enum_case()
8191 static void zend_compile_use(zend_ast *ast) /* {{{ */ in zend_compile_use() argument
8193 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_use()
8196 uint32_t type = ast->attr; in zend_compile_use()
8264 static void zend_compile_group_use(zend_ast *ast) /* {{{ */ in zend_compile_group_use() argument
8267 zend_string *ns = zend_ast_get_str(ast->child[0]); in zend_compile_group_use()
8268 zend_ast_list *list = zend_ast_get_list(ast->child[1]); in zend_compile_group_use()
8278 inline_use->attr = ast->attr ? ast->attr : use->attr; in zend_compile_group_use()
8284 static void zend_compile_const_decl(zend_ast *ast) /* {{{ */ in zend_compile_const_decl() argument
8286 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_const_decl()
8327 static void zend_compile_namespace(zend_ast *ast) /* {{{ */ in zend_compile_namespace() argument
8329 zend_ast *name_ast = ast->child[0]; in zend_compile_namespace()
8330 zend_ast *stmt_ast = ast->child[1]; in zend_compile_namespace()
8355 if (is_first_namespace && FAILURE == zend_is_first_statement(ast, /* allow_nop */ 1)) { in zend_compile_namespace()
8390 static void zend_compile_halt_compiler(zend_ast *ast) /* {{{ */ in zend_compile_halt_compiler() argument
8392 zend_ast *offset_ast = ast->child[0]; in zend_compile_halt_compiler()
8412 static bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */ in zend_try_ct_eval_magic_const() argument
8417 switch (ast->attr) { in zend_try_ct_eval_magic_const()
8419 ZVAL_LONG(zv, ast->lineno); in zend_try_ct_eval_magic_const()
8639 static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ in zend_try_ct_eval_array() argument
8641 zend_ast_list *list = zend_ast_get_list(ast); in zend_try_ct_eval_array()
8646 if (ast->attr == ZEND_ARRAY_SYNTAX_LIST) { in zend_try_ct_eval_array()
8767 static void zend_compile_binary_op(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_binary_op() argument
8769 zend_ast *left_ast = ast->child[0]; in zend_compile_binary_op()
8770 zend_ast *right_ast = ast->child[1]; in zend_compile_binary_op()
8771 uint32_t opcode = ast->attr; in zend_compile_binary_op()
8860 static void zend_compile_greater(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_greater() argument
8862 zend_ast *left_ast = ast->child[0]; in zend_compile_greater()
8863 zend_ast *right_ast = ast->child[1]; in zend_compile_greater()
8866 ZEND_ASSERT(ast->kind == ZEND_AST_GREATER || ast->kind == ZEND_AST_GREATER_EQUAL); in zend_compile_greater()
8873 zend_ct_eval_greater(&result->u.constant, ast->kind, in zend_compile_greater()
8881 ast->kind == ZEND_AST_GREATER ? ZEND_IS_SMALLER : ZEND_IS_SMALLER_OR_EQUAL, in zend_compile_greater()
8886 static void zend_compile_unary_op(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_unary_op() argument
8888 zend_ast *expr_ast = ast->child[0]; in zend_compile_unary_op()
8889 uint32_t opcode = ast->attr; in zend_compile_unary_op()
8905 static void zend_compile_unary_pm(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_unary_pm() argument
8907 zend_ast *expr_ast = ast->child[0]; in zend_compile_unary_pm()
8910 ZEND_ASSERT(ast->kind == ZEND_AST_UNARY_PLUS || ast->kind == ZEND_AST_UNARY_MINUS); in zend_compile_unary_pm()
8915 && zend_try_ct_eval_unary_pm(&result->u.constant, ast->kind, &expr_node.u.constant)) { in zend_compile_unary_pm()
8922 ZVAL_LONG(&right_node.u.constant, (ast->kind == ZEND_AST_UNARY_PLUS) ? 1 : -1); in zend_compile_unary_pm()
8927 static void zend_compile_short_circuiting(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_short_circuiting() argument
8929 zend_ast *left_ast = ast->child[0]; in zend_compile_short_circuiting()
8930 zend_ast *right_ast = ast->child[1]; in zend_compile_short_circuiting()
8936 ZEND_ASSERT(ast->kind == ZEND_AST_AND || ast->kind == ZEND_AST_OR); in zend_compile_short_circuiting()
8941 if ((ast->kind == ZEND_AST_AND && !zend_is_true(&left_node.u.constant)) in zend_compile_short_circuiting()
8942 || (ast->kind == ZEND_AST_OR && zend_is_true(&left_node.u.constant))) { in zend_compile_short_circuiting()
8963 opline_jmpz = zend_emit_op(NULL, ast->kind == ZEND_AST_AND ? ZEND_JMPZ_EX : ZEND_JMPNZ_EX, in zend_compile_short_circuiting()
8982 static void zend_compile_post_incdec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_post_incdec() argument
8984 zend_ast *var_ast = ast->child[0]; in zend_compile_post_incdec()
8985 ZEND_ASSERT(ast->kind == ZEND_AST_POST_INC || ast->kind == ZEND_AST_POST_DEC); in zend_compile_post_incdec()
8991 opline->opcode = ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC_OBJ : ZEND_POST_DEC_OBJ; in zend_compile_post_incdec()
8995 …opline->opcode = ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC_STATIC_PROP : ZEND_POST_DEC_STATIC… in zend_compile_post_incdec()
9003 zend_emit_op_tmp(result, ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC : ZEND_POST_DEC, in zend_compile_post_incdec()
9009 static void zend_compile_pre_incdec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_pre_incdec() argument
9011 zend_ast *var_ast = ast->child[0]; in zend_compile_pre_incdec()
9012 ZEND_ASSERT(ast->kind == ZEND_AST_PRE_INC || ast->kind == ZEND_AST_PRE_DEC); in zend_compile_pre_incdec()
9018 opline->opcode = ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC_OBJ : ZEND_PRE_DEC_OBJ; in zend_compile_pre_incdec()
9023 …opline->opcode = ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC_STATIC_PROP : ZEND_PRE_DEC_STATIC_PR… in zend_compile_pre_incdec()
9032 zend_emit_op_tmp(result, ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC : ZEND_PRE_DEC, in zend_compile_pre_incdec()
9038 static void zend_compile_cast(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_cast() argument
9040 zend_ast *expr_ast = ast->child[0]; in zend_compile_cast()
9046 if (ast->attr == _IS_BOOL) { in zend_compile_cast()
9048 } else if (ast->attr == IS_NULL) { in zend_compile_cast()
9052 opline->extended_value = ast->attr; in zend_compile_cast()
9057 static void zend_compile_shorthand_conditional(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_shorthand_conditional() argument
9059 zend_ast *cond_ast = ast->child[0]; in zend_compile_shorthand_conditional()
9060 zend_ast *false_ast = ast->child[2]; in zend_compile_shorthand_conditional()
9066 ZEND_ASSERT(ast->child[1] == NULL); in zend_compile_shorthand_conditional()
9082 static void zend_compile_conditional(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_conditional() argument
9084 zend_ast *cond_ast = ast->child[0]; in zend_compile_conditional()
9085 zend_ast *true_ast = ast->child[1]; in zend_compile_conditional()
9086 zend_ast *false_ast = ast->child[2]; in zend_compile_conditional()
9117 zend_compile_shorthand_conditional(result, ast); in zend_compile_conditional()
9142 static void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_coalesce() argument
9144 zend_ast *expr_ast = ast->child[0]; in zend_compile_coalesce()
9145 zend_ast *default_ast = ast->child[1]; in zend_compile_coalesce()
9174 static void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign_coalesce() argument
9176 zend_ast *var_ast = ast->child[0]; in zend_compile_assign_coalesce()
9177 zend_ast *default_ast = ast->child[1]; in zend_compile_assign_coalesce()
9277 static void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_print() argument
9280 zend_ast *expr_ast = ast->child[0]; in zend_compile_print()
9293 static void zend_compile_exit(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_exit() argument
9295 zend_ast *expr_ast = ast->child[0]; in zend_compile_exit()
9314 static void zend_compile_yield(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_yield() argument
9316 zend_ast *value_ast = ast->child[0]; in zend_compile_yield()
9317 zend_ast *key_ast = ast->child[1]; in zend_compile_yield()
9349 static void zend_compile_yield_from(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_yield_from() argument
9351 zend_ast *expr_ast = ast->child[0]; in zend_compile_yield_from()
9366 static void zend_compile_instanceof(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_instanceof() argument
9368 zend_ast *obj_ast = ast->child[0]; in zend_compile_instanceof()
9369 zend_ast *class_ast = ast->child[1]; in zend_compile_instanceof()
9398 static void zend_compile_include_or_eval(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_include_or_eval() argument
9400 zend_ast *expr_ast = ast->child[0]; in zend_compile_include_or_eval()
9408 opline->extended_value = ast->attr; in zend_compile_include_or_eval()
9414 static void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_isset_or_empty() argument
9416 zend_ast *var_ast = ast->child[0]; in zend_compile_isset_or_empty()
9421 ZEND_ASSERT(ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY); in zend_compile_isset_or_empty()
9424 if (ast->kind == ZEND_AST_EMPTY) { in zend_compile_isset_or_empty()
9438 ZVAL_BOOL(&result->u.constant, ast->kind == ZEND_AST_ISSET); in zend_compile_isset_or_empty()
9454 ZEND_FETCH_GLOBAL | (ast->kind == ZEND_AST_EMPTY ? ZEND_ISEMPTY : 0); in zend_compile_isset_or_empty()
9488 if (!(ast->kind == ZEND_AST_ISSET)) { in zend_compile_isset_or_empty()
9494 static void zend_compile_silence(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_silence() argument
9496 zend_ast *expr_ast = ast->child[0]; in zend_compile_silence()
9513 static void zend_compile_shell_exec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_shell_exec() argument
9515 zend_ast *expr_ast = ast->child[0]; in zend_compile_shell_exec()
9531 static void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_array() argument
9533 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_array()
9538 if (zend_try_ct_eval_array(&result->u.constant, ast)) { in zend_compile_array()
9610 static void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_const() argument
9612 zend_ast *name_ast = ast->child[0]; in zend_compile_const()
9621 zend_ast *last = CG(ast); in zend_compile_const()
9660 static void zend_compile_class_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_class_const() argument
9667 zend_eval_const_expr(&ast->child[0]); in zend_compile_class_const()
9668 zend_eval_const_expr(&ast->child[1]); in zend_compile_class_const()
9670 class_ast = ast->child[0]; in zend_compile_class_const()
9671 const_ast = ast->child[1]; in zend_compile_class_const()
9697 static void zend_compile_class_name(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_class_name() argument
9699 zend_ast *class_ast = ast->child[0]; in zend_compile_class_name()
9760 static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_encaps_list() argument
9766 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_encaps_list()
9885 static void zend_compile_magic_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_magic_const() argument
9889 if (zend_try_ct_eval_magic_const(&result->u.constant, ast)) { in zend_compile_magic_const()
9894 ZEND_ASSERT(ast->attr == T_CLASS_C && in zend_compile_magic_const()
9925 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_class_const() local
9926 zend_ast *class_ast = ast->child[0]; in zend_compile_const_expr_class_const()
9954 ast->attr |= ZEND_FETCH_CLASS_EXCEPTION; in zend_compile_const_expr_class_const()
9960 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_class_name() local
9961 zend_ast *class_ast = ast->child[0]; in zend_compile_const_expr_class_name()
9975 ast->child[0] = NULL; in zend_compile_const_expr_class_name()
9976 ast->attr = fetch_type; in zend_compile_const_expr_class_name()
9988 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_const() local
9989 zend_ast *name_ast = ast->child[0]; in zend_compile_const_expr_const()
10000 zend_ast_destroy(ast); in zend_compile_const_expr_const()
10005 zend_ast_destroy(ast); in zend_compile_const_expr_const()
10013 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_magic_const() local
10016 ZEND_ASSERT(ast->attr == T_CLASS_C); in zend_compile_const_expr_magic_const()
10018 zend_ast_destroy(ast); in zend_compile_const_expr_magic_const()
10078 zend_ast *ast = *ast_ptr; in zend_compile_const_expr() local
10079 if (ast == NULL || ast->kind == ZEND_AST_ZVAL) { in zend_compile_const_expr()
10083 if (!zend_is_allowed_in_const_expr(ast->kind)) { in zend_compile_const_expr()
10087 switch (ast->kind) { in zend_compile_const_expr()
10112 zend_ast_apply(ast, zend_compile_const_expr, context); in zend_compile_const_expr()
10135 void zend_compile_top_stmt(zend_ast *ast) /* {{{ */ in zend_compile_top_stmt() argument
10137 if (!ast) { in zend_compile_top_stmt()
10141 if (ast->kind == ZEND_AST_STMT_LIST) { in zend_compile_top_stmt()
10142 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_top_stmt()
10150 if (ast->kind == ZEND_AST_FUNC_DECL) { in zend_compile_top_stmt()
10151 CG(zend_lineno) = ast->lineno; in zend_compile_top_stmt()
10152 zend_compile_func_decl(NULL, ast, 1); in zend_compile_top_stmt()
10153 CG(zend_lineno) = ((zend_ast_decl *) ast)->end_lineno; in zend_compile_top_stmt()
10154 } else if (ast->kind == ZEND_AST_CLASS) { in zend_compile_top_stmt()
10155 CG(zend_lineno) = ast->lineno; in zend_compile_top_stmt()
10156 zend_compile_class_decl(NULL, ast, 1); in zend_compile_top_stmt()
10157 CG(zend_lineno) = ((zend_ast_decl *) ast)->end_lineno; in zend_compile_top_stmt()
10159 zend_compile_stmt(ast); in zend_compile_top_stmt()
10161 if (ast->kind != ZEND_AST_NAMESPACE && ast->kind != ZEND_AST_HALT_COMPILER) { in zend_compile_top_stmt()
10167 static void zend_compile_stmt(zend_ast *ast) /* {{{ */ in zend_compile_stmt() argument
10169 if (!ast) { in zend_compile_stmt()
10173 CG(zend_lineno) = ast->lineno; in zend_compile_stmt()
10175 if ((CG(compiler_options) & ZEND_COMPILE_EXTENDED_STMT) && !zend_is_unticked_stmt(ast)) { in zend_compile_stmt()
10179 switch (ast->kind) { in zend_compile_stmt()
10181 zend_compile_stmt_list(ast); in zend_compile_stmt()
10184 zend_compile_global_var(ast); in zend_compile_stmt()
10187 zend_compile_static_var(ast); in zend_compile_stmt()
10190 zend_compile_unset(ast); in zend_compile_stmt()
10193 zend_compile_return(ast); in zend_compile_stmt()
10196 zend_compile_echo(ast); in zend_compile_stmt()
10200 zend_compile_break_continue(ast); in zend_compile_stmt()
10203 zend_compile_goto(ast); in zend_compile_stmt()
10206 zend_compile_label(ast); in zend_compile_stmt()
10209 zend_compile_while(ast); in zend_compile_stmt()
10212 zend_compile_do_while(ast); in zend_compile_stmt()
10215 zend_compile_for(ast); in zend_compile_stmt()
10218 zend_compile_foreach(ast); in zend_compile_stmt()
10221 zend_compile_if(ast); in zend_compile_stmt()
10224 zend_compile_switch(ast); in zend_compile_stmt()
10227 zend_compile_try(ast); in zend_compile_stmt()
10230 zend_compile_declare(ast); in zend_compile_stmt()
10234 zend_compile_func_decl(NULL, ast, 0); in zend_compile_stmt()
10237 zend_compile_enum_case(ast); in zend_compile_stmt()
10240 zend_compile_prop_group(ast); in zend_compile_stmt()
10243 zend_compile_class_const_group(ast); in zend_compile_stmt()
10246 zend_compile_use_trait(ast); in zend_compile_stmt()
10249 zend_compile_class_decl(NULL, ast, 0); in zend_compile_stmt()
10252 zend_compile_group_use(ast); in zend_compile_stmt()
10255 zend_compile_use(ast); in zend_compile_stmt()
10258 zend_compile_const_decl(ast); in zend_compile_stmt()
10261 zend_compile_namespace(ast); in zend_compile_stmt()
10264 zend_compile_halt_compiler(ast); in zend_compile_stmt()
10268 zend_compile_expr(NULL, ast); in zend_compile_stmt()
10273 zend_compile_expr(&result, ast); in zend_compile_stmt()
10278 if (FC(declarables).ticks && !zend_is_unticked_stmt(ast)) { in zend_compile_stmt()
10284 static void zend_compile_expr_inner(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_expr_inner() argument
10287 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_expr_inner()
10290 zend_compile_memoized_expr(result, ast); in zend_compile_expr_inner()
10294 switch (ast->kind) { in zend_compile_expr_inner()
10296 ZVAL_COPY(&result->u.constant, zend_ast_get_zval(ast)); in zend_compile_expr_inner()
10300 *result = *zend_ast_get_znode(ast); in zend_compile_expr_inner()
10311 zend_compile_var(result, ast, BP_VAR_R, 0); in zend_compile_expr_inner()
10314 zend_compile_assign(result, ast); in zend_compile_expr_inner()
10317 zend_compile_assign_ref(result, ast); in zend_compile_expr_inner()
10320 zend_compile_new(result, ast); in zend_compile_expr_inner()
10323 zend_compile_clone(result, ast); in zend_compile_expr_inner()
10326 zend_compile_compound_assign(result, ast); in zend_compile_expr_inner()
10329 zend_compile_binary_op(result, ast); in zend_compile_expr_inner()
10333 zend_compile_greater(result, ast); in zend_compile_expr_inner()
10336 zend_compile_unary_op(result, ast); in zend_compile_expr_inner()
10340 zend_compile_unary_pm(result, ast); in zend_compile_expr_inner()
10344 zend_compile_short_circuiting(result, ast); in zend_compile_expr_inner()
10348 zend_compile_post_incdec(result, ast); in zend_compile_expr_inner()
10352 zend_compile_pre_incdec(result, ast); in zend_compile_expr_inner()
10355 zend_compile_cast(result, ast); in zend_compile_expr_inner()
10358 zend_compile_conditional(result, ast); in zend_compile_expr_inner()
10361 zend_compile_coalesce(result, ast); in zend_compile_expr_inner()
10364 zend_compile_assign_coalesce(result, ast); in zend_compile_expr_inner()
10367 zend_compile_print(result, ast); in zend_compile_expr_inner()
10370 zend_compile_exit(result, ast); in zend_compile_expr_inner()
10373 zend_compile_yield(result, ast); in zend_compile_expr_inner()
10376 zend_compile_yield_from(result, ast); in zend_compile_expr_inner()
10379 zend_compile_instanceof(result, ast); in zend_compile_expr_inner()
10382 zend_compile_include_or_eval(result, ast); in zend_compile_expr_inner()
10386 zend_compile_isset_or_empty(result, ast); in zend_compile_expr_inner()
10389 zend_compile_silence(result, ast); in zend_compile_expr_inner()
10392 zend_compile_shell_exec(result, ast); in zend_compile_expr_inner()
10395 zend_compile_array(result, ast); in zend_compile_expr_inner()
10398 zend_compile_const(result, ast); in zend_compile_expr_inner()
10401 zend_compile_class_const(result, ast); in zend_compile_expr_inner()
10404 zend_compile_class_name(result, ast); in zend_compile_expr_inner()
10407 zend_compile_encaps_list(result, ast); in zend_compile_expr_inner()
10410 zend_compile_magic_const(result, ast); in zend_compile_expr_inner()
10414 zend_compile_func_decl(result, ast, 0); in zend_compile_expr_inner()
10417 zend_compile_throw(result, ast); in zend_compile_expr_inner()
10420 zend_compile_match(result, ast); in zend_compile_expr_inner()
10428 static void zend_compile_expr(znode *result, zend_ast *ast) in zend_compile_expr() argument
10431 zend_compile_expr_inner(result, ast); in zend_compile_expr()
10432 zend_short_circuiting_commit(checkpoint, result, ast); in zend_compile_expr()
10435 static zend_op *zend_compile_var_inner(znode *result, zend_ast *ast, uint32_t type, bool by_ref) in zend_compile_var_inner() argument
10437 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_var_inner()
10439 switch (ast->kind) { in zend_compile_var_inner()
10441 return zend_compile_simple_var(result, ast, type, 0); in zend_compile_var_inner()
10443 return zend_compile_dim(result, ast, type, by_ref); in zend_compile_var_inner()
10446 return zend_compile_prop(result, ast, type, by_ref); in zend_compile_var_inner()
10448 return zend_compile_static_prop(result, ast, type, by_ref, 0); in zend_compile_var_inner()
10450 zend_compile_call(result, ast, type); in zend_compile_var_inner()
10454 zend_compile_method_call(result, ast, type); in zend_compile_var_inner()
10457 zend_compile_static_call(result, ast, type); in zend_compile_var_inner()
10460 *result = *zend_ast_get_znode(ast); in zend_compile_var_inner()
10468 zend_compile_expr(result, ast); in zend_compile_var_inner()
10473 static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */ in zend_compile_var() argument
10476 zend_op *opcode = zend_compile_var_inner(result, ast, type, by_ref); in zend_compile_var()
10477 zend_short_circuiting_commit(checkpoint, result, ast); in zend_compile_var()
10481 static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) … in zend_delayed_compile_var() argument
10483 switch (ast->kind) { in zend_delayed_compile_var()
10485 return zend_compile_simple_var(result, ast, type, 1); in zend_delayed_compile_var()
10487 return zend_delayed_compile_dim(result, ast, type, by_ref); in zend_delayed_compile_var()
10491 zend_op *opline = zend_delayed_compile_prop(result, ast, type); in zend_delayed_compile_var()
10498 return zend_compile_static_prop(result, ast, type, by_ref, 1); in zend_delayed_compile_var()
10500 return zend_compile_var(result, ast, type, 0); in zend_delayed_compile_var()
10507 zend_ast *ast = *ast_ptr; in zend_eval_const_expr() local
10510 if (!ast) { in zend_eval_const_expr()
10514 switch (ast->kind) { in zend_eval_const_expr()
10516 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10517 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10518 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10522 if (!zend_try_ct_eval_binary_op(&result, ast->attr, in zend_eval_const_expr()
10523 zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])) in zend_eval_const_expr()
10530 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10531 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10532 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10536 zend_ct_eval_greater(&result, ast->kind, in zend_eval_const_expr()
10537 zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])); in zend_eval_const_expr()
10543 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10544 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10545 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10549 child0_is_true = zend_is_true(zend_ast_get_zval(ast->child[0])); in zend_eval_const_expr()
10550 if (child0_is_true == (ast->kind == ZEND_AST_OR)) { in zend_eval_const_expr()
10551 ZVAL_BOOL(&result, ast->kind == ZEND_AST_OR); in zend_eval_const_expr()
10555 if (ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10559 child1_is_true = zend_is_true(zend_ast_get_zval(ast->child[1])); in zend_eval_const_expr()
10560 if (ast->kind == ZEND_AST_OR) { in zend_eval_const_expr()
10568 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10569 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10573 if (!zend_try_ct_eval_unary_op(&result, ast->attr, zend_ast_get_zval(ast->child[0]))) { in zend_eval_const_expr()
10579 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10580 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10584 if (!zend_try_ct_eval_unary_pm(&result, ast->kind, zend_ast_get_zval(ast->child[0]))) { in zend_eval_const_expr()
10590 if (ast->child[0]->kind == ZEND_AST_DIM) { in zend_eval_const_expr()
10591 ast->child[0]->attr |= ZEND_DIM_IS; in zend_eval_const_expr()
10593 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10595 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10597 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10601 if (Z_TYPE_P(zend_ast_get_zval(ast->child[0])) == IS_NULL) { in zend_eval_const_expr()
10602 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10603 *ast_ptr = ast->child[1]; in zend_eval_const_expr()
10604 ast->child[1] = NULL; in zend_eval_const_expr()
10605 zend_ast_destroy(ast); in zend_eval_const_expr()
10607 *ast_ptr = ast->child[0]; in zend_eval_const_expr()
10608 ast->child[0] = NULL; in zend_eval_const_expr()
10609 zend_ast_destroy(ast); in zend_eval_const_expr()
10615 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10616 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10618 if (ast->child[1]) { in zend_eval_const_expr()
10619 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10621 zend_eval_const_expr(&ast->child[2]); in zend_eval_const_expr()
10625 child = &ast->child[2 - zend_is_true(zend_ast_get_zval(ast->child[0]))]; in zend_eval_const_expr()
10631 zend_ast_destroy(ast); in zend_eval_const_expr()
10641 if (ast->child[1] == NULL) { in zend_eval_const_expr()
10645 if (ast->attr & ZEND_DIM_ALTERNATIVE_SYNTAX) { in zend_eval_const_expr()
10646 ast->attr &= ~ZEND_DIM_ALTERNATIVE_SYNTAX; /* remove flag to avoid duplicate warning */ in zend_eval_const_expr()
10651 if ((ast->attr & ZEND_DIM_IS) && ast->child[0]->kind == ZEND_AST_DIM) { in zend_eval_const_expr()
10652 ast->child[0]->attr |= ZEND_DIM_IS; in zend_eval_const_expr()
10655 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10656 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10657 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10661 container = zend_ast_get_zval(ast->child[0]); in zend_eval_const_expr()
10662 dim = zend_ast_get_zval(ast->child[1]); in zend_eval_const_expr()
10704 if (!zend_try_ct_eval_array(&result, ast)) { in zend_eval_const_expr()
10709 if (!zend_try_ct_eval_magic_const(&result, ast)) { in zend_eval_const_expr()
10715 zend_ast *name_ast = ast->child[0]; in zend_eval_const_expr()
10734 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10735 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10737 class_ast = ast->child[0]; in zend_eval_const_expr()
10738 name_ast = ast->child[1]; in zend_eval_const_expr()
10755 zend_ast *class_ast = ast->child[0]; in zend_eval_const_expr()
10767 zend_ast_list *list = zend_ast_get_list(ast); in zend_eval_const_expr()
10774 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10775 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10778 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10781 zend_eval_const_expr(&ast->child[2]); in zend_eval_const_expr()
10785 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10786 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10792 zend_ast_destroy(ast); in zend_eval_const_expr()