[refactoring] parameters: new node structure
This commit is contained in:
@@ -20,6 +20,8 @@ type Visitor interface {
|
||||
type NodeVisitor interface {
|
||||
Root(n *Root)
|
||||
Nullable(n *Nullable)
|
||||
Reference(n *Reference)
|
||||
Variadic(n *Variadic)
|
||||
Parameter(n *Parameter)
|
||||
Identifier(n *Identifier)
|
||||
ArgumentList(n *ArgumentList)
|
||||
|
||||
@@ -36,11 +36,29 @@ func (n *Nullable) Accept(v NodeVisitor) {
|
||||
v.Nullable(n)
|
||||
}
|
||||
|
||||
// Reference node
|
||||
type Reference struct {
|
||||
Node
|
||||
Var Vertex
|
||||
}
|
||||
|
||||
func (n *Reference) Accept(v NodeVisitor) {
|
||||
v.Reference(n)
|
||||
}
|
||||
|
||||
// Variadic node
|
||||
type Variadic struct {
|
||||
Node
|
||||
Var Vertex
|
||||
}
|
||||
|
||||
func (n *Variadic) Accept(v NodeVisitor) {
|
||||
v.Variadic(n)
|
||||
}
|
||||
|
||||
// Parameter node
|
||||
type Parameter struct {
|
||||
Node
|
||||
ByRef bool
|
||||
Variadic bool
|
||||
Type Vertex
|
||||
Var Vertex
|
||||
DefaultValue Vertex
|
||||
|
||||
@@ -40,6 +40,30 @@ func (t *DFS) Traverse(n ast.Vertex) {
|
||||
t.Traverse(nn.Expr)
|
||||
t.visitor.Leave("Expr", true)
|
||||
}
|
||||
case *ast.Reference:
|
||||
if nn == nil {
|
||||
return
|
||||
}
|
||||
if !t.visitor.EnterNode(nn) {
|
||||
return
|
||||
}
|
||||
if nn.Var != nil {
|
||||
t.visitor.Enter("Var", true)
|
||||
t.Traverse(nn.Var)
|
||||
t.visitor.Leave("Var", true)
|
||||
}
|
||||
case *ast.Variadic:
|
||||
if nn == nil {
|
||||
return
|
||||
}
|
||||
if !t.visitor.EnterNode(nn) {
|
||||
return
|
||||
}
|
||||
if nn.Var != nil {
|
||||
t.visitor.Enter("Var", true)
|
||||
t.Traverse(nn.Var)
|
||||
t.visitor.Leave("Var", true)
|
||||
}
|
||||
case *ast.Parameter:
|
||||
if nn == nil {
|
||||
return
|
||||
|
||||
@@ -33,10 +33,18 @@ func (v *Dump) print(str string) {
|
||||
}
|
||||
|
||||
func (v *Dump) printIndent(indentDepth int) {
|
||||
if indentDepth < 0 {
|
||||
indentDepth = 0
|
||||
}
|
||||
|
||||
v.print(strings.Repeat("\t", indentDepth))
|
||||
}
|
||||
|
||||
func (v *Dump) printIndentIfNotSingle(indentDepth int) {
|
||||
if indentDepth < 0 {
|
||||
indentDepth = 0
|
||||
}
|
||||
|
||||
if !v.stack[v.depth-1].singleNode {
|
||||
v.print(strings.Repeat("\t", indentDepth))
|
||||
}
|
||||
@@ -173,20 +181,22 @@ func (v *Dump) Nullable(n *ast.Nullable) {
|
||||
v.printNode(n.GetNode())
|
||||
}
|
||||
|
||||
func (v *Dump) Reference(n *ast.Reference) {
|
||||
v.printIndentIfNotSingle(v.indent - 1)
|
||||
v.print("&ast.Reference{\n")
|
||||
v.printNode(n.GetNode())
|
||||
}
|
||||
|
||||
func (v *Dump) Variadic(n *ast.Variadic) {
|
||||
v.printIndentIfNotSingle(v.indent - 1)
|
||||
v.print("&ast.Variadic{\n")
|
||||
v.printNode(n.GetNode())
|
||||
}
|
||||
|
||||
func (v *Dump) Parameter(n *ast.Parameter) {
|
||||
v.printIndent(v.indent - 1)
|
||||
v.print("&ast.Parameter{\n")
|
||||
v.printNode(n.GetNode())
|
||||
|
||||
if n.ByRef {
|
||||
v.printIndent(v.indent)
|
||||
v.print("ByRef: true,\n")
|
||||
}
|
||||
|
||||
if n.Variadic {
|
||||
v.printIndent(v.indent)
|
||||
v.print("Variadic: true,\n")
|
||||
}
|
||||
}
|
||||
|
||||
func (v *Dump) Identifier(n *ast.Identifier) {
|
||||
|
||||
@@ -30,8 +30,7 @@ func ExampleDump() {
|
||||
Stmts: []ast.Vertex{
|
||||
&ast.Identifier{},
|
||||
&ast.Parameter{
|
||||
Variadic: true,
|
||||
Var: &ast.ExprVariable{},
|
||||
Var: &ast.ExprVariable{},
|
||||
},
|
||||
&ast.StmtInlineHtml{
|
||||
Value: []byte("foo"),
|
||||
@@ -64,7 +63,6 @@ func ExampleDump() {
|
||||
// Value: []byte(""),
|
||||
// },
|
||||
// &ast.Parameter{
|
||||
// Variadic: true,
|
||||
// Var: &ast.ExprVariable{
|
||||
// },
|
||||
// },
|
||||
|
||||
@@ -502,10 +502,8 @@ func TestResolveFunctionName(t *testing.T) {
|
||||
FunctionName: &ast.Identifier{Value: []byte("A")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: false,
|
||||
Variadic: false,
|
||||
Type: nameAB,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}},
|
||||
Type: nameAB,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}},
|
||||
},
|
||||
},
|
||||
ReturnType: &ast.Nullable{Expr: nameBC},
|
||||
@@ -540,10 +538,8 @@ func TestResolveMethodName(t *testing.T) {
|
||||
MethodName: &ast.Identifier{Value: []byte("A")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: false,
|
||||
Variadic: false,
|
||||
Type: nameAB,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}},
|
||||
Type: nameAB,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}},
|
||||
},
|
||||
},
|
||||
ReturnType: &ast.Nullable{Expr: nameBC},
|
||||
@@ -573,10 +569,8 @@ func TestResolveClosureName(t *testing.T) {
|
||||
Static: false,
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: false,
|
||||
Variadic: false,
|
||||
Type: nameAB,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}},
|
||||
Type: nameAB,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("foo")}},
|
||||
},
|
||||
},
|
||||
ClosureUse: nil,
|
||||
|
||||
@@ -30,6 +30,14 @@ func (v *Null) Nullable(_ *ast.Nullable) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
func (v *Null) Reference(_ *ast.Reference) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
func (v *Null) Variadic(_ *ast.Variadic) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
func (v *Null) Parameter(_ *ast.Parameter) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
@@ -64,6 +64,10 @@ func (p *PrettyPrinter) printNode(n ast.Vertex) {
|
||||
p.printNodeRoot(n)
|
||||
case *ast.Identifier:
|
||||
p.printNodeIdentifier(n)
|
||||
case *ast.Reference:
|
||||
p.printNodeReference(n)
|
||||
case *ast.Variadic:
|
||||
p.printNodeVariadic(n)
|
||||
case *ast.Parameter:
|
||||
p.printNodeParameter(n)
|
||||
case *ast.Nullable:
|
||||
@@ -434,6 +438,20 @@ func (p *PrettyPrinter) printNodeIdentifier(n ast.Vertex) {
|
||||
io.WriteString(p.w, v)
|
||||
}
|
||||
|
||||
func (p *PrettyPrinter) printNodeReference(n ast.Vertex) {
|
||||
nn := n.(*ast.Reference)
|
||||
|
||||
io.WriteString(p.w, "&")
|
||||
p.Print(nn.Var)
|
||||
}
|
||||
|
||||
func (p *PrettyPrinter) printNodeVariadic(n ast.Vertex) {
|
||||
nn := n.(*ast.Variadic)
|
||||
|
||||
io.WriteString(p.w, "...")
|
||||
p.Print(nn.Var)
|
||||
}
|
||||
|
||||
func (p *PrettyPrinter) printNodeParameter(n ast.Vertex) {
|
||||
nn := n.(*ast.Parameter)
|
||||
|
||||
@@ -442,14 +460,6 @@ func (p *PrettyPrinter) printNodeParameter(n ast.Vertex) {
|
||||
io.WriteString(p.w, " ")
|
||||
}
|
||||
|
||||
if nn.ByRef {
|
||||
io.WriteString(p.w, "&")
|
||||
}
|
||||
|
||||
if nn.Variadic {
|
||||
io.WriteString(p.w, "...")
|
||||
}
|
||||
|
||||
p.Print(nn.Var)
|
||||
|
||||
if nn.DefaultValue != nil {
|
||||
|
||||
@@ -119,10 +119,14 @@ func TestPrintParameter(t *testing.T) {
|
||||
|
||||
p := printer.NewPrettyPrinter(o, " ")
|
||||
p.Print(&ast.Parameter{
|
||||
ByRef: false,
|
||||
Variadic: true,
|
||||
Type: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}},
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}},
|
||||
Type: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}},
|
||||
Var: &ast.Variadic{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{
|
||||
Value: []byte("var"),
|
||||
},
|
||||
},
|
||||
},
|
||||
DefaultValue: &ast.ScalarString{Value: []byte("'default'")},
|
||||
})
|
||||
|
||||
@@ -140,10 +144,8 @@ func TestPrintNullable(t *testing.T) {
|
||||
p := printer.NewPrettyPrinter(o, " ")
|
||||
p.Print(&ast.Nullable{
|
||||
Expr: &ast.Parameter{
|
||||
ByRef: false,
|
||||
Variadic: true,
|
||||
Type: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}},
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}},
|
||||
Var: &ast.Variadic{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}},
|
||||
DefaultValue: &ast.ScalarString{Value: []byte("'default'")},
|
||||
},
|
||||
})
|
||||
@@ -1389,9 +1391,7 @@ func TestPrintExprClosure(t *testing.T) {
|
||||
ReturnsRef: true,
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Variadic: false,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}},
|
||||
Var: &ast.Reference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}},
|
||||
},
|
||||
},
|
||||
ClosureUse: &ast.ExprClosureUse{
|
||||
@@ -2446,14 +2446,12 @@ func TestPrintStmtClassMethod(t *testing.T) {
|
||||
MethodName: &ast.Identifier{Value: []byte("foo")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}},
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}},
|
||||
Var: &ast.Reference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}},
|
||||
DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}},
|
||||
},
|
||||
&ast.Parameter{
|
||||
Variadic: true,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}},
|
||||
Var: &ast.Variadic{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}},
|
||||
},
|
||||
},
|
||||
ReturnType: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}},
|
||||
@@ -2484,14 +2482,12 @@ func TestPrintStmtAbstractClassMethod(t *testing.T) {
|
||||
MethodName: &ast.Identifier{Value: []byte("foo")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}},
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}},
|
||||
Var: &ast.Reference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("a")}}},
|
||||
DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}},
|
||||
},
|
||||
&ast.Parameter{
|
||||
Variadic: true,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}},
|
||||
Var: &ast.Variadic{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("b")}}},
|
||||
},
|
||||
},
|
||||
ReturnType: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("void")}}},
|
||||
@@ -3197,9 +3193,7 @@ func TestPrintStmtFunction(t *testing.T) {
|
||||
FunctionName: &ast.Identifier{Value: []byte("foo")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Variadic: false,
|
||||
Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}},
|
||||
Var: &ast.Reference{Var: &ast.ExprVariable{VarName: &ast.Identifier{Value: []byte("var")}}},
|
||||
},
|
||||
},
|
||||
ReturnType: &ast.NameFullyQualified{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("Foo")}}},
|
||||
|
||||
@@ -79,6 +79,10 @@ func (p *Printer) printNode(n ast.Vertex) {
|
||||
p.printNodeRoot(n)
|
||||
case *ast.Identifier:
|
||||
p.printNodeIdentifier(n)
|
||||
case *ast.Reference:
|
||||
p.printNodeReference(n)
|
||||
case *ast.Variadic:
|
||||
p.printNodeVariadic(n)
|
||||
case *ast.Parameter:
|
||||
p.printNodeParameter(n)
|
||||
case *ast.Nullable:
|
||||
@@ -444,6 +448,26 @@ func (p *Printer) printNodeIdentifier(n ast.Vertex) {
|
||||
p.printFreeFloating(nn, token.End)
|
||||
}
|
||||
|
||||
func (p *Printer) printNodeReference(n ast.Vertex) {
|
||||
nn := n.(*ast.Reference)
|
||||
p.printFreeFloating(nn, token.Start)
|
||||
|
||||
io.WriteString(p.w, "&")
|
||||
p.Print(nn.Var)
|
||||
|
||||
p.printFreeFloating(nn, token.End)
|
||||
}
|
||||
|
||||
func (p *Printer) printNodeVariadic(n ast.Vertex) {
|
||||
nn := n.(*ast.Variadic)
|
||||
p.printFreeFloating(nn, token.Start)
|
||||
|
||||
io.WriteString(p.w, "...")
|
||||
p.Print(nn.Var)
|
||||
|
||||
p.printFreeFloating(nn, token.End)
|
||||
}
|
||||
|
||||
func (p *Printer) printNodeParameter(n ast.Vertex) {
|
||||
nn := n.(*ast.Parameter)
|
||||
p.printFreeFloating(nn, token.Start)
|
||||
@@ -451,22 +475,10 @@ func (p *Printer) printNodeParameter(n ast.Vertex) {
|
||||
if nn.Type != nil {
|
||||
p.Print(nn.Type)
|
||||
}
|
||||
p.printFreeFloating(nn, token.OptionalType)
|
||||
|
||||
if nn.ByRef {
|
||||
io.WriteString(p.w, "&")
|
||||
}
|
||||
p.printFreeFloating(nn, token.Ampersand)
|
||||
|
||||
if nn.Variadic {
|
||||
io.WriteString(p.w, "...")
|
||||
}
|
||||
p.printFreeFloating(nn, token.Variadic)
|
||||
|
||||
p.Print(nn.Var)
|
||||
|
||||
if nn.DefaultValue != nil {
|
||||
p.printFreeFloating(nn, token.Var)
|
||||
io.WriteString(p.w, "=")
|
||||
p.Print(nn.DefaultValue)
|
||||
}
|
||||
|
||||
@@ -107,6 +107,18 @@ func TestParseAndPrintIdentifier(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseAndPrintParameterTMP(t *testing.T) {
|
||||
|
||||
src := `<?php
|
||||
function foo ( foo & ... $foo = null ) {}`
|
||||
|
||||
actual := print(parse(src))
|
||||
|
||||
if src != actual {
|
||||
t.Errorf("\nexpected: %s\ngot: %s\n", src, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseAndPrintParameter(t *testing.T) {
|
||||
|
||||
src := `<?php
|
||||
|
||||
@@ -141,8 +141,6 @@ func TestPrinterPrintParameter(t *testing.T) {
|
||||
|
||||
p := printer.NewPrinter(o)
|
||||
p.Print(&ast.Parameter{
|
||||
ByRef: false,
|
||||
Variadic: true,
|
||||
Type: &ast.NameFullyQualified{
|
||||
Parts: []ast.Vertex{
|
||||
&ast.NameNamePart{
|
||||
@@ -150,8 +148,10 @@ func TestPrinterPrintParameter(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
Var: &ast.Variadic{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
},
|
||||
},
|
||||
DefaultValue: &ast.ScalarString{
|
||||
Value: []byte("'default'"),
|
||||
@@ -172,8 +172,6 @@ func TestPrinterPrintNullable(t *testing.T) {
|
||||
p := printer.NewPrinter(o)
|
||||
p.Print(&ast.Nullable{
|
||||
Expr: &ast.Parameter{
|
||||
ByRef: true,
|
||||
Variadic: false,
|
||||
Type: &ast.NameFullyQualified{
|
||||
Parts: []ast.Vertex{
|
||||
&ast.NameNamePart{
|
||||
@@ -181,8 +179,10 @@ func TestPrinterPrintNullable(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
Var: &ast.Reference{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
},
|
||||
},
|
||||
DefaultValue: &ast.ScalarString{
|
||||
Value: []byte("'default'"),
|
||||
@@ -1703,10 +1703,10 @@ func TestPrinterPrintExprClosure(t *testing.T) {
|
||||
ReturnsRef: true,
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Variadic: false,
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
Var: &ast.Reference{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -1748,10 +1748,10 @@ func TestPrinterPrintExprArrowFunction(t *testing.T) {
|
||||
ReturnsRef: true,
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Variadic: false,
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
Var: &ast.Reference{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -2925,17 +2925,19 @@ func TestPrinterPrintStmtClassMethod(t *testing.T) {
|
||||
MethodName: &ast.Identifier{Value: []byte("foo")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}},
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$a")},
|
||||
Var: &ast.Reference{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$a")},
|
||||
},
|
||||
},
|
||||
DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}},
|
||||
},
|
||||
&ast.Parameter{
|
||||
Variadic: true,
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$b")},
|
||||
Var: &ast.Variadic{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$b")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -2972,17 +2974,19 @@ func TestPrinterPrintStmtAbstractClassMethod(t *testing.T) {
|
||||
MethodName: &ast.Identifier{Value: []byte("foo")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Type: &ast.Nullable{Expr: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("int")}}}},
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$a")},
|
||||
Var: &ast.Reference{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$a")},
|
||||
},
|
||||
},
|
||||
DefaultValue: &ast.ExprConstFetch{Const: &ast.NameName{Parts: []ast.Vertex{&ast.NameNamePart{Value: []byte("null")}}}},
|
||||
},
|
||||
&ast.Parameter{
|
||||
Variadic: true,
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$b")},
|
||||
Var: &ast.Variadic{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$b")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -3607,10 +3611,10 @@ func TestPrinterPrintStmtFunction(t *testing.T) {
|
||||
FunctionName: &ast.Identifier{Value: []byte("foo")},
|
||||
Params: []ast.Vertex{
|
||||
&ast.Parameter{
|
||||
ByRef: true,
|
||||
Variadic: false,
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
Var: &ast.Reference{
|
||||
Var: &ast.ExprVariable{
|
||||
VarName: &ast.Identifier{Value: []byte("$var")},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user