diff --git a/node/stmt/goto.go b/node/stmt/goto.go new file mode 100644 index 0000000..9bbca90 --- /dev/null +++ b/node/stmt/goto.go @@ -0,0 +1,27 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" +) + +type Goto struct { + node.SimpleNode + token token.Token + name token.Token +} + +func NewGoto(token token.Token, name token.Token) node.Node { + return Goto{ + node.SimpleNode{Name: "Goto", Attributes: make(map[string]string)}, + token, + name, + } +} + +func (n Goto) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [%d %d] %q", indent, n.Name, n.token.StartLine, n.name.EndLine, n.name.Value) +} diff --git a/parser/parser.go b/parser/parser.go index ef5a62c..5050cf6 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -2930,7 +2930,7 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:390 { - yyVAL.node = node.NewSimpleNode("GoTo").Attribute("Label", yyDollar[2].token.String()) + yyVAL.node = stmt.NewGoto(yyDollar[1].token, yyDollar[2].token) } case 152: yyDollar = yyS[yypt-2 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index d16f70e..687f3bd 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -387,7 +387,7 @@ statement: $$ = stmt.NewTry($1, $3.(node.SimpleNode).Children, $5, $6) } | T_THROW expr ';' { $$ = node.NewSimpleNode("Throw").Append($2) } - | T_GOTO T_STRING ';' { $$ = node.NewSimpleNode("GoTo").Attribute("Label", $2.String()) } + | T_GOTO T_STRING ';' { $$ = stmt.NewGoto($1, $2) } | T_STRING ':' { $$ = node.NewSimpleNode("Label").Attribute("name", $1.String()) } catch_list: