split Exit and Die nodes
This commit is contained in:
parent
f107e8bb57
commit
1c6633e47d
38
node/expr/n_die.go
Normal file
38
node/expr/n_die.go
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package expr
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/z7zmey/php-parser/node"
|
||||||
|
"github.com/z7zmey/php-parser/walker"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Die node
|
||||||
|
type Die struct {
|
||||||
|
Expr node.Node
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewDie node constuctor
|
||||||
|
func NewDie(Expr node.Node) *Die {
|
||||||
|
return &Die{
|
||||||
|
Expr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Attributes returns node attributes as map
|
||||||
|
func (n *Die) Attributes() map[string]interface{} {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Walk traverses nodes
|
||||||
|
// Walk is invoked recursively until v.EnterNode returns true
|
||||||
|
func (n *Die) Walk(v walker.Visitor) {
|
||||||
|
if v.EnterNode(n) == false {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if n.Expr != nil {
|
||||||
|
vv := v.GetChildrenVisitor("Expr")
|
||||||
|
n.Expr.Walk(vv)
|
||||||
|
}
|
||||||
|
|
||||||
|
v.LeaveNode(n)
|
||||||
|
}
|
@ -7,23 +7,19 @@ import (
|
|||||||
|
|
||||||
// Exit node
|
// Exit node
|
||||||
type Exit struct {
|
type Exit struct {
|
||||||
Expr node.Node
|
Expr node.Node
|
||||||
IsDie bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewExit node constuctor
|
// NewExit node constuctor
|
||||||
func NewExit(Expr node.Node, IsDie bool) *Exit {
|
func NewExit(Expr node.Node) *Exit {
|
||||||
return &Exit{
|
return &Exit{
|
||||||
Expr,
|
Expr,
|
||||||
IsDie,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attributes returns node attributes as map
|
// Attributes returns node attributes as map
|
||||||
func (n *Exit) Attributes() map[string]interface{} {
|
func (n *Exit) Attributes() map[string]interface{} {
|
||||||
return map[string]interface{}{
|
return nil
|
||||||
"IsDie": n.IsDie,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Walk traverses nodes
|
// Walk traverses nodes
|
||||||
|
@ -18,9 +18,7 @@ func TestExit(t *testing.T) {
|
|||||||
expected := &stmt.StmtList{
|
expected := &stmt.StmtList{
|
||||||
Stmts: []node.Node{
|
Stmts: []node.Node{
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Exit{},
|
||||||
IsDie: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -39,8 +37,7 @@ func TestExitExpr(t *testing.T) {
|
|||||||
Stmts: []node.Node{
|
Stmts: []node.Node{
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Exit{
|
||||||
IsDie: false,
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -59,9 +56,7 @@ func TestDie(t *testing.T) {
|
|||||||
expected := &stmt.StmtList{
|
expected := &stmt.StmtList{
|
||||||
Stmts: []node.Node{
|
Stmts: []node.Node{
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Die{},
|
||||||
IsDie: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -79,9 +74,8 @@ func TestDieExpr(t *testing.T) {
|
|||||||
expected := &stmt.StmtList{
|
expected := &stmt.StmtList{
|
||||||
Stmts: []node.Node{
|
Stmts: []node.Node{
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Die{
|
||||||
IsDie: true,
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -132,11 +132,17 @@ var nodesToTest = []struct {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
&expr.Exit{
|
&expr.Exit{
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
IsDie: false,
|
|
||||||
},
|
},
|
||||||
[]string{"Expr"},
|
[]string{"Expr"},
|
||||||
map[string]interface{}{"IsDie": false},
|
map[string]interface{}{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
&expr.Die{
|
||||||
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
|
},
|
||||||
|
[]string{"Expr"},
|
||||||
|
map[string]interface{}{},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
&expr.FunctionCall{
|
&expr.FunctionCall{
|
||||||
|
450
php5/php5.go
450
php5/php5.go
File diff suppressed because it is too large
Load Diff
@ -2226,7 +2226,11 @@ expr_without_variable:
|
|||||||
}
|
}
|
||||||
| T_EXIT exit_expr
|
| T_EXIT exit_expr
|
||||||
{
|
{
|
||||||
$$ = expr.NewExit($2, strings.EqualFold($1.Value, "die"))
|
if (strings.EqualFold($1.Value, "die")) {
|
||||||
|
$$ = expr.NewDie($2)
|
||||||
|
} else {
|
||||||
|
$$ = expr.NewExit($2)
|
||||||
|
}
|
||||||
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
||||||
comments.AddComments($$, $1.Comments())
|
comments.AddComments($$, $1.Comments())
|
||||||
}
|
}
|
||||||
|
@ -2119,25 +2119,19 @@ CAD;
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Exit{},
|
||||||
IsDie: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Exit{
|
||||||
IsDie: false,
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Die{},
|
||||||
IsDie: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Die{
|
||||||
IsDie: true,
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
|
266
php7/php7.go
266
php7/php7.go
File diff suppressed because it is too large
Load Diff
@ -1844,7 +1844,11 @@ expr_without_variable:
|
|||||||
}
|
}
|
||||||
| T_EXIT exit_expr
|
| T_EXIT exit_expr
|
||||||
{
|
{
|
||||||
$$ = expr.NewExit($2, strings.EqualFold($1.Value, "die"))
|
if (strings.EqualFold($1.Value, "die")) {
|
||||||
|
$$ = expr.NewDie($2)
|
||||||
|
} else {
|
||||||
|
$$ = expr.NewExit($2)
|
||||||
|
}
|
||||||
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
positions.AddPosition($$, positionBuilder.NewTokenNodePosition($1, $2))
|
||||||
comments.AddComments($$, $1.Comments())
|
comments.AddComments($$, $1.Comments())
|
||||||
}
|
}
|
||||||
|
@ -2206,25 +2206,19 @@ CAD;
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Exit{},
|
||||||
IsDie: false,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Exit{
|
||||||
IsDie: false,
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Die{},
|
||||||
IsDie: true,
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
Expr: &expr.Exit{
|
Expr: &expr.Die{
|
||||||
IsDie: true,
|
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
||||||
Expr: &expr.Variable{VarName: &node.Identifier{Value: "$a"}},
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
&stmt.Expression{
|
&stmt.Expression{
|
||||||
|
Loading…
Reference in New Issue
Block a user