ZEND_AST_GLOBAL,
ZEND_AST_UNSET,
ZEND_AST_RETURN,
+ ZEND_AST_ECHO,
};
typedef unsigned short zend_ast_kind;
}
/* }}} */
-void zend_do_echo(znode *arg TSRMLS_DC) /* {{{ */
-{
- zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
-
- opline->opcode = ZEND_ECHO;
- SET_NODE(opline->op1, arg);
- SET_UNUSED(opline->op2);
-}
-/* }}} */
-
void zend_do_abstract_method(const znode *function_name, znode *modifiers, const znode *body TSRMLS_DC) /* {{{ */
{
char *method_type;
}
}
+void zend_compile_echo(zend_ast *ast TSRMLS_DC) {
+ zend_ast *expr_ast = ast->child[0];
+
+ znode expr_node;
+ zend_compile_expr(&expr_node, expr_ast TSRMLS_CC);
+
+ emit_op(NULL, ZEND_ECHO, &expr_node, NULL TSRMLS_CC);
+}
+
void zend_compile_binary_op(znode *result, zend_ast *ast TSRMLS_DC) {
zend_ast *left_ast = ast->child[0];
zend_ast *right_ast = ast->child[1];
case ZEND_AST_RETURN:
zend_compile_return(ast TSRMLS_CC);
return;
+ case ZEND_AST_ECHO:
+ zend_compile_echo(ast TSRMLS_CC);
+ return;
EMPTY_SWITCH_DEFAULT_CASE()
}
}
void zend_do_fetch_static_variable(znode *varname, znode *static_assignment, int fetch_type TSRMLS_DC);
void zend_do_fetch_global_variable(znode *varname, const znode *static_assignment, int fetch_type TSRMLS_DC);
-void zend_do_echo(znode *arg TSRMLS_DC);
typedef int (*unary_op_type)(zval *, zval * TSRMLS_DC);
typedef int (*binary_op_type)(zval *, zval *, zval * TSRMLS_DC);
ZEND_API unary_op_type get_unary_op(int opcode);
| T_GLOBAL global_var_list ';'
| T_STATIC static_var_list ';'
| T_ECHO echo_expr_list ';'
- | T_INLINE_HTML { zend_do_echo(&$1 TSRMLS_CC); }
+ | T_INLINE_HTML { $$.u.ast = zend_ast_create_unary(ZEND_AST_ECHO, AST_ZVAL(&$1)); AS($$); }
| expr ';' { AC($1); zend_do_free(&$1 TSRMLS_CC); }
| T_UNSET '(' unset_variables ')' ';'
| T_FOREACH '(' variable T_AS
;
echo_expr_list:
- echo_expr_list ',' expr { AC($3); zend_do_echo(&$3 TSRMLS_CC); }
- | expr { AC($1); zend_do_echo(&$1 TSRMLS_CC); }
+ echo_expr_list ',' echo_expr
+ | echo_expr
+;
+echo_expr:
+ expr { $$.u.ast = zend_ast_create_unary(ZEND_AST_ECHO, $1.u.ast); AS($$); }
;
-
for_expr:
/* empty */ { $$.op_type = IS_CONST; ZVAL_BOOL(&$$.u.constant, 1); }