From b424e82812fb1b84424426f11de4687f15613b65 Mon Sep 17 00:00:00 2001 From: vadim Date: Sat, 9 Dec 2017 13:41:08 +0200 Subject: [PATCH] use node --- node/stmt/use.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ parser/parser.go | 6 +++--- parser/parser.y | 6 +++--- 3 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 node/stmt/use.go diff --git a/node/stmt/use.go b/node/stmt/use.go new file mode 100644 index 0000000..952d47b --- /dev/null +++ b/node/stmt/use.go @@ -0,0 +1,48 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/token" +) + +type Use struct { + node.SimpleNode + useType node.Node + name node.Node + alias token.TokenInterface +} + +func NewUse(useType node.Node, name node.Node, alias token.TokenInterface) node.Node { + return Use{ + node.SimpleNode{Name: "Use", Attributes: make(map[string]string)}, + useType, + name, + alias, + } +} + +func (n Use) SetType(useType node.Node) node.Node { + n.useType = useType + return n +} + +func (n Use) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + + if n.useType != nil { + fmt.Fprintf(out, "\n%vtype: %q", indent+" ", n.alias.GetValue()) + n.useType.Print(out, indent+" ") + } + + if n.name != nil { + fmt.Fprintf(out, "\n%vname:", indent+" ") + n.name.Print(out, indent+" ") + } + + if n.alias != nil { + fmt.Fprintf(out, "\n%valias: %q", indent+" ", n.alias.GetValue()) + } +} diff --git a/parser/parser.go b/parser/parser.go index 11d8e39..14c6dcc 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -2714,19 +2714,19 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] //line parser/parser.y:338 { - yyVAL.node = yyDollar[2].node.Append(yyDollar[1].node) + yyVAL.node = yyDollar[2].node.(stmt.Use).SetType(yyDollar[1].node) } case 115: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:342 { - yyVAL.node = node.NewSimpleNode("UseElem").Append(name.NewName(yyDollar[1].list)) + yyVAL.node = stmt.NewUse(nil, name.NewName(yyDollar[1].list), nil) } case 116: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:343 { - yyVAL.node = node.NewSimpleNode("UseElem").Append(name.NewName(yyDollar[1].list)).Append(node.NewSimpleNode("as").Attribute("value", yyDollar[3].token.String())) + yyVAL.node = stmt.NewUse(nil, name.NewName(yyDollar[1].list), yyDollar[3].token) } case 117: yyDollar = yyS[yypt-1 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index 1f5fae4..85ecd1c 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -335,12 +335,12 @@ use_declarations: inline_use_declaration: unprefixed_use_declaration { $$ = $1; } - | use_type unprefixed_use_declaration { $$ = $2.Append($1) } + | use_type unprefixed_use_declaration { $$ = $2.(stmt.Use).SetType($1) } ; unprefixed_use_declaration: - namespace_name { $$ = node.NewSimpleNode("UseElem").Append(name.NewName($1)); } - | namespace_name T_AS T_STRING { $$ = node.NewSimpleNode("UseElem").Append(name.NewName($1)).Append(node.NewSimpleNode("as").Attribute("value", $3.String())); } + namespace_name { $$ = stmt.NewUse(nil, name.NewName($1), nil) } + | namespace_name T_AS T_STRING { $$ = stmt.NewUse(nil, name.NewName($1), $3) } ; use_declaration: