changing ClosureUse node purpose

Now ClosureUse is a container node for variable and reference nodes
This commit is contained in:
z7zmey
2018-05-25 09:38:44 +03:00
parent ec0ef26bd6
commit 6ccca996a8
13 changed files with 1225 additions and 1252 deletions

View File

@@ -1006,7 +1006,10 @@ func (p *Printer) printExprClone(n node.Node) {
func (p *Printer) printExprClosureUse(n node.Node) {
nn := n.(*expr.ClosureUse)
p.Print(nn.Variable)
io.WriteString(p.w, "use (")
p.joinPrint(", ", nn.Uses)
io.WriteString(p.w, ")")
}
func (p *Printer) printExprClosure(n node.Node) {
@@ -1026,10 +1029,9 @@ func (p *Printer) printExprClosure(n node.Node) {
p.joinPrint(", ", nn.Params)
io.WriteString(p.w, ")")
if nn.Uses != nil {
io.WriteString(p.w, " use (")
p.joinPrint(", ", nn.Uses)
io.WriteString(p.w, ")")
if nn.ClosureUse != nil {
io.WriteString(p.w, " ")
p.Print(nn.ClosureUse)
}
if nn.ReturnType != nil {

View File

@@ -1371,10 +1371,13 @@ func TestPrintExprClosureUse(t *testing.T) {
p := printer.NewPrinter(o, " ")
p.Print(&expr.ClosureUse{
Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}}},
Uses: []node.Node{
&expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}}},
&expr.Variable{VarName: &node.Identifier{Value: "bar"}},
},
})
expected := `&$var`
expected := `use (&$foo, $bar)`
actual := o.String()
if expected != actual {
@@ -1398,12 +1401,10 @@ func TestPrintExprClosure(t *testing.T) {
Variable: &expr.Variable{VarName: &node.Identifier{Value: "var"}},
},
},
Uses: []node.Node{
&expr.ClosureUse{
Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
},
&expr.ClosureUse{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
ClosureUse: &expr.ClosureUse{
Uses: []node.Node{
&expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&expr.Variable{VarName: &node.Identifier{Value: "b"}},
},
},
ReturnType: &name.FullyQualified{Parts: []node.Node{&name.NamePart{Value: "Foo"}}},