Lines Matching refs:ast

94 static bool zend_try_ct_eval_array(zval *result, zend_ast *ast);
97 static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref);
98 static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref);
99 static void zend_compile_expr(znode *result, zend_ast *ast);
100 static void zend_compile_stmt(zend_ast *ast);
101 static void zend_compile_assign(znode *result, zend_ast *ast);
1150 zend_string *zend_resolve_class_name_ast(zend_ast *ast) /* {{{ */ in zend_resolve_class_name_ast() argument
1152 zval *class_name = zend_ast_get_zval(ast); in zend_resolve_class_name_ast()
1156 return zend_resolve_class_name(Z_STR_P(class_name), ast->attr); in zend_resolve_class_name_ast()
1171 static bool zend_is_call(zend_ast *ast);
1702 static zend_string *zend_resolve_const_class_name_reference(zend_ast *ast, const char *type) in zend_resolve_const_class_name_reference() argument
1704 zend_string *class_name = zend_ast_get_str(ast); in zend_resolve_const_class_name_reference()
1705 if (ZEND_FETCH_CLASS_DEFAULT != zend_get_class_fetch_type_ast(ast)) { in zend_resolve_const_class_name_reference()
1710 return zend_resolve_class_name(class_name, ast->attr); in zend_resolve_const_class_name_reference()
2081 zend_ast *zend_negate_num_string(zend_ast *ast) /* {{{ */ in zend_negate_num_string() argument
2083 zval *zv = zend_ast_get_zval(ast); in zend_negate_num_string()
2099 return ast; in zend_negate_num_string()
2442 static bool zend_ast_is_short_circuited(const zend_ast *ast) in zend_ast_is_short_circuited() argument
2444 switch (ast->kind) { in zend_ast_is_short_circuited()
2450 return zend_ast_is_short_circuited(ast->child[0]); in zend_ast_is_short_circuited()
2465 static void zend_short_circuiting_mark_inner(zend_ast *ast) { in zend_short_circuiting_mark_inner() argument
2466 if (zend_ast_kind_is_short_circuited(ast->kind)) { in zend_short_circuiting_mark_inner()
2467 ast->attr |= ZEND_SHORT_CIRCUITING_INNER; in zend_short_circuiting_mark_inner()
2476 static void zend_short_circuiting_commit(uint32_t checkpoint, znode *result, zend_ast *ast) in zend_short_circuiting_commit() argument
2478 bool is_short_circuited = zend_ast_kind_is_short_circuited(ast->kind) in zend_short_circuiting_commit()
2479 || ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY; in zend_short_circuiting_commit()
2486 if (ast->attr & ZEND_SHORT_CIRCUITING_INNER) { in zend_short_circuiting_commit()
2497 ast->kind == ZEND_AST_ISSET ? ZEND_SHORT_CIRCUITING_CHAIN_ISSET : in zend_short_circuiting_commit()
2498 ast->kind == ZEND_AST_EMPTY ? ZEND_SHORT_CIRCUITING_CHAIN_EMPTY : in zend_short_circuiting_commit()
2677 static inline bool zend_is_variable(zend_ast *ast) /* {{{ */ in zend_is_variable() argument
2679 return ast->kind == ZEND_AST_VAR in zend_is_variable()
2680 || ast->kind == ZEND_AST_DIM in zend_is_variable()
2681 || ast->kind == ZEND_AST_PROP in zend_is_variable()
2682 || ast->kind == ZEND_AST_NULLSAFE_PROP in zend_is_variable()
2683 || ast->kind == ZEND_AST_STATIC_PROP; in zend_is_variable()
2687 static inline bool zend_is_call(zend_ast *ast) /* {{{ */ in zend_is_call() argument
2689 return ast->kind == ZEND_AST_CALL in zend_is_call()
2690 || ast->kind == ZEND_AST_METHOD_CALL in zend_is_call()
2691 || ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL in zend_is_call()
2692 || ast->kind == ZEND_AST_STATIC_CALL; in zend_is_call()
2696 static inline bool zend_is_variable_or_call(zend_ast *ast) /* {{{ */ in zend_is_variable_or_call() argument
2698 return zend_is_variable(ast) || zend_is_call(ast); in zend_is_variable_or_call()
2702 static inline bool zend_is_unticked_stmt(zend_ast *ast) /* {{{ */ in zend_is_unticked_stmt() argument
2704 return ast->kind == ZEND_AST_STMT_LIST || ast->kind == ZEND_AST_LABEL in zend_is_unticked_stmt()
2705 || ast->kind == ZEND_AST_PROP_DECL || ast->kind == ZEND_AST_CLASS_CONST_GROUP in zend_is_unticked_stmt()
2706 || ast->kind == ZEND_AST_USE_TRAIT || ast->kind == ZEND_AST_METHOD; in zend_is_unticked_stmt()
2710 static inline bool zend_can_write_to_variable(zend_ast *ast) /* {{{ */ in zend_can_write_to_variable() argument
2713 ast->kind == ZEND_AST_DIM in zend_can_write_to_variable()
2714 || ast->kind == ZEND_AST_PROP in zend_can_write_to_variable()
2716 ast = ast->child[0]; in zend_can_write_to_variable()
2719 return zend_is_variable_or_call(ast) && !zend_ast_is_short_circuited(ast); in zend_can_write_to_variable()
2832 static zend_result zend_try_compile_cv(znode *result, zend_ast *ast) /* {{{ */ in zend_try_compile_cv() argument
2834 zend_ast *name_ast = ast->child[0]; in zend_try_compile_cv()
2863 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
2865 zend_ast *name_ast = ast->child[0]; in zend_compile_simple_var_no_cv()
2893 static bool is_this_fetch(zend_ast *ast) /* {{{ */ in is_this_fetch() argument
2895 if (ast->kind == ZEND_AST_VAR && ast->child[0]->kind == ZEND_AST_ZVAL) { in is_this_fetch()
2896 zval *name = zend_ast_get_zval(ast->child[0]); in is_this_fetch()
2904 static bool is_globals_fetch(const zend_ast *ast) in is_globals_fetch() argument
2906 if (ast->kind == ZEND_AST_VAR && ast->child[0]->kind == ZEND_AST_ZVAL) { in is_globals_fetch()
2907 zval *name = zend_ast_get_zval(ast->child[0]); in is_globals_fetch()
2914 static bool is_global_var_fetch(zend_ast *ast) in is_global_var_fetch() argument
2916 return ast->kind == ZEND_AST_DIM && is_globals_fetch(ast->child[0]); in is_global_var_fetch()
2929 static zend_op *zend_compile_simple_var(znode *result, zend_ast *ast, uint32_t type, bool delayed) … in zend_compile_simple_var() argument
2931 if (is_this_fetch(ast)) { in zend_compile_simple_var()
2939 } else if (is_globals_fetch(ast)) { in zend_compile_simple_var()
2946 } else if (zend_try_compile_cv(result, ast) == FAILURE) { in zend_compile_simple_var()
2947 return zend_compile_simple_var_no_cv(result, ast, type, delayed); in zend_compile_simple_var()
2953 static void zend_separate_if_call_and_write(znode *node, zend_ast *ast, uint32_t type) /* {{{ */ in zend_separate_if_call_and_write() argument
2959 && zend_is_call(ast)) { in zend_separate_if_call_and_write()
2981 static zend_op *zend_delayed_compile_dim(znode *result, zend_ast *ast, uint32_t type, bool by_ref) in zend_delayed_compile_dim() argument
2983 if (ast->attr == ZEND_DIM_ALTERNATIVE_SYNTAX) { in zend_delayed_compile_dim()
2986 zend_ast *var_ast = ast->child[0]; in zend_delayed_compile_dim()
2987 zend_ast *dim_ast = ast->child[1]; in zend_delayed_compile_dim()
3047 static zend_op *zend_compile_dim(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */ in zend_compile_dim() argument
3050 zend_delayed_compile_dim(result, ast, type, by_ref); in zend_compile_dim()
3055 static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_delayed_compile_prop() argument
3057 zend_ast *obj_ast = ast->child[0]; in zend_delayed_compile_prop()
3058 zend_ast *prop_ast = ast->child[1]; in zend_delayed_compile_prop()
3062 bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_PROP; in zend_delayed_compile_prop()
3129 static zend_op *zend_compile_prop(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ … in zend_compile_prop() argument
3132 zend_op *opline = zend_delayed_compile_prop(result, ast, type); in zend_compile_prop()
3140 static zend_op *zend_compile_static_prop(znode *result, zend_ast *ast, uint32_t type, bool by_ref, … in zend_compile_static_prop() argument
3142 zend_ast *class_ast = ast->child[0]; in zend_compile_static_prop()
3143 zend_ast *prop_ast = ast->child[1]; in zend_compile_static_prop()
3199 static bool zend_propagate_list_refs(zend_ast *ast) { /* {{{ */ in zend_propagate_list_refs() argument
3200 zend_ast_list *list = zend_ast_get_list(ast); in zend_propagate_list_refs()
3232 znode *result, zend_ast *ast, znode *expr_node, zend_ast_attr array_style) /* {{{ */ in zend_compile_list_assign() argument
3234 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_list_assign()
3321 static void zend_ensure_writable_variable(const zend_ast *ast) /* {{{ */ in zend_ensure_writable_variable() argument
3323 if (ast->kind == ZEND_AST_CALL) { in zend_ensure_writable_variable()
3327 ast->kind == ZEND_AST_METHOD_CALL in zend_ensure_writable_variable()
3328 || ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL in zend_ensure_writable_variable()
3329 || ast->kind == ZEND_AST_STATIC_CALL in zend_ensure_writable_variable()
3333 if (zend_ast_is_short_circuited(ast)) { in zend_ensure_writable_variable()
3336 if (is_globals_fetch(ast)) { in zend_ensure_writable_variable()
3385 static void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign() argument
3387 zend_ast *var_ast = ast->child[0]; in zend_compile_assign()
3388 zend_ast *expr_ast = ast->child[1]; in zend_compile_assign()
3483 static void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign_ref() argument
3485 zend_ast *target_ast = ast->child[0]; in zend_compile_assign_ref()
3486 zend_ast *source_ast = ast->child[1]; in zend_compile_assign_ref()
3557 static void zend_compile_compound_assign(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_compound_assign() argument
3559 zend_ast *var_ast = ast->child[0]; in zend_compile_compound_assign()
3560 zend_ast *expr_ast = ast->child[1]; in zend_compile_compound_assign()
3561 uint32_t opcode = ast->attr; in zend_compile_compound_assign()
3653 zend_ast *ast, zend_function *fbc, bool *may_have_extra_named_args) /* {{{ */ in zend_compile_args() argument
3655 zend_ast_list *args = zend_ast_get_list(ast); in zend_compile_args()
3775 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_args()
4795 static void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_call() argument
4797 zend_ast *name_ast = ast->child[0]; in zend_compile_call()
4798 zend_ast *args_ast = ast->child[1]; in zend_compile_call()
4805 zend_compile_dynamic_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4814 …zend_compile_assert(result, zend_ast_get_list(args_ast), Z_STR(name_node.u.constant), NULL, ast->l… in zend_compile_call()
4816 zend_compile_ns_call(result, &name_node, args_ast, ast->lineno, type); in zend_compile_call()
4834 zend_compile_assert(result, zend_ast_get_list(args_ast), lcname, fbc, ast->lineno); in zend_compile_call()
4844 zend_compile_dynamic_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4869 zend_compile_call_common(result, args_ast, fbc, ast->lineno); in zend_compile_call()
4874 static void zend_compile_method_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_method_call() argument
4876 zend_ast *obj_ast = ast->child[0]; in zend_compile_method_call()
4877 zend_ast *method_ast = ast->child[1]; in zend_compile_method_call()
4878 zend_ast *args_ast = ast->child[2]; in zend_compile_method_call()
4883 bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL; in zend_compile_method_call()
4966 static void zend_compile_static_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_static_call() argument
4968 zend_ast *class_ast = ast->child[0]; in zend_compile_static_call()
4969 zend_ast *method_ast = ast->child[1]; in zend_compile_static_call()
4970 zend_ast *args_ast = ast->child[2]; in zend_compile_static_call()
5038 static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel);
5040 static void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_new() argument
5042 zend_ast *class_ast = ast->child[0]; in zend_compile_new()
5043 zend_ast *args_ast = ast->child[1]; in zend_compile_new()
5066 zend_compile_call_common(&ctor_result, args_ast, NULL, ast->lineno); in zend_compile_new()
5071 static void zend_compile_clone(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_clone() argument
5073 zend_ast *obj_ast = ast->child[0]; in zend_compile_clone()
5082 static void zend_compile_global_var(zend_ast *ast) /* {{{ */ in zend_compile_global_var() argument
5084 zend_ast *var_ast = ast->child[0]; in zend_compile_global_var()
5142 static void zend_compile_static_var(zend_ast *ast) /* {{{ */ in zend_compile_static_var() argument
5144 zend_ast *var_ast = ast->child[0]; in zend_compile_static_var()
5162 zend_eval_const_expr(&ast->child[1]); in zend_compile_static_var()
5163 zend_ast *value_ast = ast->child[1]; in zend_compile_static_var()
5197 static void zend_compile_unset(zend_ast *ast) /* {{{ */ in zend_compile_unset() argument
5199 zend_ast *var_ast = ast->child[0]; in zend_compile_unset()
5336 static void zend_compile_return(zend_ast *ast) /* {{{ */ in zend_compile_return() argument
5338 zend_ast *expr_ast = ast->child[0]; in zend_compile_return()
5395 static void zend_compile_echo(zend_ast *ast) /* {{{ */ in zend_compile_echo() argument
5398 zend_ast *expr_ast = ast->child[0]; in zend_compile_echo()
5408 static void zend_compile_throw(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_throw() argument
5410 zend_ast *expr_ast = ast->child[0]; in zend_compile_throw()
5425 static void zend_compile_break_continue(zend_ast *ast) /* {{{ */ in zend_compile_break_continue() argument
5427 zend_ast *depth_ast = ast->child[0]; in zend_compile_break_continue()
5432 ZEND_ASSERT(ast->kind == ZEND_AST_BREAK || ast->kind == ZEND_AST_CONTINUE); in zend_compile_break_continue()
5438 "is no longer supported", ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5444 ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5454 ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5458 ast->kind == ZEND_AST_BREAK ? "break" : "continue", in zend_compile_break_continue()
5463 if (ast->kind == ZEND_AST_CONTINUE) { in zend_compile_break_continue()
5496 opline = zend_emit_op(NULL, ast->kind == ZEND_AST_BREAK ? ZEND_BRK : ZEND_CONT, NULL, NULL); in zend_compile_break_continue()
5563 static void zend_compile_goto(zend_ast *ast) /* {{{ */ in zend_compile_goto() argument
5565 zend_ast *label_ast = ast->child[0]; in zend_compile_goto()
5580 static void zend_compile_label(zend_ast *ast) /* {{{ */ in zend_compile_label() argument
5582 zend_string *label = zend_ast_get_str(ast->child[0]); in zend_compile_label()
5599 static void zend_compile_while(zend_ast *ast) /* {{{ */ in zend_compile_while() argument
5601 zend_ast *cond_ast = ast->child[0]; in zend_compile_while()
5602 zend_ast *stmt_ast = ast->child[1]; in zend_compile_while()
5623 static void zend_compile_do_while(zend_ast *ast) /* {{{ */ in zend_compile_do_while() argument
5625 zend_ast *stmt_ast = ast->child[0]; in zend_compile_do_while()
5626 zend_ast *cond_ast = ast->child[1]; in zend_compile_do_while()
5645 static void zend_compile_expr_list(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_expr_list() argument
5653 if (!ast) { in zend_compile_expr_list()
5657 list = zend_ast_get_list(ast); in zend_compile_expr_list()
5667 static void zend_compile_for(zend_ast *ast) /* {{{ */ in zend_compile_for() argument
5669 zend_ast *init_ast = ast->child[0]; in zend_compile_for()
5670 zend_ast *cond_ast = ast->child[1]; in zend_compile_for()
5671 zend_ast *loop_ast = ast->child[2]; in zend_compile_for()
5672 zend_ast *stmt_ast = ast->child[3]; in zend_compile_for()
5701 static void zend_compile_foreach(zend_ast *ast) /* {{{ */ in zend_compile_foreach() argument
5703 zend_ast *expr_ast = ast->child[0]; in zend_compile_foreach()
5704 zend_ast *value_ast = ast->child[1]; in zend_compile_foreach()
5705 zend_ast *key_ast = ast->child[2]; in zend_compile_foreach()
5706 zend_ast *stmt_ast = ast->child[3]; in zend_compile_foreach()
5778 CG(zend_lineno) = ast->lineno; in zend_compile_foreach()
5793 static void zend_compile_if(zend_ast *ast) /* {{{ */ in zend_compile_if() argument
5795 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_if()
5901 static void zend_compile_switch(zend_ast *ast) /* {{{ */ in zend_compile_switch() argument
5903 zend_ast *expr_ast = ast->child[0]; in zend_compile_switch()
5904 zend_ast_list *cases = zend_ast_get_list(ast->child[1]); in zend_compile_switch()
6079 static void zend_compile_match(znode *result, zend_ast *ast) in zend_compile_match() argument
6081 zend_ast *expr_ast = ast->child[0]; in zend_compile_match()
6082 zend_ast_list *arms = zend_ast_get_list(ast->child[1]); in zend_compile_match()
6265 static void zend_compile_try(zend_ast *ast) /* {{{ */ in zend_compile_try() argument
6267 zend_ast *try_ast = ast->child[0]; in zend_compile_try()
6268 zend_ast_list *catches = zend_ast_get_list(ast->child[1]); in zend_compile_try()
6269 zend_ast *finally_ast = ast->child[2]; in zend_compile_try()
6440 bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */ in zend_handle_encoding_declaration() argument
6442 zend_ast_list *declares = zend_ast_get_list(ast); in zend_handle_encoding_declaration()
6492 static zend_result zend_is_first_statement(zend_ast *ast, bool allow_nop) /* {{{ */ in zend_is_first_statement() argument
6495 zend_ast_list *file_ast = zend_ast_get_list(CG(ast)); in zend_is_first_statement()
6498 if (file_ast->child[i] == ast) { in zend_is_first_statement()
6513 static void zend_compile_declare(zend_ast *ast) /* {{{ */ in zend_compile_declare() argument
6515 zend_ast_list *declares = zend_ast_get_list(ast->child[0]); in zend_compile_declare()
6516 zend_ast *stmt_ast = ast->child[1]; in zend_compile_declare()
6537 if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { in zend_compile_declare()
6544 if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { in zend_compile_declare()
6549 if (ast->child[1] != NULL) { in zend_compile_declare()
6577 static void zend_compile_stmt_list(zend_ast *ast) /* {{{ */ in zend_compile_stmt_list() argument
6579 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_stmt_list()
6612 static zend_type zend_compile_single_typename(zend_ast *ast) in zend_compile_single_typename() argument
6614 ZEND_ASSERT(!(ast->attr & ZEND_TYPE_NULLABLE)); in zend_compile_single_typename()
6615 if (ast->kind == ZEND_AST_TYPE) { in zend_compile_single_typename()
6616 if (ast->attr == IS_STATIC && !CG(active_class_entry) && zend_is_scope_known()) { in zend_compile_single_typename()
6621 return (zend_type) ZEND_TYPE_INIT_CODE(ast->attr, 0, 0); in zend_compile_single_typename()
6623 zend_string *class_name = zend_ast_get_str(ast); in zend_compile_single_typename()
6627 if ((ast->attr & ZEND_NAME_NOT_FQ) != ZEND_NAME_NOT_FQ) { in zend_compile_single_typename()
6644 zend_string *orig_name = zend_ast_get_str(ast); in zend_compile_single_typename()
6645 uint32_t fetch_type = zend_get_class_fetch_type_ast(ast); in zend_compile_single_typename()
6647 class_name = zend_resolve_class_name_ast(ast); in zend_compile_single_typename()
6654 if (ast->attr == ZEND_NAME_NOT_FQ in zend_compile_single_typename()
6762 static zend_type zend_compile_typename(zend_ast *ast);
6765 zend_ast *ast, bool force_allow_null, bool *forced_allow_null) /* {{{ */ in zend_compile_typename_ex() argument
6767 bool is_marked_nullable = ast->attr & ZEND_TYPE_NULLABLE; in zend_compile_typename_ex()
6768 zend_ast_attr orig_ast_attr = ast->attr; in zend_compile_typename_ex()
6772 ast->attr &= ~ZEND_TYPE_NULLABLE; in zend_compile_typename_ex()
6775 if (ast->kind == ZEND_AST_TYPE_UNION) { in zend_compile_typename_ex()
6776 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_typename_ex()
6888 } else if (ast->kind == ZEND_AST_TYPE_INTERSECTION) { in zend_compile_typename_ex()
6889 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_typename_ex()
6955 type = zend_compile_single_typename(ast); in zend_compile_typename_ex()
6985 ast->attr = orig_ast_attr; in zend_compile_typename_ex()
6990 static zend_type zend_compile_typename(zend_ast *ast) in zend_compile_typename() argument
6993 return zend_compile_typename_ex(ast, false, &forced_allow_null); in zend_compile_typename()
7012 HashTable **attributes, zend_ast *ast, uint32_t offset, uint32_t target, uint32_t promoted in zend_compile_attributes() argument
7017 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_attributes()
7020 ZEND_ASSERT(ast->kind == ZEND_AST_ATTRIBUTE_LIST); in zend_compile_attributes()
7127 static void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast, uint32_t fallback_return_… in zend_compile_params() argument
7129 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_params()
7465 static void find_implicit_binds_recursively(closure_info *info, zend_ast *ast) { in find_implicit_binds_recursively() argument
7466 if (!ast) { in find_implicit_binds_recursively()
7470 if (ast->kind == ZEND_AST_VAR) { in find_implicit_binds_recursively()
7471 zend_ast *name_ast = ast->child[0]; in find_implicit_binds_recursively()
7489 } else if (zend_ast_is_list(ast)) { in find_implicit_binds_recursively()
7490 zend_ast_list *list = zend_ast_get_list(ast); in find_implicit_binds_recursively()
7495 } else if (ast->kind == ZEND_AST_CLOSURE) { in find_implicit_binds_recursively()
7497 zend_ast_decl *closure_ast = (zend_ast_decl *) ast; in find_implicit_binds_recursively()
7506 } else if (ast->kind == ZEND_AST_ARROW_FUNC) { in find_implicit_binds_recursively()
7508 zend_ast_decl *closure_ast = (zend_ast_decl *) ast; in find_implicit_binds_recursively()
7510 } else if (!zend_ast_is_special(ast)) { in find_implicit_binds_recursively()
7511 uint32_t i, children = zend_ast_get_num_children(ast); in find_implicit_binds_recursively()
7513 find_implicit_binds_recursively(info, ast->child[i]); in find_implicit_binds_recursively()
7561 static void zend_compile_closure_uses(zend_ast *ast) /* {{{ */ in zend_compile_closure_uses() argument
7564 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_closure_uses()
7789 static void zend_compile_func_decl(znode *result, zend_ast *ast, bool toplevel) /* {{{ */ in zend_compile_func_decl() argument
7791 zend_ast_decl *decl = (zend_ast_decl *) ast; in zend_compile_func_decl()
7893 if (ast->kind == ZEND_AST_ARROW_FUNC && decl->child[2]->kind != ZEND_AST_RETURN) { in zend_compile_func_decl()
7941 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
7943 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_prop_decl()
8044 static void zend_compile_prop_group(zend_ast *ast) /* {{{ */ in zend_compile_prop_group() argument
8046 zend_ast *type_ast = ast->child[0]; in zend_compile_prop_group()
8047 zend_ast *prop_ast = ast->child[1]; in zend_compile_prop_group()
8048 zend_ast *attr_ast = ast->child[2]; in zend_compile_prop_group()
8050 zend_compile_prop_decl(prop_ast, type_ast, ast->attr, attr_ast); in zend_compile_prop_group()
8064 static void zend_compile_class_const_decl(zend_ast *ast, uint32_t flags, zend_ast *attr_ast, zend_a… in zend_compile_class_const_decl() argument
8066 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_class_const_decl()
8118 static void zend_compile_class_const_group(zend_ast *ast) /* {{{ */ in zend_compile_class_const_group() argument
8120 zend_ast *const_ast = ast->child[0]; in zend_compile_class_const_group()
8121 zend_ast *attr_ast = ast->child[1]; in zend_compile_class_const_group()
8122 zend_ast *type_ast = ast->child[2]; in zend_compile_class_const_group()
8124 zend_compile_class_const_decl(const_ast, ast->attr, attr_ast, type_ast); in zend_compile_class_const_group()
8128 static void zend_compile_method_ref(zend_ast *ast, zend_trait_method_reference *method_ref) /* {{{ … in zend_compile_method_ref() argument
8130 zend_ast *class_ast = ast->child[0]; in zend_compile_method_ref()
8131 zend_ast *method_ast = ast->child[1]; in zend_compile_method_ref()
8143 static void zend_compile_trait_precedence(zend_ast *ast) /* {{{ */ in zend_compile_trait_precedence() argument
8145 zend_ast *method_ref_ast = ast->child[0]; in zend_compile_trait_precedence()
8146 zend_ast *insteadof_ast = ast->child[1]; in zend_compile_trait_precedence()
8164 static void zend_compile_trait_alias(zend_ast *ast) /* {{{ */ in zend_compile_trait_alias() argument
8166 zend_ast *method_ref_ast = ast->child[0]; in zend_compile_trait_alias()
8167 zend_ast *alias_ast = ast->child[1]; in zend_compile_trait_alias()
8168 uint32_t modifiers = ast->attr; in zend_compile_trait_alias()
8188 static void zend_compile_use_trait(zend_ast *ast) /* {{{ */ in zend_compile_use_trait() argument
8190 zend_ast_list *traits = zend_ast_get_list(ast->child[0]); in zend_compile_use_trait()
8191 zend_ast_list *adaptations = ast->child[1] ? zend_ast_get_list(ast->child[1]) : NULL; in zend_compile_use_trait()
8231 static void zend_compile_implements(zend_ast *ast) /* {{{ */ in zend_compile_implements() argument
8233 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_implements()
8292 static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel) /* {{{ */ in zend_compile_class_decl() argument
8294 zend_ast_decl *decl = (zend_ast_decl *) ast; in zend_compile_class_decl()
8393 CG(zend_lineno) = ast->lineno; in zend_compile_class_decl()
8493 static void zend_compile_enum_case(zend_ast *ast) in zend_compile_enum_case() argument
8500 zend_string *enum_case_name = zval_make_interned_string(zend_ast_get_zval(ast->child[0])); in zend_compile_enum_case()
8511 zend_ast *case_value_ast = ast->child[1]; in zend_compile_enum_case()
8513 ast->child[1] = NULL; in zend_compile_enum_case()
8530 zend_ast *doc_comment_ast = ast->child[2]; in zend_compile_enum_case()
8540 zend_ast *attr_ast = ast->child[3]; in zend_compile_enum_case()
8601 static void zend_compile_use(zend_ast *ast) /* {{{ */ in zend_compile_use() argument
8603 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_use()
8606 uint32_t type = ast->attr; in zend_compile_use()
8674 static void zend_compile_group_use(zend_ast *ast) /* {{{ */ in zend_compile_group_use() argument
8677 zend_string *ns = zend_ast_get_str(ast->child[0]); in zend_compile_group_use()
8678 zend_ast_list *list = zend_ast_get_list(ast->child[1]); in zend_compile_group_use()
8688 inline_use->attr = ast->attr ? ast->attr : use->attr; in zend_compile_group_use()
8694 static void zend_compile_const_decl(zend_ast *ast) /* {{{ */ in zend_compile_const_decl() argument
8696 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_const_decl()
8737 static void zend_compile_namespace(zend_ast *ast) /* {{{ */ in zend_compile_namespace() argument
8739 zend_ast *name_ast = ast->child[0]; in zend_compile_namespace()
8740 zend_ast *stmt_ast = ast->child[1]; in zend_compile_namespace()
8765 if (is_first_namespace && FAILURE == zend_is_first_statement(ast, /* allow_nop */ 1)) { in zend_compile_namespace()
8800 static void zend_compile_halt_compiler(zend_ast *ast) /* {{{ */ in zend_compile_halt_compiler() argument
8802 zend_ast *offset_ast = ast->child[0]; in zend_compile_halt_compiler()
8822 static bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */ in zend_try_ct_eval_magic_const() argument
8827 switch (ast->attr) { in zend_try_ct_eval_magic_const()
8829 ZVAL_LONG(zv, ast->lineno); in zend_try_ct_eval_magic_const()
9049 static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ in zend_try_ct_eval_array() argument
9051 zend_ast_list *list = zend_ast_get_list(ast); in zend_try_ct_eval_array()
9056 if (ast->attr == ZEND_ARRAY_SYNTAX_LIST) { in zend_try_ct_eval_array()
9177 static void zend_compile_binary_op(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_binary_op() argument
9179 zend_ast *left_ast = ast->child[0]; in zend_compile_binary_op()
9180 zend_ast *right_ast = ast->child[1]; in zend_compile_binary_op()
9181 uint32_t opcode = ast->attr; in zend_compile_binary_op()
9270 static void zend_compile_greater(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_greater() argument
9272 zend_ast *left_ast = ast->child[0]; in zend_compile_greater()
9273 zend_ast *right_ast = ast->child[1]; in zend_compile_greater()
9276 ZEND_ASSERT(ast->kind == ZEND_AST_GREATER || ast->kind == ZEND_AST_GREATER_EQUAL); in zend_compile_greater()
9283 zend_ct_eval_greater(&result->u.constant, ast->kind, in zend_compile_greater()
9291 ast->kind == ZEND_AST_GREATER ? ZEND_IS_SMALLER : ZEND_IS_SMALLER_OR_EQUAL, in zend_compile_greater()
9296 static void zend_compile_unary_op(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_unary_op() argument
9298 zend_ast *expr_ast = ast->child[0]; in zend_compile_unary_op()
9299 uint32_t opcode = ast->attr; in zend_compile_unary_op()
9315 static void zend_compile_unary_pm(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_unary_pm() argument
9317 zend_ast *expr_ast = ast->child[0]; in zend_compile_unary_pm()
9320 ZEND_ASSERT(ast->kind == ZEND_AST_UNARY_PLUS || ast->kind == ZEND_AST_UNARY_MINUS); in zend_compile_unary_pm()
9325 && zend_try_ct_eval_unary_pm(&result->u.constant, ast->kind, &expr_node.u.constant)) { in zend_compile_unary_pm()
9332 ZVAL_LONG(&right_node.u.constant, (ast->kind == ZEND_AST_UNARY_PLUS) ? 1 : -1); in zend_compile_unary_pm()
9337 static void zend_compile_short_circuiting(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_short_circuiting() argument
9339 zend_ast *left_ast = ast->child[0]; in zend_compile_short_circuiting()
9340 zend_ast *right_ast = ast->child[1]; in zend_compile_short_circuiting()
9346 ZEND_ASSERT(ast->kind == ZEND_AST_AND || ast->kind == ZEND_AST_OR); in zend_compile_short_circuiting()
9351 if ((ast->kind == ZEND_AST_AND && !zend_is_true(&left_node.u.constant)) in zend_compile_short_circuiting()
9352 || (ast->kind == ZEND_AST_OR && zend_is_true(&left_node.u.constant))) { in zend_compile_short_circuiting()
9373 opline_jmpz = zend_emit_op(NULL, ast->kind == ZEND_AST_AND ? ZEND_JMPZ_EX : ZEND_JMPNZ_EX, in zend_compile_short_circuiting()
9392 static void zend_compile_post_incdec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_post_incdec() argument
9394 zend_ast *var_ast = ast->child[0]; in zend_compile_post_incdec()
9395 ZEND_ASSERT(ast->kind == ZEND_AST_POST_INC || ast->kind == ZEND_AST_POST_DEC); in zend_compile_post_incdec()
9401 opline->opcode = ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC_OBJ : ZEND_POST_DEC_OBJ; in zend_compile_post_incdec()
9405 …opline->opcode = ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC_STATIC_PROP : ZEND_POST_DEC_STATIC… in zend_compile_post_incdec()
9413 zend_emit_op_tmp(result, ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC : ZEND_POST_DEC, in zend_compile_post_incdec()
9419 static void zend_compile_pre_incdec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_pre_incdec() argument
9421 zend_ast *var_ast = ast->child[0]; in zend_compile_pre_incdec()
9422 ZEND_ASSERT(ast->kind == ZEND_AST_PRE_INC || ast->kind == ZEND_AST_PRE_DEC); in zend_compile_pre_incdec()
9428 opline->opcode = ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC_OBJ : ZEND_PRE_DEC_OBJ; in zend_compile_pre_incdec()
9433 …opline->opcode = ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC_STATIC_PROP : ZEND_PRE_DEC_STATIC_PR… in zend_compile_pre_incdec()
9442 zend_emit_op_tmp(result, ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC : ZEND_PRE_DEC, in zend_compile_pre_incdec()
9448 static void zend_compile_cast(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_cast() argument
9450 zend_ast *expr_ast = ast->child[0]; in zend_compile_cast()
9456 if (ast->attr == _IS_BOOL) { in zend_compile_cast()
9458 } else if (ast->attr == IS_NULL) { in zend_compile_cast()
9462 opline->extended_value = ast->attr; in zend_compile_cast()
9467 static void zend_compile_shorthand_conditional(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_shorthand_conditional() argument
9469 zend_ast *cond_ast = ast->child[0]; in zend_compile_shorthand_conditional()
9470 zend_ast *false_ast = ast->child[2]; in zend_compile_shorthand_conditional()
9476 ZEND_ASSERT(ast->child[1] == NULL); in zend_compile_shorthand_conditional()
9492 static void zend_compile_conditional(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_conditional() argument
9494 zend_ast *cond_ast = ast->child[0]; in zend_compile_conditional()
9495 zend_ast *true_ast = ast->child[1]; in zend_compile_conditional()
9496 zend_ast *false_ast = ast->child[2]; in zend_compile_conditional()
9527 zend_compile_shorthand_conditional(result, ast); in zend_compile_conditional()
9552 static void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_coalesce() argument
9554 zend_ast *expr_ast = ast->child[0]; in zend_compile_coalesce()
9555 zend_ast *default_ast = ast->child[1]; in zend_compile_coalesce()
9584 static void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign_coalesce() argument
9586 zend_ast *var_ast = ast->child[0]; in zend_compile_assign_coalesce()
9587 zend_ast *default_ast = ast->child[1]; in zend_compile_assign_coalesce()
9687 static void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_print() argument
9690 zend_ast *expr_ast = ast->child[0]; in zend_compile_print()
9703 static void zend_compile_exit(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_exit() argument
9705 zend_ast *expr_ast = ast->child[0]; in zend_compile_exit()
9724 static void zend_compile_yield(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_yield() argument
9726 zend_ast *value_ast = ast->child[0]; in zend_compile_yield()
9727 zend_ast *key_ast = ast->child[1]; in zend_compile_yield()
9758 static void zend_compile_yield_from(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_yield_from() argument
9760 zend_ast *expr_ast = ast->child[0]; in zend_compile_yield_from()
9775 static void zend_compile_instanceof(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_instanceof() argument
9777 zend_ast *obj_ast = ast->child[0]; in zend_compile_instanceof()
9778 zend_ast *class_ast = ast->child[1]; in zend_compile_instanceof()
9807 static void zend_compile_include_or_eval(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_include_or_eval() argument
9809 zend_ast *expr_ast = ast->child[0]; in zend_compile_include_or_eval()
9817 opline->extended_value = ast->attr; in zend_compile_include_or_eval()
9823 static void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_isset_or_empty() argument
9825 zend_ast *var_ast = ast->child[0]; in zend_compile_isset_or_empty()
9830 ZEND_ASSERT(ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY); in zend_compile_isset_or_empty()
9833 if (ast->kind == ZEND_AST_EMPTY) { in zend_compile_isset_or_empty()
9847 ZVAL_BOOL(&result->u.constant, ast->kind == ZEND_AST_ISSET); in zend_compile_isset_or_empty()
9863 ZEND_FETCH_GLOBAL | (ast->kind == ZEND_AST_EMPTY ? ZEND_ISEMPTY : 0); in zend_compile_isset_or_empty()
9897 if (!(ast->kind == ZEND_AST_ISSET)) { in zend_compile_isset_or_empty()
9903 static void zend_compile_silence(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_silence() argument
9905 zend_ast *expr_ast = ast->child[0]; in zend_compile_silence()
9922 static void zend_compile_shell_exec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_shell_exec() argument
9924 zend_ast *expr_ast = ast->child[0]; in zend_compile_shell_exec()
9940 static void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_array() argument
9942 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_array()
9947 if (zend_try_ct_eval_array(&result->u.constant, ast)) { in zend_compile_array()
10019 static void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_const() argument
10021 zend_ast *name_ast = ast->child[0]; in zend_compile_const()
10030 zend_ast *last = CG(ast); in zend_compile_const()
10069 static void zend_compile_class_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_class_const() argument
10076 zend_eval_const_expr(&ast->child[0]); in zend_compile_class_const()
10077 zend_eval_const_expr(&ast->child[1]); in zend_compile_class_const()
10079 class_ast = ast->child[0]; in zend_compile_class_const()
10080 const_ast = ast->child[1]; in zend_compile_class_const()
10110 static void zend_compile_class_name(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_class_name() argument
10112 zend_ast *class_ast = ast->child[0]; in zend_compile_class_name()
10173 static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_encaps_list() argument
10179 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_encaps_list()
10298 static void zend_compile_magic_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_magic_const() argument
10302 if (zend_try_ct_eval_magic_const(&result->u.constant, ast)) { in zend_compile_magic_const()
10307 ZEND_ASSERT(ast->attr == T_CLASS_C && in zend_compile_magic_const()
10338 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_class_const() local
10339 zend_ast *class_ast = ast->child[0]; in zend_compile_const_expr_class_const()
10370 ast->attr |= ZEND_FETCH_CLASS_EXCEPTION; in zend_compile_const_expr_class_const()
10376 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_class_name() local
10377 zend_ast *class_ast = ast->child[0]; in zend_compile_const_expr_class_name()
10391 ast->child[0] = NULL; in zend_compile_const_expr_class_name()
10392 ast->attr = fetch_type; in zend_compile_const_expr_class_name()
10404 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_const() local
10405 zend_ast *name_ast = ast->child[0]; in zend_compile_const_expr_const()
10411 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_const_expr_const()
10418 zend_ast_destroy(ast); in zend_compile_const_expr_const()
10423 zend_ast_destroy(ast); in zend_compile_const_expr_const()
10431 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_magic_const() local
10434 ZEND_ASSERT(ast->attr == T_CLASS_C); in zend_compile_const_expr_magic_const()
10436 zend_ast_destroy(ast); in zend_compile_const_expr_magic_const()
10496 zend_ast *ast = *ast_ptr; in zend_compile_const_expr() local
10497 if (ast == NULL || ast->kind == ZEND_AST_ZVAL) { in zend_compile_const_expr()
10501 if (!zend_is_allowed_in_const_expr(ast->kind)) { in zend_compile_const_expr()
10505 switch (ast->kind) { in zend_compile_const_expr()
10530 zend_ast_apply(ast, zend_compile_const_expr, context); in zend_compile_const_expr()
10553 void zend_compile_top_stmt(zend_ast *ast) /* {{{ */ in zend_compile_top_stmt() argument
10555 if (!ast) { in zend_compile_top_stmt()
10559 if (ast->kind == ZEND_AST_STMT_LIST) { in zend_compile_top_stmt()
10560 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_top_stmt()
10568 if (ast->kind == ZEND_AST_FUNC_DECL) { in zend_compile_top_stmt()
10569 CG(zend_lineno) = ast->lineno; in zend_compile_top_stmt()
10570 zend_compile_func_decl(NULL, ast, 1); in zend_compile_top_stmt()
10571 CG(zend_lineno) = ((zend_ast_decl *) ast)->end_lineno; in zend_compile_top_stmt()
10572 } else if (ast->kind == ZEND_AST_CLASS) { in zend_compile_top_stmt()
10573 CG(zend_lineno) = ast->lineno; in zend_compile_top_stmt()
10574 zend_compile_class_decl(NULL, ast, 1); in zend_compile_top_stmt()
10575 CG(zend_lineno) = ((zend_ast_decl *) ast)->end_lineno; in zend_compile_top_stmt()
10577 zend_compile_stmt(ast); in zend_compile_top_stmt()
10579 if (ast->kind != ZEND_AST_NAMESPACE && ast->kind != ZEND_AST_HALT_COMPILER) { in zend_compile_top_stmt()
10585 static void zend_compile_stmt(zend_ast *ast) /* {{{ */ in zend_compile_stmt() argument
10587 if (!ast) { in zend_compile_stmt()
10591 CG(zend_lineno) = ast->lineno; in zend_compile_stmt()
10593 if ((CG(compiler_options) & ZEND_COMPILE_EXTENDED_STMT) && !zend_is_unticked_stmt(ast)) { in zend_compile_stmt()
10597 switch (ast->kind) { in zend_compile_stmt()
10599 zend_compile_stmt_list(ast); in zend_compile_stmt()
10602 zend_compile_global_var(ast); in zend_compile_stmt()
10605 zend_compile_static_var(ast); in zend_compile_stmt()
10608 zend_compile_unset(ast); in zend_compile_stmt()
10611 zend_compile_return(ast); in zend_compile_stmt()
10614 zend_compile_echo(ast); in zend_compile_stmt()
10618 zend_compile_break_continue(ast); in zend_compile_stmt()
10621 zend_compile_goto(ast); in zend_compile_stmt()
10624 zend_compile_label(ast); in zend_compile_stmt()
10627 zend_compile_while(ast); in zend_compile_stmt()
10630 zend_compile_do_while(ast); in zend_compile_stmt()
10633 zend_compile_for(ast); in zend_compile_stmt()
10636 zend_compile_foreach(ast); in zend_compile_stmt()
10639 zend_compile_if(ast); in zend_compile_stmt()
10642 zend_compile_switch(ast); in zend_compile_stmt()
10645 zend_compile_try(ast); in zend_compile_stmt()
10648 zend_compile_declare(ast); in zend_compile_stmt()
10652 zend_compile_func_decl(NULL, ast, 0); in zend_compile_stmt()
10655 zend_compile_enum_case(ast); in zend_compile_stmt()
10658 zend_compile_prop_group(ast); in zend_compile_stmt()
10661 zend_compile_class_const_group(ast); in zend_compile_stmt()
10664 zend_compile_use_trait(ast); in zend_compile_stmt()
10667 zend_compile_class_decl(NULL, ast, 0); in zend_compile_stmt()
10670 zend_compile_group_use(ast); in zend_compile_stmt()
10673 zend_compile_use(ast); in zend_compile_stmt()
10676 zend_compile_const_decl(ast); in zend_compile_stmt()
10679 zend_compile_namespace(ast); in zend_compile_stmt()
10682 zend_compile_halt_compiler(ast); in zend_compile_stmt()
10686 zend_compile_expr(NULL, ast); in zend_compile_stmt()
10691 zend_compile_expr(&result, ast); in zend_compile_stmt()
10696 if (FC(declarables).ticks && !zend_is_unticked_stmt(ast)) { in zend_compile_stmt()
10702 static void zend_compile_expr_inner(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_expr_inner() argument
10705 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_expr_inner()
10708 zend_compile_memoized_expr(result, ast); in zend_compile_expr_inner()
10712 switch (ast->kind) { in zend_compile_expr_inner()
10714 ZVAL_COPY(&result->u.constant, zend_ast_get_zval(ast)); in zend_compile_expr_inner()
10718 *result = *zend_ast_get_znode(ast); in zend_compile_expr_inner()
10729 zend_compile_var(result, ast, BP_VAR_R, 0); in zend_compile_expr_inner()
10732 zend_compile_assign(result, ast); in zend_compile_expr_inner()
10735 zend_compile_assign_ref(result, ast); in zend_compile_expr_inner()
10738 zend_compile_new(result, ast); in zend_compile_expr_inner()
10741 zend_compile_clone(result, ast); in zend_compile_expr_inner()
10744 zend_compile_compound_assign(result, ast); in zend_compile_expr_inner()
10747 zend_compile_binary_op(result, ast); in zend_compile_expr_inner()
10751 zend_compile_greater(result, ast); in zend_compile_expr_inner()
10754 zend_compile_unary_op(result, ast); in zend_compile_expr_inner()
10758 zend_compile_unary_pm(result, ast); in zend_compile_expr_inner()
10762 zend_compile_short_circuiting(result, ast); in zend_compile_expr_inner()
10766 zend_compile_post_incdec(result, ast); in zend_compile_expr_inner()
10770 zend_compile_pre_incdec(result, ast); in zend_compile_expr_inner()
10773 zend_compile_cast(result, ast); in zend_compile_expr_inner()
10776 zend_compile_conditional(result, ast); in zend_compile_expr_inner()
10779 zend_compile_coalesce(result, ast); in zend_compile_expr_inner()
10782 zend_compile_assign_coalesce(result, ast); in zend_compile_expr_inner()
10785 zend_compile_print(result, ast); in zend_compile_expr_inner()
10788 zend_compile_exit(result, ast); in zend_compile_expr_inner()
10791 zend_compile_yield(result, ast); in zend_compile_expr_inner()
10794 zend_compile_yield_from(result, ast); in zend_compile_expr_inner()
10797 zend_compile_instanceof(result, ast); in zend_compile_expr_inner()
10800 zend_compile_include_or_eval(result, ast); in zend_compile_expr_inner()
10804 zend_compile_isset_or_empty(result, ast); in zend_compile_expr_inner()
10807 zend_compile_silence(result, ast); in zend_compile_expr_inner()
10810 zend_compile_shell_exec(result, ast); in zend_compile_expr_inner()
10813 zend_compile_array(result, ast); in zend_compile_expr_inner()
10816 zend_compile_const(result, ast); in zend_compile_expr_inner()
10819 zend_compile_class_const(result, ast); in zend_compile_expr_inner()
10822 zend_compile_class_name(result, ast); in zend_compile_expr_inner()
10825 zend_compile_encaps_list(result, ast); in zend_compile_expr_inner()
10828 zend_compile_magic_const(result, ast); in zend_compile_expr_inner()
10832 zend_compile_func_decl(result, ast, 0); in zend_compile_expr_inner()
10835 zend_compile_throw(result, ast); in zend_compile_expr_inner()
10838 zend_compile_match(result, ast); in zend_compile_expr_inner()
10846 static void zend_compile_expr(znode *result, zend_ast *ast) in zend_compile_expr() argument
10851 zend_compile_expr_inner(result, ast); in zend_compile_expr()
10852 zend_short_circuiting_commit(checkpoint, result, ast); in zend_compile_expr()
10855 static zend_op *zend_compile_var_inner(znode *result, zend_ast *ast, uint32_t type, bool by_ref) in zend_compile_var_inner() argument
10857 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_var_inner()
10860 switch (ast->kind) { in zend_compile_var_inner()
10865 zend_compile_memoized_expr(result, ast); in zend_compile_var_inner()
10871 switch (ast->kind) { in zend_compile_var_inner()
10873 return zend_compile_simple_var(result, ast, type, 0); in zend_compile_var_inner()
10875 return zend_compile_dim(result, ast, type, by_ref); in zend_compile_var_inner()
10878 return zend_compile_prop(result, ast, type, by_ref); in zend_compile_var_inner()
10880 return zend_compile_static_prop(result, ast, type, by_ref, 0); in zend_compile_var_inner()
10882 zend_compile_call(result, ast, type); in zend_compile_var_inner()
10886 zend_compile_method_call(result, ast, type); in zend_compile_var_inner()
10889 zend_compile_static_call(result, ast, type); in zend_compile_var_inner()
10892 *result = *zend_ast_get_znode(ast); in zend_compile_var_inner()
10900 zend_compile_expr(result, ast); in zend_compile_var_inner()
10905 static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */ in zend_compile_var() argument
10908 zend_op *opcode = zend_compile_var_inner(result, ast, type, by_ref); in zend_compile_var()
10909 zend_short_circuiting_commit(checkpoint, result, ast); in zend_compile_var()
10913 static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) … in zend_delayed_compile_var() argument
10915 switch (ast->kind) { in zend_delayed_compile_var()
10917 return zend_compile_simple_var(result, ast, type, 1); in zend_delayed_compile_var()
10919 return zend_delayed_compile_dim(result, ast, type, by_ref); in zend_delayed_compile_var()
10923 zend_op *opline = zend_delayed_compile_prop(result, ast, type); in zend_delayed_compile_var()
10930 return zend_compile_static_prop(result, ast, type, by_ref, 1); in zend_delayed_compile_var()
10932 return zend_compile_var(result, ast, type, 0); in zend_delayed_compile_var()
10939 zend_ast *ast = *ast_ptr; in zend_eval_const_expr() local
10942 if (!ast) { in zend_eval_const_expr()
10948 switch (ast->kind) { in zend_eval_const_expr()
10950 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10951 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10952 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10956 if (!zend_try_ct_eval_binary_op(&result, ast->attr, in zend_eval_const_expr()
10957 zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])) in zend_eval_const_expr()
10964 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10965 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10966 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10970 zend_ct_eval_greater(&result, ast->kind, in zend_eval_const_expr()
10971 zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])); in zend_eval_const_expr()
10977 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10978 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10979 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10983 child0_is_true = zend_is_true(zend_ast_get_zval(ast->child[0])); in zend_eval_const_expr()
10984 if (child0_is_true == (ast->kind == ZEND_AST_OR)) { in zend_eval_const_expr()
10985 ZVAL_BOOL(&result, ast->kind == ZEND_AST_OR); in zend_eval_const_expr()
10989 if (ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10993 child1_is_true = zend_is_true(zend_ast_get_zval(ast->child[1])); in zend_eval_const_expr()
10994 if (ast->kind == ZEND_AST_OR) { in zend_eval_const_expr()
11002 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11003 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
11007 if (!zend_try_ct_eval_unary_op(&result, ast->attr, zend_ast_get_zval(ast->child[0]))) { in zend_eval_const_expr()
11013 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11014 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
11018 if (!zend_try_ct_eval_unary_pm(&result, ast->kind, zend_ast_get_zval(ast->child[0]))) { in zend_eval_const_expr()
11024 if (ast->child[0]->kind == ZEND_AST_DIM) { in zend_eval_const_expr()
11025 ast->child[0]->attr |= ZEND_DIM_IS; in zend_eval_const_expr()
11027 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11029 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
11031 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11035 if (Z_TYPE_P(zend_ast_get_zval(ast->child[0])) == IS_NULL) { in zend_eval_const_expr()
11036 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11037 *ast_ptr = ast->child[1]; in zend_eval_const_expr()
11038 ast->child[1] = NULL; in zend_eval_const_expr()
11039 zend_ast_destroy(ast); in zend_eval_const_expr()
11041 *ast_ptr = ast->child[0]; in zend_eval_const_expr()
11042 ast->child[0] = NULL; in zend_eval_const_expr()
11043 zend_ast_destroy(ast); in zend_eval_const_expr()
11049 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11050 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
11052 if (ast->child[1]) { in zend_eval_const_expr()
11053 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11055 zend_eval_const_expr(&ast->child[2]); in zend_eval_const_expr()
11059 child = &ast->child[2 - zend_is_true(zend_ast_get_zval(ast->child[0]))]; in zend_eval_const_expr()
11065 zend_ast_destroy(ast); in zend_eval_const_expr()
11075 if (ast->child[1] == NULL) { in zend_eval_const_expr()
11079 if (ast->attr & ZEND_DIM_ALTERNATIVE_SYNTAX) { in zend_eval_const_expr()
11080 ast->attr &= ~ZEND_DIM_ALTERNATIVE_SYNTAX; /* remove flag to avoid duplicate warning */ in zend_eval_const_expr()
11085 if ((ast->attr & ZEND_DIM_IS) && ast->child[0]->kind == ZEND_AST_DIM) { in zend_eval_const_expr()
11086 ast->child[0]->attr |= ZEND_DIM_IS; in zend_eval_const_expr()
11089 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11090 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11091 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
11095 container = zend_ast_get_zval(ast->child[0]); in zend_eval_const_expr()
11096 dim = zend_ast_get_zval(ast->child[1]); in zend_eval_const_expr()
11138 if (!zend_try_ct_eval_array(&result, ast)) { in zend_eval_const_expr()
11143 if (!zend_try_ct_eval_magic_const(&result, ast)) { in zend_eval_const_expr()
11149 zend_ast *name_ast = ast->child[0]; in zend_eval_const_expr()
11168 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11169 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11171 if (UNEXPECTED(ast->child[1]->kind != ZEND_AST_ZVAL in zend_eval_const_expr()
11172 || Z_TYPE_P(zend_ast_get_zval(ast->child[1])) != IS_STRING)) { in zend_eval_const_expr()
11176 class_ast = ast->child[0]; in zend_eval_const_expr()
11177 name_ast = ast->child[1]; in zend_eval_const_expr()
11194 zend_ast *class_ast = ast->child[0]; in zend_eval_const_expr()
11206 zend_ast_list *list = zend_ast_get_list(ast); in zend_eval_const_expr()
11213 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11214 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11217 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11220 zend_eval_const_expr(&ast->child[2]); in zend_eval_const_expr()
11224 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
11225 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11231 zend_ast_destroy(ast); in zend_eval_const_expr()