emit_op(NULL, ZEND_ECHO, &expr_node, NULL TSRMLS_CC);
}
+void zend_compile_throw(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_THROW, &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:
+ case ZEND_ECHO:
zend_compile_echo(ast TSRMLS_CC);
return;
+ case ZEND_THROW:
+ zend_compile_throw(ast TSRMLS_CC);
+ return;
EMPTY_SWITCH_DEFAULT_CASE()
}
}
| T_GLOBAL global_var_list ';'
| T_STATIC static_var_list ';'
| T_ECHO echo_expr_list ';'
- | T_INLINE_HTML { $$.u.ast = zend_ast_create_unary(ZEND_AST_ECHO, AST_ZVAL(&$1)); AS($$); }
+ | T_INLINE_HTML { $$.u.ast = zend_ast_create_unary(ZEND_ECHO, AST_ZVAL(&$1)); AS($$); }
| expr ';' { AC($1); zend_do_free(&$1 TSRMLS_CC); }
| T_UNSET '(' unset_variables ')' ';'
| T_FOREACH '(' variable T_AS
| T_TRY { zend_do_try(&$1 TSRMLS_CC); } '{' inner_statement_list '}'
catch_statement { zend_do_bind_catch(&$1, &$6 TSRMLS_CC); }
finally_statement { zend_do_end_finally(&$1, &$6, &$8 TSRMLS_CC); }
- | T_THROW expr ';' { AC($2); zend_do_throw(&$2 TSRMLS_CC); }
+ | T_THROW expr ';' { $$.u.ast = zend_ast_create_unary(ZEND_THROW, $2.u.ast); AS($$); }
| T_GOTO T_STRING ';' { zend_do_goto(&$2 TSRMLS_CC); }
;
| echo_expr
;
echo_expr:
- expr { $$.u.ast = zend_ast_create_unary(ZEND_AST_ECHO, $1.u.ast); AS($$); }
+ expr { $$.u.ast = zend_ast_create_unary(ZEND_ECHO, $1.u.ast); AS($$); }
;
for_expr: