nodes try catch finally

This commit is contained in:
vadim
2017-12-06 14:47:17 +02:00
parent 059275b3bf
commit 6fd73af4a1
5 changed files with 507 additions and 439 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -194,7 +194,7 @@ func Parse(src io.Reader, fName string) node.Node {
%type <node> encaps_var encaps_var_offset isset_variables
%type <node> top_statement_list use_declarations const_list inner_statement_list if_stmt
%type <node> alt_if_stmt for_exprs switch_case_list global_var_list static_var_list
%type <node> echo_expr_list unset_variables catch_list parameter_list class_statement_list
%type <node> echo_expr_list unset_variables parameter_list class_statement_list
%type <node> implements_list case_list if_stmt_without_else
%type <node> non_empty_parameter_list argument_list non_empty_argument_list property_list
%type <node> class_const_list class_const_decl name_list trait_adaptations method_body non_empty_for_exprs
@@ -208,7 +208,7 @@ func Parse(src io.Reader, fName string) node.Node {
%type <node> method_modifiers non_empty_member_modifiers member_modifier
%type <node> class_modifiers use_type
%type <list> encaps_list backticks_expr namespace_name catch_name_list
%type <list> encaps_list backticks_expr namespace_name catch_name_list catch_list
%%
@@ -400,19 +400,16 @@ statement:
| ';' /* empty statement */ { $$ = node.NewSimpleNode(""); }
| T_TRY '{' inner_statement_list '}' catch_list finally_statement
{
$$ = node.NewSimpleNode("Try").
Append($3).
Append($5).
Append($6);
$$ = stmt.NewTry($1, $3, $5, $6)
}
| T_THROW expr ';' { $$ = node.NewSimpleNode("Throw").Append($2) }
| T_GOTO T_STRING ';' { $$ = node.NewSimpleNode("GoTo").Attribute("Label", $2.String()) }
| T_STRING ':' { $$ = node.NewSimpleNode("Label").Attribute("name", $1.String()) }
catch_list:
/* empty */ { $$ = node.NewSimpleNode("CatchList") }
/* empty */ { $$ = []node.Node{} }
| catch_list T_CATCH '(' catch_name_list T_VARIABLE ')' '{' inner_statement_list '}'
{ $$ = $1.Append(stmt.NewCatch($2, $4, node.NewSimpleNode("TODO: handle variable"), $8)) }
{ $$ = append($1, stmt.NewCatch($2, $4, node.NewSimpleNode("TODO: handle variable"), $8)) }
;
catch_name_list:
name { $$ = []node.Node{$1} }
@@ -421,7 +418,7 @@ catch_name_list:
finally_statement:
/* empty */ { $$ = node.NewSimpleNode(""); }
| T_FINALLY '{' inner_statement_list '}' { $$ = node.NewSimpleNode("Finnaly").Append($3) }
| T_FINALLY '{' inner_statement_list '}' { $$ = stmt.NewFinally($1, $3) }
;
unset_variables: