From 5fe3c4071d0f39638e1f37fcfd4ead3c21a70920 Mon Sep 17 00:00:00 2001 From: vadim Date: Fri, 8 Dec 2017 17:19:33 +0200 Subject: [PATCH] return node --- node/stmt/return.go | 32 ++++++++++++++++++++++++++++++++ parser/parser.go | 2 +- parser/parser.y | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 node/stmt/return.go diff --git a/node/stmt/return.go b/node/stmt/return.go new file mode 100644 index 0000000..99f0afa --- /dev/null +++ b/node/stmt/return.go @@ -0,0 +1,32 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" +) + +type Return struct { + node.SimpleNode + token token.Token + expr node.Node +} + +func NewReturn(token token.Token, expr node.Node) node.Node { + return Return{ + node.SimpleNode{Name: "Return", Attributes: make(map[string]string)}, + token, + expr, + } +} + +func (n Return) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [%d %d] %q", indent, n.Name, n.token.StartLine, n.token.EndLine, n.token.Value) + + if n.expr != nil { + fmt.Fprintf(out, "\n%vexpr:", indent+" ") + n.expr.Print(out, indent+" ") + } +} diff --git a/parser/parser.go b/parser/parser.go index 43cf517..ba71479 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -2860,7 +2860,7 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:384 { - yyVAL.node = node.NewSimpleNode("Return").Append(yyDollar[2].node) + yyVAL.node = stmt.NewReturn(yyDollar[1].token, yyDollar[2].node) } case 139: yyDollar = yyS[yypt-3 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index 7b0a7d3..e4612c0 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -381,7 +381,7 @@ statement: | T_SWITCH '(' expr ')' switch_case_list { $$ = node.NewSimpleNode("Switch").Append(node.NewSimpleNode("expr").Append($3)).Append($5); } | T_BREAK optional_expr ';' { $$ = stmt.NewBreak($1, $2) } | T_CONTINUE optional_expr ';' { $$ = stmt.NewContinue($1, $2) } - | T_RETURN optional_expr ';' { $$ = node.NewSimpleNode("Return").Append($2) } + | T_RETURN optional_expr ';' { $$ = stmt.NewReturn($1, $2) } | T_GLOBAL global_var_list ';' { $$ = stmt.NewGlobal($1, $2) } | T_STATIC static_var_list ';' { $$ = $2; } | T_ECHO echo_expr_list ';' { $$ = stmt.NewEcho($1, $2) }