@@ -2081,9 +2081,7 @@ void zend_emit_final_return(int return_one) /* {{{ */
2081
2081
static inline zend_bool zend_is_variable (zend_ast * ast ) /* {{{ */
2082
2082
{
2083
2083
return ast -> kind == ZEND_AST_VAR || ast -> kind == ZEND_AST_DIM
2084
- || ast -> kind == ZEND_AST_PROP || ast -> kind == ZEND_AST_STATIC_PROP
2085
- || ast -> kind == ZEND_AST_CALL || ast -> kind == ZEND_AST_METHOD_CALL
2086
- || ast -> kind == ZEND_AST_STATIC_CALL ;
2084
+ || ast -> kind == ZEND_AST_PROP || ast -> kind == ZEND_AST_STATIC_PROP ;
2087
2085
}
2088
2086
/* }}} */
2089
2087
@@ -2095,6 +2093,12 @@ static inline zend_bool zend_is_call(zend_ast *ast) /* {{{ */
2095
2093
}
2096
2094
/* }}} */
2097
2095
2096
+ static inline zend_bool zend_is_variable_or_call (zend_ast * ast ) /* {{{ */
2097
+ {
2098
+ return zend_is_variable (ast ) || zend_is_call (ast );
2099
+ }
2100
+ /* }}} */
2101
+
2098
2102
static inline zend_bool zend_is_unticked_stmt (zend_ast * ast ) /* {{{ */
2099
2103
{
2100
2104
return ast -> kind == ZEND_AST_STMT_LIST || ast -> kind == ZEND_AST_LABEL
@@ -2109,7 +2113,7 @@ static inline zend_bool zend_can_write_to_variable(zend_ast *ast) /* {{{ */
2109
2113
ast = ast -> child [0 ];
2110
2114
}
2111
2115
2112
- return zend_is_variable (ast );
2116
+ return zend_is_variable_or_call (ast );
2113
2117
}
2114
2118
/* }}} */
2115
2119
@@ -2607,7 +2611,7 @@ zend_bool zend_is_assign_to_self(zend_ast *var_ast, zend_ast *expr_ast) /* {{{ *
2607
2611
return 0 ;
2608
2612
}
2609
2613
2610
- while (zend_is_variable (var_ast ) && var_ast -> kind != ZEND_AST_VAR ) {
2614
+ while (zend_is_variable_or_call (var_ast )) {
2611
2615
var_ast = var_ast -> child [0 ];
2612
2616
}
2613
2617
@@ -2741,7 +2745,7 @@ void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */
2741
2745
return ;
2742
2746
case ZEND_AST_ARRAY :
2743
2747
if (zend_propagate_list_refs (var_ast )) {
2744
- if (!zend_is_variable (expr_ast )) {
2748
+ if (!zend_is_variable_or_call (expr_ast )) {
2745
2749
zend_error_noreturn (E_COMPILE_ERROR ,
2746
2750
"Cannot assign reference to non referencable value" );
2747
2751
}
@@ -2938,7 +2942,7 @@ uint32_t zend_compile_args(zend_ast *ast, zend_function *fbc) /* {{{ */
2938
2942
}
2939
2943
2940
2944
arg_count ++ ;
2941
- if (zend_is_variable (arg )) {
2945
+ if (zend_is_variable_or_call (arg )) {
2942
2946
if (zend_is_call (arg )) {
2943
2947
zend_compile_var (& arg_node , arg , BP_VAR_R , 0 );
2944
2948
if (arg_node .op_type & (IS_CONST |IS_TMP_VAR )) {
@@ -4228,7 +4232,7 @@ void zend_compile_return(zend_ast *ast) /* {{{ */
4228
4232
if (!expr_ast ) {
4229
4233
expr_node .op_type = IS_CONST ;
4230
4234
ZVAL_NULL (& expr_node .u .constant );
4231
- } else if (by_ref && zend_is_variable (expr_ast ) && ! zend_is_call ( expr_ast ) ) {
4235
+ } else if (by_ref && zend_is_variable (expr_ast )) {
4232
4236
zend_compile_var (& expr_node , expr_ast , BP_VAR_W , 1 );
4233
4237
} else {
4234
4238
zend_compile_expr (& expr_node , expr_ast );
@@ -4562,8 +4566,7 @@ void zend_compile_foreach(zend_ast *ast) /* {{{ */
4562
4566
zend_ast * key_ast = ast -> child [2 ];
4563
4567
zend_ast * stmt_ast = ast -> child [3 ];
4564
4568
zend_bool by_ref = value_ast -> kind == ZEND_AST_REF ;
4565
- zend_bool is_variable = zend_is_variable (expr_ast ) && !zend_is_call (expr_ast )
4566
- && zend_can_write_to_variable (expr_ast );
4569
+ zend_bool is_variable = zend_is_variable (expr_ast ) && zend_can_write_to_variable (expr_ast );
4567
4570
4568
4571
znode expr_node , reset_node , value_node , key_node ;
4569
4572
zend_op * opline ;
@@ -7409,7 +7412,7 @@ void zend_compile_yield(znode *result, zend_ast *ast) /* {{{ */
7409
7412
}
7410
7413
7411
7414
if (value_ast ) {
7412
- if (returns_by_ref && zend_is_variable (value_ast ) && ! zend_is_call ( value_ast ) ) {
7415
+ if (returns_by_ref && zend_is_variable (value_ast )) {
7413
7416
zend_compile_var (& value_node , value_ast , BP_VAR_W , 1 );
7414
7417
} else {
7415
7418
zend_compile_expr (& value_node , value_ast );
@@ -7499,7 +7502,7 @@ void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */
7499
7502
7500
7503
ZEND_ASSERT (ast -> kind == ZEND_AST_ISSET || ast -> kind == ZEND_AST_EMPTY );
7501
7504
7502
- if (!zend_is_variable (var_ast ) || zend_is_call ( var_ast ) ) {
7505
+ if (!zend_is_variable (var_ast )) {
7503
7506
if (ast -> kind == ZEND_AST_EMPTY ) {
7504
7507
/* empty(expr) can be transformed to !expr */
7505
7508
zend_ast * not_ast = zend_ast_create_ex (ZEND_AST_UNARY_OP , ZEND_BOOL_NOT , var_ast );
0 commit comments