diff --git a/node/stmt/expression.go b/node/stmt/expression.go new file mode 100644 index 0000000..784ffdd --- /dev/null +++ b/node/stmt/expression.go @@ -0,0 +1,29 @@ +package stmt + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" +) + +type Expression struct { + node.SimpleNode + expr node.Node +} + +func NewExpression(expr node.Node) node.Node { + return Expression{ + node.SimpleNode{Name: "Expression", Attributes: make(map[string]string)}, + expr, + } +} + +func (n Expression) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + + 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 ce1e74f..56205a0 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -2886,7 +2886,7 @@ yydefault: yyDollar = yyS[yypt-2 : yypt+1] //line parser/parser.y:382 { - yyVAL.node = yyDollar[1].node + yyVAL.node = stmt.NewExpression(yyDollar[1].node) } case 144: yyDollar = yyS[yypt-6 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index e9588cb..7f58bf1 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -379,7 +379,7 @@ statement: | T_STATIC static_var_list ';' { $$ = $2; } | T_ECHO echo_expr_list ';' { $$ = stmt.NewEcho($1, $2) } | T_INLINE_HTML { $$ = node.NewSimpleNode("Echo").Append(node.NewSimpleNode("InlineHtml").Attribute("value", $1.String())) } - | expr ';' { $$ = $1; } + | expr ';' { $$ = stmt.NewExpression($1); } | T_UNSET '(' unset_variables possible_comma ')' ';' { $$ = node.NewSimpleNode("Unset").Append($3); } | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement