diff --git a/node/expr/instance_of.go b/node/expr/instance_of.go new file mode 100644 index 0000000..2346221 --- /dev/null +++ b/node/expr/instance_of.go @@ -0,0 +1,36 @@ +package expr + +import ( + "fmt" + "io" + + "github.com/z7zmey/php-parser/node" +) + +type InstanceOf struct { + node.SimpleNode + expr node.Node + class node.Node +} + +func NewInstanceOf(expr node.Node, class node.Node) node.Node { + return InstanceOf{ + node.SimpleNode{Name: "InstanceOf", Attributes: make(map[string]string)}, + expr, + class, + } +} + +func (n InstanceOf) 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+" ") + } + + if n.class != nil { + fmt.Fprintf(out, "\n%vclass:", indent+" ") + n.class.Print(out, indent+" ") + } +} diff --git a/parser/parser.go b/parser/parser.go index 9c50d88..d80455f 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -4105,7 +4105,7 @@ yydefault: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:866 { - yyVAL.node = node.NewSimpleNode("InstanceOf").Append(yyDollar[1].node).Append(yyDollar[3].node) + yyVAL.node = expr.NewInstanceOf(yyDollar[1].node, yyDollar[3].node) } case 345: yyDollar = yyS[yypt-3 : yypt+1] diff --git a/parser/parser.y b/parser/parser.y index ef7e497..75ecaf4 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -863,7 +863,7 @@ expr_without_variable: | expr '>' expr { $$ = binary_op.NewGreater($1, $3) } | expr T_IS_GREATER_OR_EQUAL expr { $$ = binary_op.NewGreaterOrEqual($1, $3) } | expr T_SPACESHIP expr { $$ = binary_op.NewSpaceship($1, $3) } - | expr T_INSTANCEOF class_name_reference { $$ = node.NewSimpleNode("InstanceOf").Append($1).Append($3) } + | expr T_INSTANCEOF class_name_reference { $$ = expr.NewInstanceOf($1, $3) } | '(' expr ')' { $$ = $2; } | new_expr { $$ = $1; } | expr '?' expr ':' expr { $$ = node.NewSimpleNode("Ternary").Append($1).Append($3).Append($5); }