create ArgumentList node

This commit is contained in:
z7zmey
2018-04-29 19:58:49 +03:00
parent be3bdbfdc0
commit 8fc4c60bfe
28 changed files with 2010 additions and 1832 deletions

View File

@@ -99,11 +99,13 @@ func TestReferenceArgs(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}},
},
},
},
},

View File

@@ -7,15 +7,15 @@ import (
// FunctionCall node
type FunctionCall struct {
Function node.Node
Arguments []node.Node
Function node.Node
ArgumentList *node.ArgumentList
}
// NewFunctionCall node constructor
func NewFunctionCall(Function node.Node, Arguments []node.Node) *FunctionCall {
func NewFunctionCall(Function node.Node, ArgumentList *node.ArgumentList) *FunctionCall {
return &FunctionCall{
Function,
Arguments,
ArgumentList,
}
}
@@ -36,13 +36,9 @@ func (n *FunctionCall) Walk(v walker.Visitor) {
n.Function.Walk(vv)
}
if n.Arguments != nil {
vv := v.GetChildrenVisitor("Arguments")
for _, nn := range n.Arguments {
if nn != nil {
nn.Walk(vv)
}
}
if n.ArgumentList != nil {
vv := v.GetChildrenVisitor("ArgumentList")
n.ArgumentList.Walk(vv)
}
v.LeaveNode(n)

View File

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

View File

@@ -7,15 +7,15 @@ import (
// New node
type New struct {
Class node.Node
Arguments []node.Node
Class node.Node
ArgumentList *node.ArgumentList
}
// NewNew node constructor
func NewNew(Class node.Node, Arguments []node.Node) *New {
func NewNew(Class node.Node, ArgumentList *node.ArgumentList) *New {
return &New{
Class,
Arguments,
ArgumentList,
}
}
@@ -36,13 +36,9 @@ func (n *New) Walk(v walker.Visitor) {
n.Class.Walk(vv)
}
if n.Arguments != nil {
vv := v.GetChildrenVisitor("Arguments")
for _, nn := range n.Arguments {
if nn != nil {
nn.Walk(vv)
}
}
if n.ArgumentList != nil {
vv := v.GetChildrenVisitor("ArgumentList")
n.ArgumentList.Walk(vv)
}
v.LeaveNode(n)

View File

@@ -7,17 +7,17 @@ import (
// StaticCall node
type StaticCall struct {
Class node.Node
Call node.Node
Arguments []node.Node
Class node.Node
Call node.Node
ArgumentList *node.ArgumentList
}
// NewStaticCall node constructor
func NewStaticCall(Class node.Node, Call node.Node, Arguments []node.Node) *StaticCall {
func NewStaticCall(Class node.Node, Call node.Node, ArgumentList *node.ArgumentList) *StaticCall {
return &StaticCall{
Class,
Call,
Arguments,
ArgumentList,
}
}
@@ -43,13 +43,9 @@ func (n *StaticCall) Walk(v walker.Visitor) {
n.Call.Walk(vv)
}
if n.Arguments != nil {
vv := v.GetChildrenVisitor("Arguments")
for _, nn := range n.Arguments {
if nn != nil {
nn.Walk(vv)
}
}
if n.ArgumentList != nil {
vv := v.GetChildrenVisitor("ArgumentList")
n.ArgumentList.Walk(vv)
}
v.LeaveNode(n)

View File

@@ -29,7 +29,7 @@ func TestFunctionCall(t *testing.T) {
&name.NamePart{Value: "foo"},
},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -58,7 +58,7 @@ func TestFunctionCallRelative(t *testing.T) {
&name.NamePart{Value: "foo"},
},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -87,12 +87,14 @@ func TestFunctionFullyQualified(t *testing.T) {
&name.NamePart{Value: "foo"},
},
},
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &expr.ShortArray{
Items: []node.Node{},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &expr.ShortArray{
Items: []node.Node{},
},
},
},
},
@@ -120,12 +122,14 @@ func TestFunctionCallVar(t *testing.T) {
&stmt.Expression{
Expr: &expr.FunctionCall{
Function: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &expr.Yield{
Value: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &expr.Yield{
Value: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
},
},
},
},
@@ -157,13 +161,15 @@ func TestFunctionCallExprArg(t *testing.T) {
&name.NamePart{Value: "ceil"},
},
},
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &binary.Div{
Left: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Right: &scalar.Lnumber{Value: "3"},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{
Variadic: false,
IsReference: false,
Expr: &binary.Div{
Left: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Right: &scalar.Lnumber{Value: "3"},
},
},
},
},

View File

@@ -19,9 +19,9 @@ func TestMethodCall(t *testing.T) {
Stmts: []node.Node{
&stmt.Expression{
Expr: &expr.MethodCall{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
Method: &node.Identifier{Value: "foo"},
Arguments: []node.Node{},
Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
Method: &node.Identifier{Value: "foo"},
ArgumentList: &node.ArgumentList{},
},
},
},

View File

@@ -54,7 +54,7 @@ func TestNewRelative(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -83,7 +83,7 @@ func TestNewFullyQualified(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -109,9 +109,11 @@ func TestNewAnonymous(t *testing.T) {
Expr: &expr.New{
Class: &stmt.Class{
PhpDocComment: "",
Args: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
Stmts: []node.Node{},
},

View File

@@ -26,8 +26,8 @@ func TestStaticCall(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{},
Call: &node.Identifier{Value: "bar"},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -56,8 +56,8 @@ func TestStaticCallRelative(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{},
Call: &node.Identifier{Value: "bar"},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -86,8 +86,8 @@ func TestStaticCallFullyQualified(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{},
Call: &node.Identifier{Value: "bar"},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -116,8 +116,8 @@ func TestStaticCallVar(t *testing.T) {
&name.NamePart{Value: "Foo"},
},
},
Call: &expr.Variable{VarName: &node.Identifier{Value: "bar"}},
Arguments: []node.Node{},
Call: &expr.Variable{VarName: &node.Identifier{Value: "bar"}},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -141,9 +141,9 @@ func TestStaticCallVarVar(t *testing.T) {
Stmts: []node.Node{
&stmt.Expression{
Expr: &expr.StaticCall{
Class: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Call: &expr.Variable{VarName: &node.Identifier{Value: "bar"}},
Arguments: []node.Node{},
Class: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Call: &expr.Variable{VarName: &node.Identifier{Value: "bar"}},
ArgumentList: &node.ArgumentList{},
},
},
},

View File

@@ -146,10 +146,10 @@ var nodesToTest = []struct {
},
{
&expr.FunctionCall{
Function: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
Arguments: []node.Node{&node.Argument{}},
Function: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
ArgumentList: &node.ArgumentList{},
},
[]string{"Function", "Arguments"},
[]string{"Function", "ArgumentList"},
map[string]interface{}{},
},
{
@@ -194,19 +194,19 @@ var nodesToTest = []struct {
},
{
&expr.MethodCall{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
Method: &node.Identifier{Value: "foo"},
Arguments: []node.Node{&node.Argument{}},
Variable: &expr.Variable{VarName: &node.Identifier{Value: "a"}},
Method: &node.Identifier{Value: "foo"},
ArgumentList: &node.ArgumentList{},
},
[]string{"Variable", "Method", "Arguments"},
[]string{"Variable", "Method", "ArgumentList"},
map[string]interface{}{},
},
{
&expr.New{
Class: &name.Name{},
Arguments: []node.Node{&node.Argument{}},
Class: &name.Name{},
ArgumentList: &node.ArgumentList{},
},
[]string{"Class", "Arguments"},
[]string{"Class", "ArgumentList"},
map[string]interface{}{},
},
{
@@ -295,11 +295,11 @@ var nodesToTest = []struct {
},
{
&expr.StaticCall{
Class: &name.Name{},
Call: &node.Identifier{Value: "foo"},
Arguments: []node.Node{&node.Argument{}},
Class: &name.Name{},
Call: &node.Identifier{Value: "foo"},
ArgumentList: &node.ArgumentList{},
},
[]string{"Class", "Call", "Arguments"},
[]string{"Class", "Call", "ArgumentList"},
map[string]interface{}{},
},
{

41
node/n_argument_list.go Normal file
View File

@@ -0,0 +1,41 @@
package node
import (
"github.com/z7zmey/php-parser/walker"
)
// ArgumentList node
type ArgumentList struct {
Arguments []Node
}
// NewArgumentList node constructor
func NewArgumentList(Arguments []Node) *ArgumentList {
return &ArgumentList{
Arguments,
}
}
// Attributes returns node attributes as map
func (n *ArgumentList) Attributes() map[string]interface{} {
return nil
}
// Walk traverses nodes
// Walk is invoked recursively until v.EnterNode returns true
func (n *ArgumentList) Walk(v walker.Visitor) {
if v.EnterNode(n) == false {
return
}
if n.Arguments != nil {
vv := v.GetChildrenVisitor("Arguments")
for _, nn := range n.Arguments {
if nn != nil {
nn.Walk(vv)
}
}
}
v.LeaveNode(n)
}

View File

@@ -38,7 +38,7 @@ func TestName(t *testing.T) {
Function: &name.Name{
Parts: []node.Node{&name.NamePart{Value: "foo"}},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -65,7 +65,7 @@ func TestFullyQualified(t *testing.T) {
Function: &name.FullyQualified{
Parts: []node.Node{&name.NamePart{Value: "foo"}},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},
@@ -92,7 +92,7 @@ func TestRelative(t *testing.T) {
Function: &name.Relative{
Parts: []node.Node{&name.NamePart{Value: "foo"}},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},

View File

@@ -221,9 +221,9 @@ func TestCurlyOpenMethodCall(t *testing.T) {
Parts: []node.Node{
&scalar.EncapsedStringPart{Value: "test "},
&expr.MethodCall{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Method: &node.Identifier{Value: "bar"},
Arguments: []node.Node{},
Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Method: &node.Identifier{Value: "bar"},
ArgumentList: &node.ArgumentList{},
},
},
},

View File

@@ -10,19 +10,19 @@ type Class struct {
PhpDocComment string
ClassName node.Node
Modifiers []node.Node
Args []node.Node
ArgumentList *node.ArgumentList
Extends node.Node
Implements []node.Node
Stmts []node.Node
}
// NewClass node constructor
func NewClass(ClassName node.Node, Modifiers []node.Node, Args []node.Node, Extends node.Node, Implements []node.Node, Stmts []node.Node, PhpDocComment string) *Class {
func NewClass(ClassName node.Node, Modifiers []node.Node, ArgumentList *node.ArgumentList, Extends node.Node, Implements []node.Node, Stmts []node.Node, PhpDocComment string) *Class {
return &Class{
PhpDocComment,
ClassName,
Modifiers,
Args,
ArgumentList,
Extends,
Implements,
Stmts,
@@ -57,13 +57,9 @@ func (n *Class) Walk(v walker.Visitor) {
}
}
if n.Args != nil {
vv := v.GetChildrenVisitor("Args")
for _, nn := range n.Args {
if nn != nil {
nn.Walk(vv)
}
}
if n.ArgumentList != nil {
vv := v.GetChildrenVisitor("ArgumentList")
n.ArgumentList.Walk(vv)
}
if n.Extends != nil {

View File

@@ -2,9 +2,10 @@ package stmt_test
import (
"bytes"
"testing"
"github.com/z7zmey/php-parser/node/expr"
"github.com/z7zmey/php-parser/node/name"
"testing"
"github.com/z7zmey/php-parser/node"
"github.com/z7zmey/php-parser/node/stmt"
@@ -171,7 +172,7 @@ func TestAnonimousClass(t *testing.T) {
&stmt.Expression{
Expr: &expr.New{
Class: &stmt.Class{
Args: []node.Node{},
ArgumentList: &node.ArgumentList{},
Extends: &name.Name{
Parts: []node.Node{
&name.NamePart{Value: "foo"},

View File

@@ -53,7 +53,7 @@ func TestGlobalVars(t *testing.T) {
&name.NamePart{Value: "foo"},
},
},
Arguments: []node.Node{},
ArgumentList: &node.ArgumentList{},
},
},
},

View File

@@ -92,12 +92,12 @@ var nodesToTest = []struct {
PhpDocComment: "/** */",
ClassName: &node.Identifier{},
Modifiers: []node.Node{&stmt.Expression{}},
Args: []node.Node{&stmt.Expression{}},
Extends: &node.Identifier{},
Implements: []node.Node{&stmt.Expression{}},
Stmts: []node.Node{&stmt.Expression{}},
ArgumentList: &node.ArgumentList{},
Extends: &node.Identifier{},
Implements: []node.Node{&stmt.Expression{}},
Stmts: []node.Node{&stmt.Expression{}},
},
[]string{"ClassName", "Modifiers", "Args", "Extends", "Implements", "Stmts"},
[]string{"ClassName", "Modifiers", "ArgumentList", "Extends", "Implements", "Stmts"},
map[string]interface{}{"PhpDocComment": "/** */"},
},
{

View File

@@ -70,18 +70,22 @@ func TestPhp7ArgumentNode(t *testing.T) {
&stmt.Expression{
Expr: &expr.FunctionCall{
Function: &name.Name{Parts: []node.Node{&name.NamePart{Value: "foo"}}},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
&stmt.Expression{
Expr: &expr.FunctionCall{
Function: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -89,9 +93,11 @@ func TestPhp7ArgumentNode(t *testing.T) {
Expr: &expr.MethodCall{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Method: &node.Identifier{Value: "bar"},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -99,9 +105,11 @@ func TestPhp7ArgumentNode(t *testing.T) {
Expr: &expr.StaticCall{
Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "foo"}}},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -109,18 +117,22 @@ func TestPhp7ArgumentNode(t *testing.T) {
Expr: &expr.StaticCall{
Class: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
&stmt.Expression{
Expr: &expr.New{
Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "foo"}}},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -128,9 +140,11 @@ func TestPhp7ArgumentNode(t *testing.T) {
Expr: &expr.New{
Class: &stmt.Class{
PhpDocComment: "/** anonymous class */",
Args: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
Stmts: []node.Node{},
},
@@ -160,18 +174,22 @@ func TestPhp5ArgumentNode(t *testing.T) {
&stmt.Expression{
Expr: &expr.FunctionCall{
Function: &name.Name{Parts: []node.Node{&name.NamePart{Value: "foo"}}},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
&stmt.Expression{
Expr: &expr.FunctionCall{
Function: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -179,9 +197,11 @@ func TestPhp5ArgumentNode(t *testing.T) {
Expr: &expr.MethodCall{
Variable: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Method: &node.Identifier{Value: "bar"},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -189,9 +209,11 @@ func TestPhp5ArgumentNode(t *testing.T) {
Expr: &expr.StaticCall{
Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "foo"}}},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
@@ -199,18 +221,22 @@ func TestPhp5ArgumentNode(t *testing.T) {
Expr: &expr.StaticCall{
Class: &expr.Variable{VarName: &node.Identifier{Value: "foo"}},
Call: &node.Identifier{Value: "bar"},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},
&stmt.Expression{
Expr: &expr.New{
Class: &name.Name{Parts: []node.Node{&name.NamePart{Value: "foo"}}},
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
ArgumentList: &node.ArgumentList{
Arguments: []node.Node{
&node.Argument{Variadic: false, Expr: &expr.Variable{VarName: &node.Identifier{Value: "a"}}},
&node.Argument{Variadic: true, Expr: &expr.Variable{VarName: &node.Identifier{Value: "b"}}},
},
},
},
},

View File

@@ -44,6 +44,15 @@ var nodesToTest = []struct {
[]string{"VariableType", "Variable", "DefaultValue"},
map[string]interface{}{"ByRef": false, "Variadic": true},
},
{
&node.ArgumentList{
Arguments: []node.Node{
&node.Argument{},
},
},
[]string{"Arguments"},
map[string]interface{}{},
},
}
type visitorMock struct {