static inline zend_bool zend_is_variable(zend_ast *ast) /* {{{ */
{
return ast->kind == ZEND_AST_VAR || ast->kind == ZEND_AST_DIM
- || ast->kind == ZEND_AST_PROP || ast->kind == ZEND_AST_STATIC_PROP
- || ast->kind == ZEND_AST_CALL || ast->kind == ZEND_AST_METHOD_CALL
- || ast->kind == ZEND_AST_STATIC_CALL;
+ || ast->kind == ZEND_AST_PROP || ast->kind == ZEND_AST_STATIC_PROP;
}
/* }}} */
}
/* }}} */
+static inline zend_bool zend_is_variable_or_call(zend_ast *ast) /* {{{ */
+{
+ return zend_is_variable(ast) || zend_is_call(ast);
+}
+/* }}} */
+
static inline zend_bool zend_is_unticked_stmt(zend_ast *ast) /* {{{ */
{
return ast->kind == ZEND_AST_STMT_LIST || ast->kind == ZEND_AST_LABEL
ast = ast->child[0];
}
- return zend_is_variable(ast);
+ return zend_is_variable_or_call(ast);
}
/* }}} */
return 0;
}
- while (zend_is_variable(var_ast) && var_ast->kind != ZEND_AST_VAR) {
+ while (zend_is_variable_or_call(var_ast)) {
var_ast = var_ast->child[0];
}
return;
case ZEND_AST_ARRAY:
if (zend_propagate_list_refs(var_ast)) {
- if (!zend_is_variable(expr_ast)) {
+ if (!zend_is_variable_or_call(expr_ast)) {
zend_error_noreturn(E_COMPILE_ERROR,
"Cannot assign reference to non referencable value");
}
}
arg_count++;
- if (zend_is_variable(arg)) {
+ if (zend_is_variable_or_call(arg)) {
if (zend_is_call(arg)) {
zend_compile_var(&arg_node, arg, BP_VAR_R, 0);
if (arg_node.op_type & (IS_CONST|IS_TMP_VAR)) {
if (!expr_ast) {
expr_node.op_type = IS_CONST;
ZVAL_NULL(&expr_node.u.constant);
- } else if (by_ref && zend_is_variable(expr_ast) && !zend_is_call(expr_ast)) {
+ } else if (by_ref && zend_is_variable(expr_ast)) {
zend_compile_var(&expr_node, expr_ast, BP_VAR_W, 1);
} else {
zend_compile_expr(&expr_node, expr_ast);
zend_ast *key_ast = ast->child[2];
zend_ast *stmt_ast = ast->child[3];
zend_bool by_ref = value_ast->kind == ZEND_AST_REF;
- zend_bool is_variable = zend_is_variable(expr_ast) && !zend_is_call(expr_ast)
- && zend_can_write_to_variable(expr_ast);
+ zend_bool is_variable = zend_is_variable(expr_ast) && zend_can_write_to_variable(expr_ast);
znode expr_node, reset_node, value_node, key_node;
zend_op *opline;
}
if (value_ast) {
- if (returns_by_ref && zend_is_variable(value_ast) && !zend_is_call(value_ast)) {
+ if (returns_by_ref && zend_is_variable(value_ast)) {
zend_compile_var(&value_node, value_ast, BP_VAR_W, 1);
} else {
zend_compile_expr(&value_node, value_ast);
ZEND_ASSERT(ast->kind == ZEND_AST_ISSET || ast->kind == ZEND_AST_EMPTY);
- if (!zend_is_variable(var_ast) || zend_is_call(var_ast)) {
+ if (!zend_is_variable(var_ast)) {
if (ast->kind == ZEND_AST_EMPTY) {
/* empty(expr) can be transformed to !expr */
zend_ast *not_ast = zend_ast_create_ex(ZEND_AST_UNARY_OP, ZEND_BOOL_NOT, var_ast);