From 0751859395b72d13e8a41dbd6d1e489a73f64dee Mon Sep 17 00:00:00 2001 From: z7zmey Date: Mon, 18 Dec 2017 20:09:34 +0200 Subject: [PATCH] static_call node --- node/expr/static_call.go | 45 ++++++++++++++++++++++++++++++++++++++++ parser/parser.go | 4 ++-- parser/parser.y | 4 ++-- 3 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 node/expr/static_call.go diff --git a/node/expr/static_call.go b/node/expr/static_call.go new file mode 100644 index 0000000..6a37277 --- /dev/null +++ b/node/expr/static_call.go @@ -0,0 +1,45 @@ +package expr + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" +) + +type StaticCall struct { + node.SimpleNode + class node.Node + name node.Node + arguments []node.Node +} + +func NewStaticCall(class node.Node, name node.Node, arguments []node.Node) node.Node { + return StaticCall{ + node.SimpleNode{Name: "StaticCall", Attributes: make(map[string]string)}, + class, + name, + arguments, + } +} + +func (n StaticCall) 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.name != nil { + fmt.Fprintf(out, "\n%vname:", indent+" ") + n.name.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 b5e6249..1b294bc 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -4311,13 +4311,13 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] //line parser/parser.y:931 { - yyVAL.node = node.NewSimpleNode("StaticCall").Append(yyDollar[1].node).Append(yyDollar[3].node).Append(yyDollar[4].node) + yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(node.SimpleNode).Children) } case 379: yyDollar = yyS[yypt-4 : yypt+1] //line parser/parser.y:933 { - yyVAL.node = node.NewSimpleNode("StaticCall").Append(yyDollar[1].node).Append(yyDollar[3].node).Append(yyDollar[4].node) + yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].node.(node.SimpleNode).Children) } case 380: yyDollar = yyS[yypt-2 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index af33c79..9946e7d 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -928,9 +928,9 @@ lexical_var: function_call: name argument_list { $$ = expr.NewFunctionCall($1, $2.(node.SimpleNode).Children) } | class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list - { $$ = node.NewSimpleNode("StaticCall").Append($1).Append($3).Append($4) } + { $$ = expr.NewStaticCall($1, $3, $4.(node.SimpleNode).Children) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list - { $$ = node.NewSimpleNode("StaticCall").Append($1).Append($3).Append($4) } + { $$ = expr.NewStaticCall($1, $3, $4.(node.SimpleNode).Children) } | callable_expr argument_list { $$ = expr.NewFunctionCall($1, $2.(node.SimpleNode).Children) } ;