From de066981b7bc1677079d06023fc58362213a6989 Mon Sep 17 00:00:00 2001 From: vadim Date: Wed, 6 Dec 2017 14:15:32 +0200 Subject: [PATCH] case and default nodes --- node/stmt/case.go | 34 ++++++++++++++++++++++++++++++++++ node/stmt/default.go | 29 +++++++++++++++++++++++++++++ parser/parser.go | 4 ++-- parser/parser.y | 4 ++-- 4 files changed, 67 insertions(+), 4 deletions(-) create mode 100644 node/stmt/case.go create mode 100644 node/stmt/default.go diff --git a/node/stmt/case.go b/node/stmt/case.go new file mode 100644 index 0000000..bf5a807 --- /dev/null +++ b/node/stmt/case.go @@ -0,0 +1,34 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" +) + +type Case struct { + node.SimpleNode + token token.Token + cond node.Node + stmts node.Node +} + +//TODO: stmts myst be []node.Node +func NewCase(token token.Token, cond node.Node, stmts node.Node) node.Node { + return Case{ + node.SimpleNode{Name: "Case", Attributes: make(map[string]string)}, + token, + cond, + stmts, + } +} + +func (n Case) 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) + fmt.Fprintf(out, "\n%vcond:", indent+" ") + n.cond.Print(out, indent+" ") + fmt.Fprintf(out, "\n%vstmts:", indent+" ") + n.stmts.Print(out, indent+" ") +} diff --git a/node/stmt/default.go b/node/stmt/default.go new file mode 100644 index 0000000..acd8444 --- /dev/null +++ b/node/stmt/default.go @@ -0,0 +1,29 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" +) + +type Default struct { + node.SimpleNode + token token.Token + stmts node.Node +} + +func NewDefault(token token.Token, stmts node.Node) node.Node { + return Default{ + node.SimpleNode{Name: "Default", Attributes: make(map[string]string)}, + token, + stmts, + } +} + +func (n Default) 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) + fmt.Fprintf(out, "\n%vstmts:", indent+" ") + n.stmts.Print(out, indent+" ") +} diff --git a/parser/parser.go b/parser/parser.go index d9bbd07..86f25db 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -3234,13 +3234,13 @@ yydefault: yyDollar = yyS[yypt-5 : yypt+1] //line parser/parser.y:549 { - yyVAL.node = yyDollar[1].node.Append(node.NewSimpleNode("Case").Append(node.NewSimpleNode("expr").Append(yyDollar[3].node)).Append(yyDollar[5].node)) + yyVAL.node = yyDollar[1].node.Append(stmt.NewCase(yyDollar[2].token, yyDollar[3].node, yyDollar[5].node)) } case 197: yyDollar = yyS[yypt-4 : yypt+1] //line parser/parser.y:553 { - yyVAL.node = yyDollar[1].node.Append(node.NewSimpleNode("Default").Append(yyDollar[4].node)) + yyVAL.node = yyDollar[1].node.Append(stmt.NewDefault(yyDollar[2].token, yyDollar[4].node)) } case 200: yyDollar = yyS[yypt-1 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index c688c0a..73dda90 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -547,11 +547,11 @@ case_list: /* empty */ { $$ = node.NewSimpleNode("CaseList") } | case_list T_CASE expr case_separator inner_statement_list { - $$ = $1.Append(node.NewSimpleNode("Case").Append(node.NewSimpleNode("expr").Append($3)).Append($5)) + $$ = $1.Append(stmt.NewCase($2, $3, $5)) } | case_list T_DEFAULT case_separator inner_statement_list { - $$ = $1.Append(node.NewSimpleNode("Default").Append($4)) + $$ = $1.Append(stmt.NewDefault($2, $4)) } ;