From 85f7765e7968f29b87cb6983b78b9dfb8eb1d872 Mon Sep 17 00:00:00 2001 From: z7zmey Date: Mon, 18 Dec 2017 18:51:16 +0200 Subject: [PATCH] new node --- node/expr/new.go | 38 ++++++++++++++++++++++++++++++++++++++ parser/parser.go | 4 ++-- parser/parser.y | 4 ++-- 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 node/expr/new.go diff --git a/node/expr/new.go b/node/expr/new.go new file mode 100644 index 0000000..31767e4 --- /dev/null +++ b/node/expr/new.go @@ -0,0 +1,38 @@ +package expr + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" +) + +type New struct { + node.SimpleNode + class node.Node + arguments []node.Node +} + +func NewNew(class node.Node, arguments []node.Node) node.Node { + return New{ + node.SimpleNode{Name: "New", Attributes: make(map[string]string)}, + class, + arguments, + } +} + +func (n New) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + + if n.class != nil { + fmt.Fprintf(out, "\n%vclass:", indent+" ") + n.class.Print(out, indent+" ") + } + + if n.arguments != nil { + fmt.Fprintf(out, "\n%varguments:", indent+" ") + for _, nn := range n.arguments { + nn.Print(out, indent+" ") + } + } +} diff --git a/parser/parser.go b/parser/parser.go index 0658e28..c935dbc 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -3787,13 +3787,13 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:811 { - yyVAL.node = node.NewSimpleNode("New").Append(yyDollar[2].node).Append(yyDollar[3].node) + yyVAL.node = expr.NewNew(yyDollar[2].node, yyDollar[3].node.(node.SimpleNode).Children) } case 292: yyDollar = yyS[yypt-2 : yypt+1] //line parser/parser.y:812 { - yyVAL.node = node.NewSimpleNode("New").Append(yyDollar[2].node) + yyVAL.node = expr.NewNew(yyDollar[2].node, nil) } case 293: yyDollar = yyS[yypt-6 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index d59e99d..37f557f 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -808,8 +808,8 @@ anonymous_class: ; new_expr: - T_NEW class_name_reference ctor_arguments { $$ = node.NewSimpleNode("New").Append($2).Append($3) } - | T_NEW anonymous_class { $$ = node.NewSimpleNode("New").Append($2) } + T_NEW class_name_reference ctor_arguments { $$ = expr.NewNew($2, $3.(node.SimpleNode).Children) } + | T_NEW anonymous_class { $$ = expr.NewNew($2, nil) } ; expr_without_variable: