Lines Matching refs:ast

93 static bool zend_try_ct_eval_array(zval *result, zend_ast *ast);
96 static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref);
97 static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref);
98 static void zend_compile_expr(znode *result, zend_ast *ast);
99 static void zend_compile_stmt(zend_ast *ast);
100 static void zend_compile_assign(znode *result, zend_ast *ast);
1132 zend_string *zend_resolve_class_name_ast(zend_ast *ast) /* {{{ */ in zend_resolve_class_name_ast() argument
1134 zval *class_name = zend_ast_get_zval(ast); in zend_resolve_class_name_ast()
1138 return zend_resolve_class_name(Z_STR_P(class_name), ast->attr); in zend_resolve_class_name_ast()
1153 static bool zend_is_call(zend_ast *ast);
1684 static zend_string *zend_resolve_const_class_name_reference(zend_ast *ast, const char *type) in zend_resolve_const_class_name_reference() argument
1686 zend_string *class_name = zend_ast_get_str(ast); in zend_resolve_const_class_name_reference()
1687 if (ZEND_FETCH_CLASS_DEFAULT != zend_get_class_fetch_type_ast(ast)) { in zend_resolve_const_class_name_reference()
1692 return zend_resolve_class_name(class_name, ast->attr); in zend_resolve_const_class_name_reference()
2064 zend_ast *zend_negate_num_string(zend_ast *ast) /* {{{ */ in zend_negate_num_string() argument
2066 zval *zv = zend_ast_get_zval(ast); in zend_negate_num_string()
2082 return ast; in zend_negate_num_string()
2424 static bool zend_ast_is_short_circuited(const zend_ast *ast) in zend_ast_is_short_circuited() argument
2426 switch (ast->kind) { in zend_ast_is_short_circuited()
2432 return zend_ast_is_short_circuited(ast->child[0]); in zend_ast_is_short_circuited()
2441 static void zend_assert_not_short_circuited(const zend_ast *ast) in zend_assert_not_short_circuited() argument
2443 if (zend_ast_is_short_circuited(ast)) { in zend_assert_not_short_circuited()
2454 static void zend_short_circuiting_mark_inner(zend_ast *ast) { in zend_short_circuiting_mark_inner() argument
2455 if (zend_ast_kind_is_short_circuited(ast->kind)) { in zend_short_circuiting_mark_inner()
2456 ast->attr |= ZEND_SHORT_CIRCUITING_INNER; in zend_short_circuiting_mark_inner()
2465 static void zend_short_circuiting_commit(uint32_t checkpoint, znode *result, zend_ast *ast) in zend_short_circuiting_commit() argument
2467 bool is_short_circuited = zend_ast_kind_is_short_circuited(ast->kind) in zend_short_circuiting_commit()
2468 || ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY; in zend_short_circuiting_commit()
2475 if (ast->attr & ZEND_SHORT_CIRCUITING_INNER) { in zend_short_circuiting_commit()
2486 ast->kind == ZEND_AST_ISSET ? ZEND_SHORT_CIRCUITING_CHAIN_ISSET : in zend_short_circuiting_commit()
2487 ast->kind == ZEND_AST_EMPTY ? ZEND_SHORT_CIRCUITING_CHAIN_EMPTY : in zend_short_circuiting_commit()
2661 static inline bool zend_is_variable(zend_ast *ast) /* {{{ */ in zend_is_variable() argument
2663 return ast->kind == ZEND_AST_VAR in zend_is_variable()
2664 || ast->kind == ZEND_AST_DIM in zend_is_variable()
2665 || ast->kind == ZEND_AST_PROP in zend_is_variable()
2666 || ast->kind == ZEND_AST_NULLSAFE_PROP in zend_is_variable()
2667 || ast->kind == ZEND_AST_STATIC_PROP; in zend_is_variable()
2671 static inline bool zend_is_call(zend_ast *ast) /* {{{ */ in zend_is_call() argument
2673 return ast->kind == ZEND_AST_CALL in zend_is_call()
2674 || ast->kind == ZEND_AST_METHOD_CALL in zend_is_call()
2675 || ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL in zend_is_call()
2676 || ast->kind == ZEND_AST_STATIC_CALL; in zend_is_call()
2680 static inline bool zend_is_variable_or_call(zend_ast *ast) /* {{{ */ in zend_is_variable_or_call() argument
2682 return zend_is_variable(ast) || zend_is_call(ast); in zend_is_variable_or_call()
2686 static inline bool zend_is_unticked_stmt(zend_ast *ast) /* {{{ */ in zend_is_unticked_stmt() argument
2688 return ast->kind == ZEND_AST_STMT_LIST || ast->kind == ZEND_AST_LABEL in zend_is_unticked_stmt()
2689 || ast->kind == ZEND_AST_PROP_DECL || ast->kind == ZEND_AST_CLASS_CONST_GROUP in zend_is_unticked_stmt()
2690 || ast->kind == ZEND_AST_USE_TRAIT || ast->kind == ZEND_AST_METHOD; in zend_is_unticked_stmt()
2694 static inline bool zend_can_write_to_variable(zend_ast *ast) /* {{{ */ in zend_can_write_to_variable() argument
2697 ast->kind == ZEND_AST_DIM in zend_can_write_to_variable()
2698 || ast->kind == ZEND_AST_PROP in zend_can_write_to_variable()
2700 ast = ast->child[0]; in zend_can_write_to_variable()
2703 return zend_is_variable_or_call(ast) && !zend_ast_is_short_circuited(ast); in zend_can_write_to_variable()
2816 static zend_result zend_try_compile_cv(znode *result, zend_ast *ast) /* {{{ */ in zend_try_compile_cv() argument
2818 zend_ast *name_ast = ast->child[0]; in zend_try_compile_cv()
2847 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
2849 zend_ast *name_ast = ast->child[0]; in zend_compile_simple_var_no_cv()
2877 static bool is_this_fetch(zend_ast *ast) /* {{{ */ in is_this_fetch() argument
2879 if (ast->kind == ZEND_AST_VAR && ast->child[0]->kind == ZEND_AST_ZVAL) { in is_this_fetch()
2880 zval *name = zend_ast_get_zval(ast->child[0]); in is_this_fetch()
2888 static bool is_globals_fetch(const zend_ast *ast) in is_globals_fetch() argument
2890 if (ast->kind == ZEND_AST_VAR && ast->child[0]->kind == ZEND_AST_ZVAL) { in is_globals_fetch()
2891 zval *name = zend_ast_get_zval(ast->child[0]); in is_globals_fetch()
2898 static bool is_global_var_fetch(zend_ast *ast) in is_global_var_fetch() argument
2900 return ast->kind == ZEND_AST_DIM && is_globals_fetch(ast->child[0]); in is_global_var_fetch()
2913 static zend_op *zend_compile_simple_var(znode *result, zend_ast *ast, uint32_t type, bool delayed) … in zend_compile_simple_var() argument
2915 if (is_this_fetch(ast)) { in zend_compile_simple_var()
2923 } else if (is_globals_fetch(ast)) { in zend_compile_simple_var()
2930 } else if (zend_try_compile_cv(result, ast) == FAILURE) { in zend_compile_simple_var()
2931 return zend_compile_simple_var_no_cv(result, ast, type, delayed); in zend_compile_simple_var()
2937 static void zend_separate_if_call_and_write(znode *node, zend_ast *ast, uint32_t type) /* {{{ */ in zend_separate_if_call_and_write() argument
2943 && zend_is_call(ast)) { in zend_separate_if_call_and_write()
2965 static zend_op *zend_delayed_compile_dim(znode *result, zend_ast *ast, uint32_t type, bool by_ref) in zend_delayed_compile_dim() argument
2967 if (ast->attr == ZEND_DIM_ALTERNATIVE_SYNTAX) { in zend_delayed_compile_dim()
2970 zend_ast *var_ast = ast->child[0]; in zend_delayed_compile_dim()
2971 zend_ast *dim_ast = ast->child[1]; in zend_delayed_compile_dim()
3031 static zend_op *zend_compile_dim(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */ in zend_compile_dim() argument
3034 zend_delayed_compile_dim(result, ast, type, by_ref); in zend_compile_dim()
3039 static zend_op *zend_delayed_compile_prop(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_delayed_compile_prop() argument
3041 zend_ast *obj_ast = ast->child[0]; in zend_delayed_compile_prop()
3042 zend_ast *prop_ast = ast->child[1]; in zend_delayed_compile_prop()
3046 bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_PROP; in zend_delayed_compile_prop()
3113 static zend_op *zend_compile_prop(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ … in zend_compile_prop() argument
3116 zend_op *opline = zend_delayed_compile_prop(result, ast, type); in zend_compile_prop()
3124 static zend_op *zend_compile_static_prop(znode *result, zend_ast *ast, uint32_t type, bool by_ref, … in zend_compile_static_prop() argument
3126 zend_ast *class_ast = ast->child[0]; in zend_compile_static_prop()
3127 zend_ast *prop_ast = ast->child[1]; in zend_compile_static_prop()
3183 static bool zend_propagate_list_refs(zend_ast *ast) { /* {{{ */ in zend_propagate_list_refs() argument
3184 zend_ast_list *list = zend_ast_get_list(ast); in zend_propagate_list_refs()
3216 znode *result, zend_ast *ast, znode *expr_node, zend_ast_attr array_style) /* {{{ */ in zend_compile_list_assign() argument
3218 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_list_assign()
3305 static void zend_ensure_writable_variable(const zend_ast *ast) /* {{{ */ in zend_ensure_writable_variable() argument
3307 if (ast->kind == ZEND_AST_CALL) { in zend_ensure_writable_variable()
3311 ast->kind == ZEND_AST_METHOD_CALL in zend_ensure_writable_variable()
3312 || ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL in zend_ensure_writable_variable()
3313 || ast->kind == ZEND_AST_STATIC_CALL in zend_ensure_writable_variable()
3317 if (zend_ast_is_short_circuited(ast)) { in zend_ensure_writable_variable()
3320 if (is_globals_fetch(ast)) { in zend_ensure_writable_variable()
3369 static void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign() argument
3371 zend_ast *var_ast = ast->child[0]; in zend_compile_assign()
3372 zend_ast *expr_ast = ast->child[1]; in zend_compile_assign()
3466 static void zend_compile_assign_ref(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign_ref() argument
3468 zend_ast *target_ast = ast->child[0]; in zend_compile_assign_ref()
3469 zend_ast *source_ast = ast->child[1]; in zend_compile_assign_ref()
3538 static void zend_compile_compound_assign(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_compound_assign() argument
3540 zend_ast *var_ast = ast->child[0]; in zend_compile_compound_assign()
3541 zend_ast *expr_ast = ast->child[1]; in zend_compile_compound_assign()
3542 uint32_t opcode = ast->attr; in zend_compile_compound_assign()
3634 zend_ast *ast, zend_function *fbc, bool *may_have_extra_named_args) /* {{{ */ in zend_compile_args() argument
3636 zend_ast_list *args = zend_ast_get_list(ast); in zend_compile_args()
3756 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_args()
4628 static void zend_compile_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_call() argument
4630 zend_ast *name_ast = ast->child[0]; in zend_compile_call()
4631 zend_ast *args_ast = ast->child[1]; in zend_compile_call()
4638 zend_compile_dynamic_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4647 …zend_compile_assert(result, zend_ast_get_list(args_ast), Z_STR(name_node.u.constant), NULL, ast->l… in zend_compile_call()
4649 zend_compile_ns_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4666 zend_compile_assert(result, zend_ast_get_list(args_ast), lcname, fbc, ast->lineno); in zend_compile_call()
4676 zend_compile_dynamic_call(result, &name_node, args_ast, ast->lineno); in zend_compile_call()
4695 zend_compile_call_common(result, args_ast, fbc, ast->lineno); in zend_compile_call()
4700 static void zend_compile_method_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_method_call() argument
4702 zend_ast *obj_ast = ast->child[0]; in zend_compile_method_call()
4703 zend_ast *method_ast = ast->child[1]; in zend_compile_method_call()
4704 zend_ast *args_ast = ast->child[2]; in zend_compile_method_call()
4709 bool nullsafe = ast->kind == ZEND_AST_NULLSAFE_METHOD_CALL; in zend_compile_method_call()
4792 static void zend_compile_static_call(znode *result, zend_ast *ast, uint32_t type) /* {{{ */ in zend_compile_static_call() argument
4794 zend_ast *class_ast = ast->child[0]; in zend_compile_static_call()
4795 zend_ast *method_ast = ast->child[1]; in zend_compile_static_call()
4796 zend_ast *args_ast = ast->child[2]; in zend_compile_static_call()
4864 static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel);
4866 static void zend_compile_new(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_new() argument
4868 zend_ast *class_ast = ast->child[0]; in zend_compile_new()
4869 zend_ast *args_ast = ast->child[1]; in zend_compile_new()
4892 zend_compile_call_common(&ctor_result, args_ast, NULL, ast->lineno); in zend_compile_new()
4897 static void zend_compile_clone(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_clone() argument
4899 zend_ast *obj_ast = ast->child[0]; in zend_compile_clone()
4908 static void zend_compile_global_var(zend_ast *ast) /* {{{ */ in zend_compile_global_var() argument
4910 zend_ast *var_ast = ast->child[0]; in zend_compile_global_var()
4968 static void zend_compile_static_var(zend_ast *ast) /* {{{ */ in zend_compile_static_var() argument
4970 zend_ast *var_ast = ast->child[0]; in zend_compile_static_var()
4988 zend_eval_const_expr(&ast->child[1]); in zend_compile_static_var()
4989 zend_ast *value_ast = ast->child[1]; in zend_compile_static_var()
5023 static void zend_compile_unset(zend_ast *ast) /* {{{ */ in zend_compile_unset() argument
5025 zend_ast *var_ast = ast->child[0]; in zend_compile_unset()
5162 static void zend_compile_return(zend_ast *ast) /* {{{ */ in zend_compile_return() argument
5164 zend_ast *expr_ast = ast->child[0]; in zend_compile_return()
5218 static void zend_compile_echo(zend_ast *ast) /* {{{ */ in zend_compile_echo() argument
5221 zend_ast *expr_ast = ast->child[0]; in zend_compile_echo()
5231 static void zend_compile_throw(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_throw() argument
5233 zend_ast *expr_ast = ast->child[0]; in zend_compile_throw()
5248 static void zend_compile_break_continue(zend_ast *ast) /* {{{ */ in zend_compile_break_continue() argument
5250 zend_ast *depth_ast = ast->child[0]; in zend_compile_break_continue()
5255 ZEND_ASSERT(ast->kind == ZEND_AST_BREAK || ast->kind == ZEND_AST_CONTINUE); in zend_compile_break_continue()
5261 "is no longer supported", ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5267 ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5277 ast->kind == ZEND_AST_BREAK ? "break" : "continue"); in zend_compile_break_continue()
5281 ast->kind == ZEND_AST_BREAK ? "break" : "continue", in zend_compile_break_continue()
5286 if (ast->kind == ZEND_AST_CONTINUE) { in zend_compile_break_continue()
5319 opline = zend_emit_op(NULL, ast->kind == ZEND_AST_BREAK ? ZEND_BRK : ZEND_CONT, NULL, NULL); in zend_compile_break_continue()
5386 static void zend_compile_goto(zend_ast *ast) /* {{{ */ in zend_compile_goto() argument
5388 zend_ast *label_ast = ast->child[0]; in zend_compile_goto()
5403 static void zend_compile_label(zend_ast *ast) /* {{{ */ in zend_compile_label() argument
5405 zend_string *label = zend_ast_get_str(ast->child[0]); in zend_compile_label()
5422 static void zend_compile_while(zend_ast *ast) /* {{{ */ in zend_compile_while() argument
5424 zend_ast *cond_ast = ast->child[0]; in zend_compile_while()
5425 zend_ast *stmt_ast = ast->child[1]; in zend_compile_while()
5446 static void zend_compile_do_while(zend_ast *ast) /* {{{ */ in zend_compile_do_while() argument
5448 zend_ast *stmt_ast = ast->child[0]; in zend_compile_do_while()
5449 zend_ast *cond_ast = ast->child[1]; in zend_compile_do_while()
5468 static void zend_compile_expr_list(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_expr_list() argument
5476 if (!ast) { in zend_compile_expr_list()
5480 list = zend_ast_get_list(ast); in zend_compile_expr_list()
5490 static void zend_compile_for(zend_ast *ast) /* {{{ */ in zend_compile_for() argument
5492 zend_ast *init_ast = ast->child[0]; in zend_compile_for()
5493 zend_ast *cond_ast = ast->child[1]; in zend_compile_for()
5494 zend_ast *loop_ast = ast->child[2]; in zend_compile_for()
5495 zend_ast *stmt_ast = ast->child[3]; in zend_compile_for()
5524 static void zend_compile_foreach(zend_ast *ast) /* {{{ */ in zend_compile_foreach() argument
5526 zend_ast *expr_ast = ast->child[0]; in zend_compile_foreach()
5527 zend_ast *value_ast = ast->child[1]; in zend_compile_foreach()
5528 zend_ast *key_ast = ast->child[2]; in zend_compile_foreach()
5529 zend_ast *stmt_ast = ast->child[3]; in zend_compile_foreach()
5601 CG(zend_lineno) = ast->lineno; in zend_compile_foreach()
5616 static void zend_compile_if(zend_ast *ast) /* {{{ */ in zend_compile_if() argument
5618 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_if()
5724 static void zend_compile_switch(zend_ast *ast) /* {{{ */ in zend_compile_switch() argument
5726 zend_ast *expr_ast = ast->child[0]; in zend_compile_switch()
5727 zend_ast_list *cases = zend_ast_get_list(ast->child[1]); in zend_compile_switch()
5902 static void zend_compile_match(znode *result, zend_ast *ast) in zend_compile_match() argument
5904 zend_ast *expr_ast = ast->child[0]; in zend_compile_match()
5905 zend_ast_list *arms = zend_ast_get_list(ast->child[1]); in zend_compile_match()
6088 static void zend_compile_try(zend_ast *ast) /* {{{ */ in zend_compile_try() argument
6090 zend_ast *try_ast = ast->child[0]; in zend_compile_try()
6091 zend_ast_list *catches = zend_ast_get_list(ast->child[1]); in zend_compile_try()
6092 zend_ast *finally_ast = ast->child[2]; in zend_compile_try()
6263 bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */ in zend_handle_encoding_declaration() argument
6265 zend_ast_list *declares = zend_ast_get_list(ast); in zend_handle_encoding_declaration()
6315 static zend_result zend_is_first_statement(zend_ast *ast, bool allow_nop) /* {{{ */ in zend_is_first_statement() argument
6318 zend_ast_list *file_ast = zend_ast_get_list(CG(ast)); in zend_is_first_statement()
6321 if (file_ast->child[i] == ast) { in zend_is_first_statement()
6336 static void zend_compile_declare(zend_ast *ast) /* {{{ */ in zend_compile_declare() argument
6338 zend_ast_list *declares = zend_ast_get_list(ast->child[0]); in zend_compile_declare()
6339 zend_ast *stmt_ast = ast->child[1]; in zend_compile_declare()
6360 if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { in zend_compile_declare()
6367 if (FAILURE == zend_is_first_statement(ast, /* allow_nop */ 0)) { in zend_compile_declare()
6372 if (ast->child[1] != NULL) { in zend_compile_declare()
6400 static void zend_compile_stmt_list(zend_ast *ast) /* {{{ */ in zend_compile_stmt_list() argument
6402 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_stmt_list()
6435 static zend_type zend_compile_single_typename(zend_ast *ast) in zend_compile_single_typename() argument
6437 ZEND_ASSERT(!(ast->attr & ZEND_TYPE_NULLABLE)); in zend_compile_single_typename()
6438 if (ast->kind == ZEND_AST_TYPE) { in zend_compile_single_typename()
6439 if (ast->attr == IS_STATIC && !CG(active_class_entry) && zend_is_scope_known()) { in zend_compile_single_typename()
6444 return (zend_type) ZEND_TYPE_INIT_CODE(ast->attr, 0, 0); in zend_compile_single_typename()
6446 zend_string *class_name = zend_ast_get_str(ast); in zend_compile_single_typename()
6450 if ((ast->attr & ZEND_NAME_NOT_FQ) != ZEND_NAME_NOT_FQ) { in zend_compile_single_typename()
6467 zend_string *orig_name = zend_ast_get_str(ast); in zend_compile_single_typename()
6468 uint32_t fetch_type = zend_get_class_fetch_type_ast(ast); in zend_compile_single_typename()
6470 class_name = zend_resolve_class_name_ast(ast); in zend_compile_single_typename()
6477 if (ast->attr == ZEND_NAME_NOT_FQ in zend_compile_single_typename()
6585 static zend_type zend_compile_typename(zend_ast *ast, bool force_allow_null);
6588 zend_ast *ast, bool force_allow_null, bool *forced_allow_null) /* {{{ */ in zend_compile_typename_ex() argument
6590 bool is_marked_nullable = ast->attr & ZEND_TYPE_NULLABLE; in zend_compile_typename_ex()
6591 zend_ast_attr orig_ast_attr = ast->attr; in zend_compile_typename_ex()
6595 ast->attr &= ~ZEND_TYPE_NULLABLE; in zend_compile_typename_ex()
6598 if (ast->kind == ZEND_AST_TYPE_UNION) { in zend_compile_typename_ex()
6599 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_typename_ex()
6711 } else if (ast->kind == ZEND_AST_TYPE_INTERSECTION) { in zend_compile_typename_ex()
6712 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_typename_ex()
6778 type = zend_compile_single_typename(ast); in zend_compile_typename_ex()
6808 ast->attr = orig_ast_attr; in zend_compile_typename_ex()
6813 static zend_type zend_compile_typename(zend_ast *ast, bool force_allow_null) in zend_compile_typename() argument
6816 return zend_compile_typename_ex(ast, force_allow_null, &forced_allow_null); in zend_compile_typename()
6835 HashTable **attributes, zend_ast *ast, uint32_t offset, uint32_t target, uint32_t promoted in zend_compile_attributes() argument
6840 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_attributes()
6843 ZEND_ASSERT(ast->kind == ZEND_AST_ATTRIBUTE_LIST); in zend_compile_attributes()
6950 static void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast, uint32_t fallback_return_… in zend_compile_params() argument
6952 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_params()
7278 static void find_implicit_binds_recursively(closure_info *info, zend_ast *ast) { in find_implicit_binds_recursively() argument
7279 if (!ast) { in find_implicit_binds_recursively()
7283 if (ast->kind == ZEND_AST_VAR) { in find_implicit_binds_recursively()
7284 zend_ast *name_ast = ast->child[0]; in find_implicit_binds_recursively()
7302 } else if (zend_ast_is_list(ast)) { in find_implicit_binds_recursively()
7303 zend_ast_list *list = zend_ast_get_list(ast); in find_implicit_binds_recursively()
7308 } else if (ast->kind == ZEND_AST_CLOSURE) { in find_implicit_binds_recursively()
7310 zend_ast_decl *closure_ast = (zend_ast_decl *) ast; in find_implicit_binds_recursively()
7319 } else if (ast->kind == ZEND_AST_ARROW_FUNC) { in find_implicit_binds_recursively()
7321 zend_ast_decl *closure_ast = (zend_ast_decl *) ast; in find_implicit_binds_recursively()
7323 } else if (!zend_ast_is_special(ast)) { in find_implicit_binds_recursively()
7324 uint32_t i, children = zend_ast_get_num_children(ast); in find_implicit_binds_recursively()
7326 find_implicit_binds_recursively(info, ast->child[i]); in find_implicit_binds_recursively()
7374 static void zend_compile_closure_uses(zend_ast *ast) /* {{{ */ in zend_compile_closure_uses() argument
7377 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_closure_uses()
7562 static void zend_compile_func_decl(znode *result, zend_ast *ast, bool toplevel) /* {{{ */ in zend_compile_func_decl() argument
7564 zend_ast_decl *decl = (zend_ast_decl *) ast; in zend_compile_func_decl()
7666 if (ast->kind == ZEND_AST_ARROW_FUNC && decl->child[2]->kind != ZEND_AST_RETURN) { in zend_compile_func_decl()
7714 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
7716 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_prop_decl()
7817 static void zend_compile_prop_group(zend_ast *ast) /* {{{ */ in zend_compile_prop_group() argument
7819 zend_ast *type_ast = ast->child[0]; in zend_compile_prop_group()
7820 zend_ast *prop_ast = ast->child[1]; in zend_compile_prop_group()
7821 zend_ast *attr_ast = ast->child[2]; in zend_compile_prop_group()
7823 zend_compile_prop_decl(prop_ast, type_ast, ast->attr, attr_ast); in zend_compile_prop_group()
7837 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
7839 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_class_const_decl()
7891 static void zend_compile_class_const_group(zend_ast *ast) /* {{{ */ in zend_compile_class_const_group() argument
7893 zend_ast *const_ast = ast->child[0]; in zend_compile_class_const_group()
7894 zend_ast *attr_ast = ast->child[1]; in zend_compile_class_const_group()
7895 zend_ast *type_ast = ast->child[2]; in zend_compile_class_const_group()
7897 zend_compile_class_const_decl(const_ast, ast->attr, attr_ast, type_ast); in zend_compile_class_const_group()
7901 static void zend_compile_method_ref(zend_ast *ast, zend_trait_method_reference *method_ref) /* {{{ … in zend_compile_method_ref() argument
7903 zend_ast *class_ast = ast->child[0]; in zend_compile_method_ref()
7904 zend_ast *method_ast = ast->child[1]; in zend_compile_method_ref()
7916 static void zend_compile_trait_precedence(zend_ast *ast) /* {{{ */ in zend_compile_trait_precedence() argument
7918 zend_ast *method_ref_ast = ast->child[0]; in zend_compile_trait_precedence()
7919 zend_ast *insteadof_ast = ast->child[1]; in zend_compile_trait_precedence()
7937 static void zend_compile_trait_alias(zend_ast *ast) /* {{{ */ in zend_compile_trait_alias() argument
7939 zend_ast *method_ref_ast = ast->child[0]; in zend_compile_trait_alias()
7940 zend_ast *alias_ast = ast->child[1]; in zend_compile_trait_alias()
7941 uint32_t modifiers = ast->attr; in zend_compile_trait_alias()
7961 static void zend_compile_use_trait(zend_ast *ast) /* {{{ */ in zend_compile_use_trait() argument
7963 zend_ast_list *traits = zend_ast_get_list(ast->child[0]); in zend_compile_use_trait()
7964 zend_ast_list *adaptations = ast->child[1] ? zend_ast_get_list(ast->child[1]) : NULL; in zend_compile_use_trait()
8004 static void zend_compile_implements(zend_ast *ast) /* {{{ */ in zend_compile_implements() argument
8006 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_implements()
8065 static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel) /* {{{ */ in zend_compile_class_decl() argument
8067 zend_ast_decl *decl = (zend_ast_decl *) ast; in zend_compile_class_decl()
8166 CG(zend_lineno) = ast->lineno; in zend_compile_class_decl()
8266 static void zend_compile_enum_case(zend_ast *ast) in zend_compile_enum_case() argument
8273 zend_string *enum_case_name = zval_make_interned_string(zend_ast_get_zval(ast->child[0])); in zend_compile_enum_case()
8284 zend_ast *case_value_ast = ast->child[1]; in zend_compile_enum_case()
8286 ast->child[1] = NULL; in zend_compile_enum_case()
8303 zend_ast *doc_comment_ast = ast->child[2]; in zend_compile_enum_case()
8313 zend_ast *attr_ast = ast->child[3]; in zend_compile_enum_case()
8374 static void zend_compile_use(zend_ast *ast) /* {{{ */ in zend_compile_use() argument
8376 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_use()
8379 uint32_t type = ast->attr; in zend_compile_use()
8447 static void zend_compile_group_use(zend_ast *ast) /* {{{ */ in zend_compile_group_use() argument
8450 zend_string *ns = zend_ast_get_str(ast->child[0]); in zend_compile_group_use()
8451 zend_ast_list *list = zend_ast_get_list(ast->child[1]); in zend_compile_group_use()
8461 inline_use->attr = ast->attr ? ast->attr : use->attr; in zend_compile_group_use()
8467 static void zend_compile_const_decl(zend_ast *ast) /* {{{ */ in zend_compile_const_decl() argument
8469 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_const_decl()
8510 static void zend_compile_namespace(zend_ast *ast) /* {{{ */ in zend_compile_namespace() argument
8512 zend_ast *name_ast = ast->child[0]; in zend_compile_namespace()
8513 zend_ast *stmt_ast = ast->child[1]; in zend_compile_namespace()
8538 if (is_first_namespace && FAILURE == zend_is_first_statement(ast, /* allow_nop */ 1)) { in zend_compile_namespace()
8573 static void zend_compile_halt_compiler(zend_ast *ast) /* {{{ */ in zend_compile_halt_compiler() argument
8575 zend_ast *offset_ast = ast->child[0]; in zend_compile_halt_compiler()
8595 static bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */ in zend_try_ct_eval_magic_const() argument
8600 switch (ast->attr) { in zend_try_ct_eval_magic_const()
8602 ZVAL_LONG(zv, ast->lineno); in zend_try_ct_eval_magic_const()
8822 static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ in zend_try_ct_eval_array() argument
8824 zend_ast_list *list = zend_ast_get_list(ast); in zend_try_ct_eval_array()
8829 if (ast->attr == ZEND_ARRAY_SYNTAX_LIST) { in zend_try_ct_eval_array()
8950 static void zend_compile_binary_op(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_binary_op() argument
8952 zend_ast *left_ast = ast->child[0]; in zend_compile_binary_op()
8953 zend_ast *right_ast = ast->child[1]; in zend_compile_binary_op()
8954 uint32_t opcode = ast->attr; in zend_compile_binary_op()
9043 static void zend_compile_greater(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_greater() argument
9045 zend_ast *left_ast = ast->child[0]; in zend_compile_greater()
9046 zend_ast *right_ast = ast->child[1]; in zend_compile_greater()
9049 ZEND_ASSERT(ast->kind == ZEND_AST_GREATER || ast->kind == ZEND_AST_GREATER_EQUAL); in zend_compile_greater()
9056 zend_ct_eval_greater(&result->u.constant, ast->kind, in zend_compile_greater()
9064 ast->kind == ZEND_AST_GREATER ? ZEND_IS_SMALLER : ZEND_IS_SMALLER_OR_EQUAL, in zend_compile_greater()
9069 static void zend_compile_unary_op(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_unary_op() argument
9071 zend_ast *expr_ast = ast->child[0]; in zend_compile_unary_op()
9072 uint32_t opcode = ast->attr; in zend_compile_unary_op()
9088 static void zend_compile_unary_pm(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_unary_pm() argument
9090 zend_ast *expr_ast = ast->child[0]; in zend_compile_unary_pm()
9093 ZEND_ASSERT(ast->kind == ZEND_AST_UNARY_PLUS || ast->kind == ZEND_AST_UNARY_MINUS); in zend_compile_unary_pm()
9098 && zend_try_ct_eval_unary_pm(&result->u.constant, ast->kind, &expr_node.u.constant)) { in zend_compile_unary_pm()
9105 ZVAL_LONG(&right_node.u.constant, (ast->kind == ZEND_AST_UNARY_PLUS) ? 1 : -1); in zend_compile_unary_pm()
9110 static void zend_compile_short_circuiting(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_short_circuiting() argument
9112 zend_ast *left_ast = ast->child[0]; in zend_compile_short_circuiting()
9113 zend_ast *right_ast = ast->child[1]; in zend_compile_short_circuiting()
9119 ZEND_ASSERT(ast->kind == ZEND_AST_AND || ast->kind == ZEND_AST_OR); in zend_compile_short_circuiting()
9124 if ((ast->kind == ZEND_AST_AND && !zend_is_true(&left_node.u.constant)) in zend_compile_short_circuiting()
9125 || (ast->kind == ZEND_AST_OR && zend_is_true(&left_node.u.constant))) { in zend_compile_short_circuiting()
9146 opline_jmpz = zend_emit_op(NULL, ast->kind == ZEND_AST_AND ? ZEND_JMPZ_EX : ZEND_JMPNZ_EX, in zend_compile_short_circuiting()
9165 static void zend_compile_post_incdec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_post_incdec() argument
9167 zend_ast *var_ast = ast->child[0]; in zend_compile_post_incdec()
9168 ZEND_ASSERT(ast->kind == ZEND_AST_POST_INC || ast->kind == ZEND_AST_POST_DEC); in zend_compile_post_incdec()
9174 opline->opcode = ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC_OBJ : ZEND_POST_DEC_OBJ; in zend_compile_post_incdec()
9178 …opline->opcode = ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC_STATIC_PROP : ZEND_POST_DEC_STATIC… in zend_compile_post_incdec()
9186 zend_emit_op_tmp(result, ast->kind == ZEND_AST_POST_INC ? ZEND_POST_INC : ZEND_POST_DEC, in zend_compile_post_incdec()
9192 static void zend_compile_pre_incdec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_pre_incdec() argument
9194 zend_ast *var_ast = ast->child[0]; in zend_compile_pre_incdec()
9195 ZEND_ASSERT(ast->kind == ZEND_AST_PRE_INC || ast->kind == ZEND_AST_PRE_DEC); in zend_compile_pre_incdec()
9201 opline->opcode = ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC_OBJ : ZEND_PRE_DEC_OBJ; in zend_compile_pre_incdec()
9206 …opline->opcode = ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC_STATIC_PROP : ZEND_PRE_DEC_STATIC_PR… in zend_compile_pre_incdec()
9215 zend_emit_op_tmp(result, ast->kind == ZEND_AST_PRE_INC ? ZEND_PRE_INC : ZEND_PRE_DEC, in zend_compile_pre_incdec()
9221 static void zend_compile_cast(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_cast() argument
9223 zend_ast *expr_ast = ast->child[0]; in zend_compile_cast()
9229 if (ast->attr == _IS_BOOL) { in zend_compile_cast()
9231 } else if (ast->attr == IS_NULL) { in zend_compile_cast()
9235 opline->extended_value = ast->attr; in zend_compile_cast()
9240 static void zend_compile_shorthand_conditional(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_shorthand_conditional() argument
9242 zend_ast *cond_ast = ast->child[0]; in zend_compile_shorthand_conditional()
9243 zend_ast *false_ast = ast->child[2]; in zend_compile_shorthand_conditional()
9249 ZEND_ASSERT(ast->child[1] == NULL); in zend_compile_shorthand_conditional()
9265 static void zend_compile_conditional(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_conditional() argument
9267 zend_ast *cond_ast = ast->child[0]; in zend_compile_conditional()
9268 zend_ast *true_ast = ast->child[1]; in zend_compile_conditional()
9269 zend_ast *false_ast = ast->child[2]; in zend_compile_conditional()
9300 zend_compile_shorthand_conditional(result, ast); in zend_compile_conditional()
9325 static void zend_compile_coalesce(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_coalesce() argument
9327 zend_ast *expr_ast = ast->child[0]; in zend_compile_coalesce()
9328 zend_ast *default_ast = ast->child[1]; in zend_compile_coalesce()
9357 static void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_assign_coalesce() argument
9359 zend_ast *var_ast = ast->child[0]; in zend_compile_assign_coalesce()
9360 zend_ast *default_ast = ast->child[1]; in zend_compile_assign_coalesce()
9460 static void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_print() argument
9463 zend_ast *expr_ast = ast->child[0]; in zend_compile_print()
9476 static void zend_compile_exit(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_exit() argument
9478 zend_ast *expr_ast = ast->child[0]; in zend_compile_exit()
9497 static void zend_compile_yield(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_yield() argument
9499 zend_ast *value_ast = ast->child[0]; in zend_compile_yield()
9500 zend_ast *key_ast = ast->child[1]; in zend_compile_yield()
9532 static void zend_compile_yield_from(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_yield_from() argument
9534 zend_ast *expr_ast = ast->child[0]; in zend_compile_yield_from()
9549 static void zend_compile_instanceof(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_instanceof() argument
9551 zend_ast *obj_ast = ast->child[0]; in zend_compile_instanceof()
9552 zend_ast *class_ast = ast->child[1]; in zend_compile_instanceof()
9581 static void zend_compile_include_or_eval(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_include_or_eval() argument
9583 zend_ast *expr_ast = ast->child[0]; in zend_compile_include_or_eval()
9591 opline->extended_value = ast->attr; in zend_compile_include_or_eval()
9597 static void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_isset_or_empty() argument
9599 zend_ast *var_ast = ast->child[0]; in zend_compile_isset_or_empty()
9604 ZEND_ASSERT(ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY); in zend_compile_isset_or_empty()
9607 if (ast->kind == ZEND_AST_EMPTY) { in zend_compile_isset_or_empty()
9621 ZVAL_BOOL(&result->u.constant, ast->kind == ZEND_AST_ISSET); in zend_compile_isset_or_empty()
9637 ZEND_FETCH_GLOBAL | (ast->kind == ZEND_AST_EMPTY ? ZEND_ISEMPTY : 0); in zend_compile_isset_or_empty()
9671 if (!(ast->kind == ZEND_AST_ISSET)) { in zend_compile_isset_or_empty()
9677 static void zend_compile_silence(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_silence() argument
9679 zend_ast *expr_ast = ast->child[0]; in zend_compile_silence()
9696 static void zend_compile_shell_exec(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_shell_exec() argument
9698 zend_ast *expr_ast = ast->child[0]; in zend_compile_shell_exec()
9714 static void zend_compile_array(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_array() argument
9716 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_array()
9721 if (zend_try_ct_eval_array(&result->u.constant, ast)) { in zend_compile_array()
9793 static void zend_compile_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_const() argument
9795 zend_ast *name_ast = ast->child[0]; in zend_compile_const()
9804 zend_ast *last = CG(ast); in zend_compile_const()
9843 static void zend_compile_class_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_class_const() argument
9850 zend_eval_const_expr(&ast->child[0]); in zend_compile_class_const()
9851 zend_eval_const_expr(&ast->child[1]); in zend_compile_class_const()
9853 class_ast = ast->child[0]; in zend_compile_class_const()
9854 const_ast = ast->child[1]; in zend_compile_class_const()
9884 static void zend_compile_class_name(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_class_name() argument
9886 zend_ast *class_ast = ast->child[0]; in zend_compile_class_name()
9947 static void zend_compile_encaps_list(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_encaps_list() argument
9953 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_encaps_list()
10072 static void zend_compile_magic_const(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_magic_const() argument
10076 if (zend_try_ct_eval_magic_const(&result->u.constant, ast)) { in zend_compile_magic_const()
10081 ZEND_ASSERT(ast->attr == T_CLASS_C && in zend_compile_magic_const()
10112 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_class_const() local
10113 zend_ast *class_ast = ast->child[0]; in zend_compile_const_expr_class_const()
10144 ast->attr |= ZEND_FETCH_CLASS_EXCEPTION; in zend_compile_const_expr_class_const()
10150 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_class_name() local
10151 zend_ast *class_ast = ast->child[0]; in zend_compile_const_expr_class_name()
10165 ast->child[0] = NULL; in zend_compile_const_expr_class_name()
10166 ast->attr = fetch_type; in zend_compile_const_expr_class_name()
10178 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_const() local
10179 zend_ast *name_ast = ast->child[0]; in zend_compile_const_expr_const()
10185 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_const_expr_const()
10192 zend_ast_destroy(ast); in zend_compile_const_expr_const()
10197 zend_ast_destroy(ast); in zend_compile_const_expr_const()
10205 zend_ast *ast = *ast_ptr; in zend_compile_const_expr_magic_const() local
10208 ZEND_ASSERT(ast->attr == T_CLASS_C); in zend_compile_const_expr_magic_const()
10210 zend_ast_destroy(ast); in zend_compile_const_expr_magic_const()
10270 zend_ast *ast = *ast_ptr; in zend_compile_const_expr() local
10271 if (ast == NULL || ast->kind == ZEND_AST_ZVAL) { in zend_compile_const_expr()
10275 if (!zend_is_allowed_in_const_expr(ast->kind)) { in zend_compile_const_expr()
10279 switch (ast->kind) { in zend_compile_const_expr()
10304 zend_ast_apply(ast, zend_compile_const_expr, context); in zend_compile_const_expr()
10327 void zend_compile_top_stmt(zend_ast *ast) /* {{{ */ in zend_compile_top_stmt() argument
10329 if (!ast) { in zend_compile_top_stmt()
10333 if (ast->kind == ZEND_AST_STMT_LIST) { in zend_compile_top_stmt()
10334 zend_ast_list *list = zend_ast_get_list(ast); in zend_compile_top_stmt()
10342 if (ast->kind == ZEND_AST_FUNC_DECL) { in zend_compile_top_stmt()
10343 CG(zend_lineno) = ast->lineno; in zend_compile_top_stmt()
10344 zend_compile_func_decl(NULL, ast, 1); in zend_compile_top_stmt()
10345 CG(zend_lineno) = ((zend_ast_decl *) ast)->end_lineno; in zend_compile_top_stmt()
10346 } else if (ast->kind == ZEND_AST_CLASS) { in zend_compile_top_stmt()
10347 CG(zend_lineno) = ast->lineno; in zend_compile_top_stmt()
10348 zend_compile_class_decl(NULL, ast, 1); in zend_compile_top_stmt()
10349 CG(zend_lineno) = ((zend_ast_decl *) ast)->end_lineno; in zend_compile_top_stmt()
10351 zend_compile_stmt(ast); in zend_compile_top_stmt()
10353 if (ast->kind != ZEND_AST_NAMESPACE && ast->kind != ZEND_AST_HALT_COMPILER) { in zend_compile_top_stmt()
10359 static void zend_compile_stmt(zend_ast *ast) /* {{{ */ in zend_compile_stmt() argument
10361 if (!ast) { in zend_compile_stmt()
10365 CG(zend_lineno) = ast->lineno; in zend_compile_stmt()
10367 if ((CG(compiler_options) & ZEND_COMPILE_EXTENDED_STMT) && !zend_is_unticked_stmt(ast)) { in zend_compile_stmt()
10371 switch (ast->kind) { in zend_compile_stmt()
10373 zend_compile_stmt_list(ast); in zend_compile_stmt()
10376 zend_compile_global_var(ast); in zend_compile_stmt()
10379 zend_compile_static_var(ast); in zend_compile_stmt()
10382 zend_compile_unset(ast); in zend_compile_stmt()
10385 zend_compile_return(ast); in zend_compile_stmt()
10388 zend_compile_echo(ast); in zend_compile_stmt()
10392 zend_compile_break_continue(ast); in zend_compile_stmt()
10395 zend_compile_goto(ast); in zend_compile_stmt()
10398 zend_compile_label(ast); in zend_compile_stmt()
10401 zend_compile_while(ast); in zend_compile_stmt()
10404 zend_compile_do_while(ast); in zend_compile_stmt()
10407 zend_compile_for(ast); in zend_compile_stmt()
10410 zend_compile_foreach(ast); in zend_compile_stmt()
10413 zend_compile_if(ast); in zend_compile_stmt()
10416 zend_compile_switch(ast); in zend_compile_stmt()
10419 zend_compile_try(ast); in zend_compile_stmt()
10422 zend_compile_declare(ast); in zend_compile_stmt()
10426 zend_compile_func_decl(NULL, ast, 0); in zend_compile_stmt()
10429 zend_compile_enum_case(ast); in zend_compile_stmt()
10432 zend_compile_prop_group(ast); in zend_compile_stmt()
10435 zend_compile_class_const_group(ast); in zend_compile_stmt()
10438 zend_compile_use_trait(ast); in zend_compile_stmt()
10441 zend_compile_class_decl(NULL, ast, 0); in zend_compile_stmt()
10444 zend_compile_group_use(ast); in zend_compile_stmt()
10447 zend_compile_use(ast); in zend_compile_stmt()
10450 zend_compile_const_decl(ast); in zend_compile_stmt()
10453 zend_compile_namespace(ast); in zend_compile_stmt()
10456 zend_compile_halt_compiler(ast); in zend_compile_stmt()
10460 zend_compile_expr(NULL, ast); in zend_compile_stmt()
10465 zend_compile_expr(&result, ast); in zend_compile_stmt()
10470 if (FC(declarables).ticks && !zend_is_unticked_stmt(ast)) { in zend_compile_stmt()
10476 static void zend_compile_expr_inner(znode *result, zend_ast *ast) /* {{{ */ in zend_compile_expr_inner() argument
10479 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_expr_inner()
10482 zend_compile_memoized_expr(result, ast); in zend_compile_expr_inner()
10486 switch (ast->kind) { in zend_compile_expr_inner()
10488 ZVAL_COPY(&result->u.constant, zend_ast_get_zval(ast)); in zend_compile_expr_inner()
10492 *result = *zend_ast_get_znode(ast); in zend_compile_expr_inner()
10503 zend_compile_var(result, ast, BP_VAR_R, 0); in zend_compile_expr_inner()
10506 zend_compile_assign(result, ast); in zend_compile_expr_inner()
10509 zend_compile_assign_ref(result, ast); in zend_compile_expr_inner()
10512 zend_compile_new(result, ast); in zend_compile_expr_inner()
10515 zend_compile_clone(result, ast); in zend_compile_expr_inner()
10518 zend_compile_compound_assign(result, ast); in zend_compile_expr_inner()
10521 zend_compile_binary_op(result, ast); in zend_compile_expr_inner()
10525 zend_compile_greater(result, ast); in zend_compile_expr_inner()
10528 zend_compile_unary_op(result, ast); in zend_compile_expr_inner()
10532 zend_compile_unary_pm(result, ast); in zend_compile_expr_inner()
10536 zend_compile_short_circuiting(result, ast); in zend_compile_expr_inner()
10540 zend_compile_post_incdec(result, ast); in zend_compile_expr_inner()
10544 zend_compile_pre_incdec(result, ast); in zend_compile_expr_inner()
10547 zend_compile_cast(result, ast); in zend_compile_expr_inner()
10550 zend_compile_conditional(result, ast); in zend_compile_expr_inner()
10553 zend_compile_coalesce(result, ast); in zend_compile_expr_inner()
10556 zend_compile_assign_coalesce(result, ast); in zend_compile_expr_inner()
10559 zend_compile_print(result, ast); in zend_compile_expr_inner()
10562 zend_compile_exit(result, ast); in zend_compile_expr_inner()
10565 zend_compile_yield(result, ast); in zend_compile_expr_inner()
10568 zend_compile_yield_from(result, ast); in zend_compile_expr_inner()
10571 zend_compile_instanceof(result, ast); in zend_compile_expr_inner()
10574 zend_compile_include_or_eval(result, ast); in zend_compile_expr_inner()
10578 zend_compile_isset_or_empty(result, ast); in zend_compile_expr_inner()
10581 zend_compile_silence(result, ast); in zend_compile_expr_inner()
10584 zend_compile_shell_exec(result, ast); in zend_compile_expr_inner()
10587 zend_compile_array(result, ast); in zend_compile_expr_inner()
10590 zend_compile_const(result, ast); in zend_compile_expr_inner()
10593 zend_compile_class_const(result, ast); in zend_compile_expr_inner()
10596 zend_compile_class_name(result, ast); in zend_compile_expr_inner()
10599 zend_compile_encaps_list(result, ast); in zend_compile_expr_inner()
10602 zend_compile_magic_const(result, ast); in zend_compile_expr_inner()
10606 zend_compile_func_decl(result, ast, 0); in zend_compile_expr_inner()
10609 zend_compile_throw(result, ast); in zend_compile_expr_inner()
10612 zend_compile_match(result, ast); in zend_compile_expr_inner()
10620 static void zend_compile_expr(znode *result, zend_ast *ast) in zend_compile_expr() argument
10625 zend_compile_expr_inner(result, ast); in zend_compile_expr()
10626 zend_short_circuiting_commit(checkpoint, result, ast); in zend_compile_expr()
10629 static zend_op *zend_compile_var_inner(znode *result, zend_ast *ast, uint32_t type, bool by_ref) in zend_compile_var_inner() argument
10631 CG(zend_lineno) = zend_ast_get_lineno(ast); in zend_compile_var_inner()
10634 switch (ast->kind) { in zend_compile_var_inner()
10639 zend_compile_memoized_expr(result, ast); in zend_compile_var_inner()
10645 switch (ast->kind) { in zend_compile_var_inner()
10647 return zend_compile_simple_var(result, ast, type, 0); in zend_compile_var_inner()
10649 return zend_compile_dim(result, ast, type, by_ref); in zend_compile_var_inner()
10652 return zend_compile_prop(result, ast, type, by_ref); in zend_compile_var_inner()
10654 return zend_compile_static_prop(result, ast, type, by_ref, 0); in zend_compile_var_inner()
10656 zend_compile_call(result, ast, type); in zend_compile_var_inner()
10660 zend_compile_method_call(result, ast, type); in zend_compile_var_inner()
10663 zend_compile_static_call(result, ast, type); in zend_compile_var_inner()
10666 *result = *zend_ast_get_znode(ast); in zend_compile_var_inner()
10674 zend_compile_expr(result, ast); in zend_compile_var_inner()
10679 static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */ in zend_compile_var() argument
10682 zend_op *opcode = zend_compile_var_inner(result, ast, type, by_ref); in zend_compile_var()
10683 zend_short_circuiting_commit(checkpoint, result, ast); in zend_compile_var()
10687 static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) … in zend_delayed_compile_var() argument
10689 switch (ast->kind) { in zend_delayed_compile_var()
10691 return zend_compile_simple_var(result, ast, type, 1); in zend_delayed_compile_var()
10693 return zend_delayed_compile_dim(result, ast, type, by_ref); in zend_delayed_compile_var()
10697 zend_op *opline = zend_delayed_compile_prop(result, ast, type); in zend_delayed_compile_var()
10704 return zend_compile_static_prop(result, ast, type, by_ref, 1); in zend_delayed_compile_var()
10706 return zend_compile_var(result, ast, type, 0); in zend_delayed_compile_var()
10713 zend_ast *ast = *ast_ptr; in zend_eval_const_expr() local
10716 if (!ast) { in zend_eval_const_expr()
10722 switch (ast->kind) { in zend_eval_const_expr()
10724 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10725 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10726 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10730 if (!zend_try_ct_eval_binary_op(&result, ast->attr, in zend_eval_const_expr()
10731 zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])) in zend_eval_const_expr()
10738 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10739 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10740 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10744 zend_ct_eval_greater(&result, ast->kind, in zend_eval_const_expr()
10745 zend_ast_get_zval(ast->child[0]), zend_ast_get_zval(ast->child[1])); in zend_eval_const_expr()
10751 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10752 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10753 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10757 child0_is_true = zend_is_true(zend_ast_get_zval(ast->child[0])); in zend_eval_const_expr()
10758 if (child0_is_true == (ast->kind == ZEND_AST_OR)) { in zend_eval_const_expr()
10759 ZVAL_BOOL(&result, ast->kind == ZEND_AST_OR); in zend_eval_const_expr()
10763 if (ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10767 child1_is_true = zend_is_true(zend_ast_get_zval(ast->child[1])); in zend_eval_const_expr()
10768 if (ast->kind == ZEND_AST_OR) { in zend_eval_const_expr()
10776 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10777 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10781 if (!zend_try_ct_eval_unary_op(&result, ast->attr, zend_ast_get_zval(ast->child[0]))) { in zend_eval_const_expr()
10787 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10788 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10792 if (!zend_try_ct_eval_unary_pm(&result, ast->kind, zend_ast_get_zval(ast->child[0]))) { in zend_eval_const_expr()
10798 if (ast->child[0]->kind == ZEND_AST_DIM) { in zend_eval_const_expr()
10799 ast->child[0]->attr |= ZEND_DIM_IS; in zend_eval_const_expr()
10801 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10803 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10805 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10809 if (Z_TYPE_P(zend_ast_get_zval(ast->child[0])) == IS_NULL) { in zend_eval_const_expr()
10810 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10811 *ast_ptr = ast->child[1]; in zend_eval_const_expr()
10812 ast->child[1] = NULL; in zend_eval_const_expr()
10813 zend_ast_destroy(ast); in zend_eval_const_expr()
10815 *ast_ptr = ast->child[0]; in zend_eval_const_expr()
10816 ast->child[0] = NULL; in zend_eval_const_expr()
10817 zend_ast_destroy(ast); in zend_eval_const_expr()
10823 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10824 if (ast->child[0]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10826 if (ast->child[1]) { in zend_eval_const_expr()
10827 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10829 zend_eval_const_expr(&ast->child[2]); in zend_eval_const_expr()
10833 child = &ast->child[2 - zend_is_true(zend_ast_get_zval(ast->child[0]))]; in zend_eval_const_expr()
10839 zend_ast_destroy(ast); in zend_eval_const_expr()
10849 if (ast->child[1] == NULL) { in zend_eval_const_expr()
10853 if (ast->attr & ZEND_DIM_ALTERNATIVE_SYNTAX) { in zend_eval_const_expr()
10854 ast->attr &= ~ZEND_DIM_ALTERNATIVE_SYNTAX; /* remove flag to avoid duplicate warning */ in zend_eval_const_expr()
10859 if ((ast->attr & ZEND_DIM_IS) && ast->child[0]->kind == ZEND_AST_DIM) { in zend_eval_const_expr()
10860 ast->child[0]->attr |= ZEND_DIM_IS; in zend_eval_const_expr()
10863 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10864 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10865 if (ast->child[0]->kind != ZEND_AST_ZVAL || ast->child[1]->kind != ZEND_AST_ZVAL) { in zend_eval_const_expr()
10869 container = zend_ast_get_zval(ast->child[0]); in zend_eval_const_expr()
10870 dim = zend_ast_get_zval(ast->child[1]); in zend_eval_const_expr()
10912 if (!zend_try_ct_eval_array(&result, ast)) { in zend_eval_const_expr()
10917 if (!zend_try_ct_eval_magic_const(&result, ast)) { in zend_eval_const_expr()
10923 zend_ast *name_ast = ast->child[0]; in zend_eval_const_expr()
10942 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10943 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10945 if (UNEXPECTED(ast->child[1]->kind != ZEND_AST_ZVAL in zend_eval_const_expr()
10946 || Z_TYPE_P(zend_ast_get_zval(ast->child[1])) != IS_STRING)) { in zend_eval_const_expr()
10950 class_ast = ast->child[0]; in zend_eval_const_expr()
10951 name_ast = ast->child[1]; in zend_eval_const_expr()
10968 zend_ast *class_ast = ast->child[0]; in zend_eval_const_expr()
10980 zend_ast_list *list = zend_ast_get_list(ast); in zend_eval_const_expr()
10987 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10988 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10991 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
10994 zend_eval_const_expr(&ast->child[2]); in zend_eval_const_expr()
10998 zend_eval_const_expr(&ast->child[0]); in zend_eval_const_expr()
10999 zend_eval_const_expr(&ast->child[1]); in zend_eval_const_expr()
11005 zend_ast_destroy(ast); in zend_eval_const_expr()