diff --git a/node/expr/exit.go b/node/expr/exit.go new file mode 100644 index 0000000..8c2fc13 --- /dev/null +++ b/node/expr/exit.go @@ -0,0 +1,32 @@ +package expr + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" +) + +type Exit struct { + node.SimpleNode + expr node.Node + isDie bool +} + +func NewExit(expr node.Node, isDie bool) node.Node { + return Exit{ + node.SimpleNode{Name: "Exit", Attributes: make(map[string]string)}, + expr, + isDie, + } +} + +func (n Exit) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + fmt.Fprintf(out, "\n%vis die: %t", indent+" ", n.isDie) + + if n.expr != nil { + fmt.Fprintf(out, "\n%vexpr:", indent+" ") + n.expr.Print(out, indent+" ") + } +} diff --git a/parser/parser.go b/parser/parser.go index 72aa7ab..40ae877 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -4188,7 +4188,7 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] //line parser/parser.y:879 { - yyVAL.node = node.NewSimpleNode("Exit").Append(yyDollar[2].node) + yyVAL.node = expr.NewExit(yyDollar[2].node, yyDollar[1].token.Value == "die") } case 359: yyDollar = yyS[yypt-2 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index 99abc7a..832126d 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -876,7 +876,7 @@ expr_without_variable: | T_OBJECT_CAST expr { $$ = cast.NewCastObject($2) } | T_BOOL_CAST expr { $$ = cast.NewCastBool($2) } | T_UNSET_CAST expr { $$ = cast.NewCastUnset($2) } - | T_EXIT exit_expr { $$ = node.NewSimpleNode("Exit").Append($2); } + | T_EXIT exit_expr { $$ = expr.NewExit($2, $1.Value == "die") } | '@' expr { $$ = node.NewSimpleNode("Silence").Append($2); } | scalar { $$ = $1; } | '`' backticks_expr '`' { $$ = node.NewNodeExprShellExec($1, $2, $3) }