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

@@ -11,19 +11,19 @@ type Closure struct {
Static bool
PhpDocComment string
Params []node.Node
Uses []node.Node
ClosureUse *ClosureUse
ReturnType node.Node
Stmts []node.Node
}
// NewClosure node constructor
func NewClosure(Params []node.Node, Uses []node.Node, ReturnType node.Node, Stmts []node.Node, Static bool, ReturnsRef bool, PhpDocComment string) *Closure {
func NewClosure(Params []node.Node, ClosureUse *ClosureUse, ReturnType node.Node, Stmts []node.Node, Static bool, ReturnsRef bool, PhpDocComment string) *Closure {
return &Closure{
ReturnsRef,
Static,
PhpDocComment,
Params,
Uses,
ClosureUse,
ReturnType,
Stmts,
}
@@ -54,13 +54,9 @@ func (n *Closure) Walk(v walker.Visitor) {
}
}
if n.Uses != nil {
vv := v.GetChildrenVisitor("Uses")
for _, nn := range n.Uses {
if nn != nil {
nn.Walk(vv)
}
}
if n.ClosureUse != nil {
vv := v.GetChildrenVisitor("ClosureUse")
n.ClosureUse.Walk(vv)
}
if n.ReturnType != nil {

View File

@@ -7,13 +7,13 @@ import (
// ClosureUse node
type ClosureUse struct {
Variable node.Node
Uses []node.Node
}
// NewClosureUse node constructor
func NewClosureUse(Variable node.Node) *ClosureUse {
func NewClosureUse(Uses []node.Node) *ClosureUse {
return &ClosureUse{
Variable,
Uses,
}
}
@@ -29,9 +29,13 @@ func (n *ClosureUse) Walk(v walker.Visitor) {
return
}
if n.Variable != nil {
vv := v.GetChildrenVisitor("Variable")
n.Variable.Walk(vv)
if n.Uses != nil {
vv := v.GetChildrenVisitor("Uses")
for _, nn := range n.Uses {
if nn != nil {
nn.Walk(vv)
}
}
}
v.LeaveNode(n)

View File

@@ -24,7 +24,6 @@ func TestClosure(t *testing.T) {
ReturnsRef: false,
Static: false,
PhpDocComment: "",
Uses: []node.Node{},
Stmts: []node.Node{},
},
},
@@ -64,12 +63,10 @@ func TestClosureUse(t *testing.T) {
Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
},
},
Uses: []node.Node{
&expr.ClosureUse{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "c"}},
},
&expr.ClosureUse{
Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "d"}}},
ClosureUse: &expr.ClosureUse{
Uses: []node.Node{
&expr.Variable{VarName: &node.Identifier{Value: "c"}},
&expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "d"}}},
},
},
Stmts: []node.Node{},
@@ -111,12 +108,10 @@ func TestClosureUse2(t *testing.T) {
Variable: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
},
},
Uses: []node.Node{
&expr.ClosureUse{
Variable: &expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "c"}}},
},
&expr.ClosureUse{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "d"}},
ClosureUse: &expr.ClosureUse{
Uses: []node.Node{
&expr.Reference{Variable: &expr.Variable{VarName: &node.Identifier{Value: "c"}}},
&expr.Variable{VarName: &node.Identifier{Value: "d"}},
},
},
Stmts: []node.Node{},
@@ -146,7 +141,6 @@ func TestClosureReturnType(t *testing.T) {
ReturnsRef: false,
Static: false,
PhpDocComment: "",
Uses: []node.Node{},
ReturnType: &name.Name{
Parts: []node.Node{&name.NamePart{Value: "void"}},
},

View File

@@ -81,9 +81,11 @@ var nodesToTest = []struct {
},
{
&expr.ClosureUse{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
Uses: []node.Node{
&expr.Variable{VarName: &node.Identifier{Value: "a"}},
},
},
[]string{"Variable"},
[]string{"Uses"},
map[string]interface{}{},
},
{
@@ -92,11 +94,11 @@ var nodesToTest = []struct {
Static: false,
PhpDocComment: "",
Params: []node.Node{&node.Parameter{}},
Uses: []node.Node{&expr.ClosureUse{}},
ClosureUse: &expr.ClosureUse{},
ReturnType: &name.Name{},
Stmts: []node.Node{&stmt.Nop{}},
},
[]string{"Params", "Uses", "ReturnType", "Stmts"},
[]string{"Params", "ClosureUse", "ReturnType", "Stmts"},
map[string]interface{}{"ReturnsRef": true, "Static": false, "PhpDocComment": ""},
},
{