From f0e3206c184deb4615a5cbdc826abbba3bccc507 Mon Sep 17 00:00:00 2001 From: z7zmey Date: Mon, 18 Dec 2017 20:00:19 +0200 Subject: [PATCH] shell_exec node --- node/expr/shell_exec.go | 31 +++++++++++++++++++++++++++++++ parser/parser.go | 2 +- parser/parser.y | 2 +- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 node/expr/shell_exec.go diff --git a/node/expr/shell_exec.go b/node/expr/shell_exec.go new file mode 100644 index 0000000..402dcee --- /dev/null +++ b/node/expr/shell_exec.go @@ -0,0 +1,31 @@ +package expr + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" +) + +type ShellExec struct { + node.SimpleNode + parts []node.Node +} + +func NewShellExec(parts []node.Node) node.Node { + return ShellExec{ + node.SimpleNode{Name: "ShellExec", Attributes: make(map[string]string)}, + parts, + } +} + +func (n ShellExec) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + + if n.parts != nil { + fmt.Fprintf(out, "\n%vparts:", indent+" ") + for _, nn := range n.parts { + nn.Print(out, indent+" ") + } + } +} diff --git a/parser/parser.go b/parser/parser.go index f4c46ed..b5e6249 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -4209,7 +4209,7 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:892 { - yyVAL.node = node.NewNodeExprShellExec(yyDollar[1].token, yyDollar[2].list, yyDollar[3].token) + yyVAL.node = expr.NewShellExec(yyDollar[2].list) } case 362: yyDollar = yyS[yypt-2 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index 58b6f9e..af33c79 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -889,7 +889,7 @@ expr_without_variable: | T_EXIT exit_expr { $$ = expr.NewExit($2, strings.EqualFold($1.Value, "die")) } | '@' expr { $$ = node.NewSimpleNode("Silence").Append($2); } | scalar { $$ = $1; } - | '`' backticks_expr '`' { $$ = node.NewNodeExprShellExec($1, $2, $3) } + | '`' backticks_expr '`' { $$ = expr.NewShellExec($2) } | T_PRINT expr { $$ = expr.NewPrint($2) } | T_YIELD { $$ = node.NewSimpleNode("Yield"); } | T_YIELD expr { $$ = node.NewSimpleNode("Yield").Append($2); }