From c8487b58474c97458cf5198556eaaa206d9bf486 Mon Sep 17 00:00:00 2001 From: z7zmey Date: Wed, 6 Dec 2017 22:55:08 +0200 Subject: [PATCH] continue node --- node/stmt/continue.go | 32 ++++++++++++++++++++++++++++++++ parser/parser.go | 2 +- parser/parser.y | 2 +- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 node/stmt/continue.go diff --git a/node/stmt/continue.go b/node/stmt/continue.go new file mode 100644 index 0000000..b9c4fe2 --- /dev/null +++ b/node/stmt/continue.go @@ -0,0 +1,32 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" +) + +type Continue struct { + node.SimpleNode + token token.Token + expr node.Node +} + +func NewContinue(token token.Token, expr node.Node) node.Node { + return Continue{ + node.SimpleNode{Name: "Continue", Attributes: make(map[string]string)}, + token, + expr, + } +} + +func (n Continue) 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 4060850..cbbc7bf 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -2855,7 +2855,7 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:379 { - yyVAL.node = node.NewSimpleNode("Continue").Append(yyDollar[2].node) + yyVAL.node = stmt.NewContinue(yyDollar[1].token, yyDollar[2].node) } case 138: yyDollar = yyS[yypt-3 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index dd04b26..9fa9bd2 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -376,7 +376,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 ';' { $$ = node.NewSimpleNode("Continue").Append($2) } + | T_CONTINUE optional_expr ';' { $$ = stmt.NewContinue($1, $2) } | T_RETURN optional_expr ';' { $$ = node.NewSimpleNode("Return").Append($2) } | T_GLOBAL global_var_list ';' { $$ = $2; } | T_STATIC static_var_list ';' { $$ = $2; }