From 06a15be7a2472b0480cfe38633b11f294c5944cd Mon Sep 17 00:00:00 2001 From: vadim Date: Wed, 27 Dec 2017 16:26:36 +0200 Subject: [PATCH] argument nullable parameter nodes --- node/argument.go | 30 +++ node/nullable.go | 27 +++ node/parameter.go | 48 ++++ parser/parser.go | 570 +++++++++++++++++++++++----------------------- parser/parser.y | 21 +- 5 files changed, 392 insertions(+), 304 deletions(-) create mode 100644 node/argument.go create mode 100644 node/nullable.go create mode 100644 node/parameter.go diff --git a/node/argument.go b/node/argument.go new file mode 100644 index 0000000..31056e7 --- /dev/null +++ b/node/argument.go @@ -0,0 +1,30 @@ +package node + +import ( + "fmt" + "io" +) + +type Argument struct { + SimpleNode + expr Node + variadic bool +} + +func NewArgument(expression Node, variadic bool) Node { + return Argument{ + SimpleNode{Name: "Argument", Attributes: make(map[string]string)}, + expression, + variadic, + } +} + +func (n Argument) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + fmt.Fprintf(out, "\n%vvariadic: %t", indent+" ", n.variadic) + + if n.expr != nil { + fmt.Fprintf(out, "\n%vexpr:", indent+" ") + n.expr.Print(out, indent+" ") + } +} diff --git a/node/nullable.go b/node/nullable.go new file mode 100644 index 0000000..a12df90 --- /dev/null +++ b/node/nullable.go @@ -0,0 +1,27 @@ +package node + +import ( + "fmt" + "io" +) + +type Nullable struct { + SimpleNode + expr Node +} + +func NewNullable(expression Node) Node { + return Nullable{ + SimpleNode{Name: "Nullable", Attributes: make(map[string]string)}, + expression, + } +} + +func (n Nullable) 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/node/parameter.go b/node/parameter.go new file mode 100644 index 0000000..b4f1e98 --- /dev/null +++ b/node/parameter.go @@ -0,0 +1,48 @@ +package node + +import ( + "fmt" + "io" +) + +type Parameter struct { + SimpleNode + variableType Node + variable Node + defaultValue Node + byRef bool + variadic bool +} + +func NewParameter(variableType Node, variable Node, defaultValue Node, byRef bool, variadic bool) Node { + return Parameter{ + SimpleNode{Name: "Parameter", Attributes: make(map[string]string)}, + variableType, + variable, + defaultValue, + byRef, + variadic, + } +} + +func (n Parameter) Print(out io.Writer, indent string) { + fmt.Fprintf(out, "\n%v%v [- -]", indent, n.Name) + fmt.Fprintf(out, "\n%vbyRef: %t", indent+" ", n.byRef) + fmt.Fprintf(out, "\n%vvariadic: %t", indent+" ", n.variadic) + + if n.variableType != nil { + fmt.Fprintf(out, "\n%vvariableType:", indent+" ") + n.variableType.Print(out, indent+" ") + } + + if n.variable != nil { + fmt.Fprintf(out, "\n%vvariable:", indent+" ") + n.variable.Print(out, indent+" ") + } + + if n.defaultValue != nil { + fmt.Fprintf(out, "\n%vdefaultValue:", indent+" ") + n.defaultValue.Print(out, indent+" ") + } + +} diff --git a/parser/parser.go b/parser/parser.go index 30077ef..1e43948 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -358,7 +358,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser/parser.y:1181 +//line parser/parser.y:1174 //line yacctab:1 var yyExca = [...]int{ @@ -3317,471 +3317,461 @@ yydefault: yyDollar = yyS[yypt-4 : yypt+1] //line parser/parser.y:604 { - yyVAL.node = node.NewSimpleNode("Parameter"). - Append(yyDollar[1].node). - Attribute("is_reference", yyDollar[2].value). - Attribute("is_variadic", yyDollar[3].value). - Attribute("var", yyDollar[4].token.String()) + yyVAL.node = node.NewParameter(yyDollar[1].node, expr.NewVariable(node.NewIdentifier(yyDollar[4].token)), nil, yyDollar[2].value == "true", yyDollar[3].value == "true") } case 215: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:612 + //line parser/parser.y:608 { - yyVAL.node = node.NewSimpleNode("Parameter"). - Append(yyDollar[1].node). - Attribute("is_reference", yyDollar[2].value). - Attribute("is_variadic", yyDollar[3].value). - Attribute("var", yyDollar[4].token.String()). - Append(yyDollar[6].node) + yyVAL.node = node.NewParameter(yyDollar[1].node, expr.NewVariable(node.NewIdentifier(yyDollar[4].token)), yyDollar[6].node, yyDollar[2].value == "true", yyDollar[3].value == "true") } case 216: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:623 + //line parser/parser.y:614 { - yyVAL.node = node.NewSimpleNode("No type") + yyVAL.node = nil } case 217: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:624 + //line parser/parser.y:615 { yyVAL.node = yyDollar[1].node } case 218: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:628 + //line parser/parser.y:619 { yyVAL.node = yyDollar[1].node } case 219: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:629 + //line parser/parser.y:620 { - yyVAL.node = yyDollar[2].node - yyVAL.node.Attribute("nullable", "true") + yyVAL.node = node.NewNullable(yyDollar[2].node) } case 220: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:633 + //line parser/parser.y:624 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 221: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:634 + //line parser/parser.y:625 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 222: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:635 + //line parser/parser.y:626 { yyVAL.node = yyDollar[1].node } case 223: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:639 + //line parser/parser.y:630 { yyVAL.node = nil } case 224: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:640 + //line parser/parser.y:631 { yyVAL.node = yyDollar[2].node } case 225: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:644 + //line parser/parser.y:635 { yyVAL.list = []node.Node{} } case 226: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:645 + //line parser/parser.y:636 { yyVAL.list = yyDollar[2].list } case 227: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:649 + //line parser/parser.y:640 { yyVAL.list = []node.Node{yyDollar[1].node} } case 228: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:650 + //line parser/parser.y:641 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 229: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:654 + //line parser/parser.y:645 { - yyVAL.node = yyDollar[1].node + yyVAL.node = node.NewArgument(yyDollar[1].node, false) } case 230: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:655 + //line parser/parser.y:646 { - yyVAL.node = node.NewSimpleNode("Unpack").Append(yyDollar[2].node) + yyVAL.node = node.NewArgument(yyDollar[2].node, true) } case 231: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:659 + //line parser/parser.y:650 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 232: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:660 + //line parser/parser.y:651 { yyVAL.list = []node.Node{yyDollar[1].node} } case 233: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:664 + //line parser/parser.y:655 { yyVAL.node = yyDollar[1].node } case 234: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:668 + //line parser/parser.y:659 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 235: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:669 + //line parser/parser.y:660 { yyVAL.list = []node.Node{yyDollar[1].node} } case 236: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:673 + //line parser/parser.y:664 { yyVAL.node = stmt.NewStaticVar(yyDollar[1].token, nil) } case 237: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:674 + //line parser/parser.y:665 { yyVAL.node = stmt.NewStaticVar(yyDollar[1].token, yyDollar[3].node) } case 238: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:678 + //line parser/parser.y:669 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 239: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:679 + //line parser/parser.y:670 { yyVAL.list = []node.Node{} } case 240: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:683 + //line parser/parser.y:674 { yyVAL.node = stmt.NewPropertyList(yyDollar[1].list, yyDollar[2].list) } case 241: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:684 + //line parser/parser.y:675 { yyVAL.node = stmt.NewClassConst(yyDollar[2].token, yyDollar[1].list, yyDollar[3].list) } case 242: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:685 + //line parser/parser.y:676 { yyVAL.node = stmt.NewTraitUse(yyDollar[1].token, yyDollar[2].list, yyDollar[3].list) } case 243: yyDollar = yyS[yypt-9 : yypt+1] - //line parser/parser.y:687 + //line parser/parser.y:678 { yyVAL.node = stmt.NewClassMethod(yyDollar[4].token, yyDollar[1].list, yyDollar[3].value == "true", yyDollar[6].list, yyDollar[8].node, yyDollar[9].list) } case 244: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:693 + //line parser/parser.y:684 { yyVAL.list = []node.Node{yyDollar[1].node} } case 245: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:694 + //line parser/parser.y:685 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 246: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:698 + //line parser/parser.y:689 { yyVAL.list = nil } case 247: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:699 + //line parser/parser.y:690 { yyVAL.list = nil } case 248: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:700 + //line parser/parser.y:691 { yyVAL.list = yyDollar[2].list } case 249: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:704 + //line parser/parser.y:695 { yyVAL.list = []node.Node{yyDollar[1].node} } case 250: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:705 + //line parser/parser.y:696 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 251: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:709 + //line parser/parser.y:700 { yyVAL.node = yyDollar[1].node } case 252: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:710 + //line parser/parser.y:701 { yyVAL.node = yyDollar[1].node } case 253: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:715 + //line parser/parser.y:706 { yyVAL.node = stmt.NewTraitUsePrecedence(yyDollar[1].node, name.NewName(yyDollar[3].list)) } case 254: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:721 + //line parser/parser.y:712 { yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, nil, yyDollar[3].token) } case 255: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:723 + //line parser/parser.y:714 { yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, nil, yyDollar[3].token) } case 256: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:725 + //line parser/parser.y:716 { yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, yyDollar[3].node, yyDollar[4].token) } case 257: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:726 + //line parser/parser.y:717 { yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, yyDollar[3].node, nil) } case 258: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:730 + //line parser/parser.y:721 { yyVAL.node = stmt.NewTraitMethodRef(nil, yyDollar[1].token) } case 259: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:731 + //line parser/parser.y:722 { yyVAL.node = yyDollar[1].node } case 260: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:735 + //line parser/parser.y:726 { yyVAL.node = stmt.NewTraitMethodRef(yyDollar[1].node, yyDollar[3].token) } case 261: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:739 + //line parser/parser.y:730 { yyVAL.list = nil } case 262: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:740 + //line parser/parser.y:731 { yyVAL.list = yyDollar[2].list } case 263: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:744 + //line parser/parser.y:735 { yyVAL.list = yyDollar[1].list } case 264: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:745 + //line parser/parser.y:736 { yyVAL.list = []node.Node{node.NewIdentifier(yyDollar[1].token)} } case 265: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:749 + //line parser/parser.y:740 { yyVAL.list = nil } case 266: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:750 + //line parser/parser.y:741 { yyVAL.list = yyDollar[1].list } case 267: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:754 + //line parser/parser.y:745 { yyVAL.list = []node.Node{yyDollar[1].node} } case 268: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:755 + //line parser/parser.y:746 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 269: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:759 + //line parser/parser.y:750 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 270: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:760 + //line parser/parser.y:751 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 271: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:761 + //line parser/parser.y:752 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 272: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:762 + //line parser/parser.y:753 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 273: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:763 + //line parser/parser.y:754 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 274: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:764 + //line parser/parser.y:755 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 275: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:768 + //line parser/parser.y:759 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 276: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:769 + //line parser/parser.y:760 { yyVAL.list = []node.Node{yyDollar[1].node} } case 277: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:773 + //line parser/parser.y:764 { yyVAL.node = stmt.NewProperty(yyDollar[1].token, nil) } case 278: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:774 + //line parser/parser.y:765 { yyVAL.node = stmt.NewProperty(yyDollar[1].token, yyDollar[3].node) } case 279: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:778 + //line parser/parser.y:769 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 280: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:779 + //line parser/parser.y:770 { yyVAL.list = []node.Node{yyDollar[1].node} } case 281: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:783 + //line parser/parser.y:774 { yyVAL.node = stmt.NewConstant(yyDollar[1].token, yyDollar[3].node) } case 282: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:787 + //line parser/parser.y:778 { yyVAL.node = stmt.NewConstant(yyDollar[1].token, yyDollar[3].node) } case 283: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:791 + //line parser/parser.y:782 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 284: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:792 + //line parser/parser.y:783 { yyVAL.list = []node.Node{yyDollar[1].node} } case 285: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:796 + //line parser/parser.y:787 { yyVAL.node = yyDollar[1].node } case 286: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:800 + //line parser/parser.y:791 { yyVAL.list = nil } case 287: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:801 + //line parser/parser.y:792 { yyVAL.list = yyDollar[1].list } case 288: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:804 + //line parser/parser.y:795 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 289: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:805 + //line parser/parser.y:796 { yyVAL.list = []node.Node{yyDollar[1].node} } case 290: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:810 + //line parser/parser.y:801 { { yyVAL.node = stmt.NewClass(yyDollar[1].token, nil, yyDollar[2].list, yyDollar[3].node, yyDollar[4].list, yyDollar[6].list) @@ -3789,969 +3779,969 @@ yydefault: } case 291: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:816 + //line parser/parser.y:807 { yyVAL.node = expr.NewNew(yyDollar[2].node, yyDollar[3].list) } case 292: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:817 + //line parser/parser.y:808 { yyVAL.node = expr.NewNew(yyDollar[2].node, nil) } case 293: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:822 + //line parser/parser.y:813 { list := expr.NewList(yyDollar[3].list) yyVAL.node = assign_op.NewAssign(list, yyDollar[6].node) } case 294: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:827 + //line parser/parser.y:818 { shortList := expr.NewShortList(yyDollar[2].list) yyVAL.node = assign_op.NewAssign(shortList, yyDollar[5].node) } case 295: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:831 + //line parser/parser.y:822 { yyVAL.node = assign_op.NewAssign(yyDollar[1].node, yyDollar[3].node) } case 296: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:832 + //line parser/parser.y:823 { yyVAL.node = assign_op.NewAssignRef(yyDollar[1].node, yyDollar[4].node) } case 297: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:833 + //line parser/parser.y:824 { yyVAL.node = expr.NewClone(yyDollar[2].node) } case 298: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:834 + //line parser/parser.y:825 { yyVAL.node = assign_op.NewPlus(yyDollar[1].node, yyDollar[3].node) } case 299: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:835 + //line parser/parser.y:826 { yyVAL.node = assign_op.NewMinus(yyDollar[1].node, yyDollar[3].node) } case 300: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:836 + //line parser/parser.y:827 { yyVAL.node = assign_op.NewMul(yyDollar[1].node, yyDollar[3].node) } case 301: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:837 + //line parser/parser.y:828 { yyVAL.node = assign_op.NewPow(yyDollar[1].node, yyDollar[3].node) } case 302: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:838 + //line parser/parser.y:829 { yyVAL.node = assign_op.NewDiv(yyDollar[1].node, yyDollar[3].node) } case 303: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:839 + //line parser/parser.y:830 { yyVAL.node = assign_op.NewConcat(yyDollar[1].node, yyDollar[3].node) } case 304: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:840 + //line parser/parser.y:831 { yyVAL.node = assign_op.NewMod(yyDollar[1].node, yyDollar[3].node) } case 305: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:841 + //line parser/parser.y:832 { yyVAL.node = assign_op.NewBitwiseAnd(yyDollar[1].node, yyDollar[3].node) } case 306: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:842 + //line parser/parser.y:833 { yyVAL.node = assign_op.NewBitwiseOr(yyDollar[1].node, yyDollar[3].node) } case 307: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:843 + //line parser/parser.y:834 { yyVAL.node = assign_op.NewBitwiseXor(yyDollar[1].node, yyDollar[3].node) } case 308: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:844 + //line parser/parser.y:835 { yyVAL.node = assign_op.NewShiftLeft(yyDollar[1].node, yyDollar[3].node) } case 309: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:845 + //line parser/parser.y:836 { yyVAL.node = assign_op.NewShiftRight(yyDollar[1].node, yyDollar[3].node) } case 310: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:846 + //line parser/parser.y:837 { yyVAL.node = expr.NewPostInc(yyDollar[1].node) } case 311: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:847 + //line parser/parser.y:838 { yyVAL.node = expr.NewPreInc(yyDollar[2].node) } case 312: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:848 + //line parser/parser.y:839 { yyVAL.node = expr.NewPostDec(yyDollar[1].node) } case 313: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:849 + //line parser/parser.y:840 { yyVAL.node = expr.NewPreDec(yyDollar[2].node) } case 314: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:850 + //line parser/parser.y:841 { yyVAL.node = binary_op.NewBooleanOr(yyDollar[1].node, yyDollar[3].node) } case 315: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:851 + //line parser/parser.y:842 { yyVAL.node = binary_op.NewBooleanAnd(yyDollar[1].node, yyDollar[3].node) } case 316: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:852 + //line parser/parser.y:843 { yyVAL.node = binary_op.NewLogicalOr(yyDollar[1].node, yyDollar[3].node) } case 317: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:853 + //line parser/parser.y:844 { yyVAL.node = binary_op.NewLogicalAnd(yyDollar[1].node, yyDollar[3].node) } case 318: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:854 + //line parser/parser.y:845 { yyVAL.node = binary_op.NewLogicalXor(yyDollar[1].node, yyDollar[3].node) } case 319: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:855 + //line parser/parser.y:846 { yyVAL.node = binary_op.NewBitwiseOr(yyDollar[1].node, yyDollar[3].node) } case 320: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:856 + //line parser/parser.y:847 { yyVAL.node = binary_op.NewBitwiseAnd(yyDollar[1].node, yyDollar[3].node) } case 321: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:857 + //line parser/parser.y:848 { yyVAL.node = binary_op.NewBitwiseXor(yyDollar[1].node, yyDollar[3].node) } case 322: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:858 + //line parser/parser.y:849 { yyVAL.node = binary_op.NewConcat(yyDollar[1].node, yyDollar[3].node) } case 323: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:859 + //line parser/parser.y:850 { yyVAL.node = binary_op.NewPlus(yyDollar[1].node, yyDollar[3].node) } case 324: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:860 + //line parser/parser.y:851 { yyVAL.node = binary_op.NewMinus(yyDollar[1].node, yyDollar[3].node) } case 325: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:861 + //line parser/parser.y:852 { yyVAL.node = binary_op.NewMul(yyDollar[1].node, yyDollar[3].node) } case 326: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:862 + //line parser/parser.y:853 { yyVAL.node = binary_op.NewPow(yyDollar[1].node, yyDollar[3].node) } case 327: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:863 + //line parser/parser.y:854 { yyVAL.node = binary_op.NewDiv(yyDollar[1].node, yyDollar[3].node) } case 328: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:864 + //line parser/parser.y:855 { yyVAL.node = binary_op.NewMod(yyDollar[1].node, yyDollar[3].node) } case 329: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:865 + //line parser/parser.y:856 { yyVAL.node = binary_op.NewShiftLeft(yyDollar[1].node, yyDollar[3].node) } case 330: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:866 + //line parser/parser.y:857 { yyVAL.node = binary_op.NewShiftRight(yyDollar[1].node, yyDollar[3].node) } case 331: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:867 + //line parser/parser.y:858 { yyVAL.node = expr.NewUnaryPlus(yyDollar[2].node) } case 332: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:868 + //line parser/parser.y:859 { yyVAL.node = expr.NewUnaryMinus(yyDollar[2].node) } case 333: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:869 + //line parser/parser.y:860 { yyVAL.node = expr.NewBooleanNot(yyDollar[2].node) } case 334: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:870 + //line parser/parser.y:861 { yyVAL.node = expr.NewBitwiseNot(yyDollar[2].node) } case 335: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:871 + //line parser/parser.y:862 { yyVAL.node = binary_op.NewIdentical(yyDollar[1].node, yyDollar[3].node) } case 336: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:872 + //line parser/parser.y:863 { yyVAL.node = binary_op.NewNotIdentical(yyDollar[1].node, yyDollar[3].node) } case 337: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:873 + //line parser/parser.y:864 { yyVAL.node = binary_op.NewEqual(yyDollar[1].node, yyDollar[3].node) } case 338: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:874 + //line parser/parser.y:865 { yyVAL.node = binary_op.NewNotEqual(yyDollar[1].node, yyDollar[3].node) } case 339: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:875 + //line parser/parser.y:866 { yyVAL.node = binary_op.NewSmaller(yyDollar[1].node, yyDollar[3].node) } case 340: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:876 + //line parser/parser.y:867 { yyVAL.node = binary_op.NewSmallerOrEqual(yyDollar[1].node, yyDollar[3].node) } case 341: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:877 + //line parser/parser.y:868 { yyVAL.node = binary_op.NewGreater(yyDollar[1].node, yyDollar[3].node) } case 342: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:878 + //line parser/parser.y:869 { yyVAL.node = binary_op.NewGreaterOrEqual(yyDollar[1].node, yyDollar[3].node) } case 343: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:879 + //line parser/parser.y:870 { yyVAL.node = binary_op.NewSpaceship(yyDollar[1].node, yyDollar[3].node) } case 344: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:880 + //line parser/parser.y:871 { yyVAL.node = expr.NewInstanceOf(yyDollar[1].node, yyDollar[3].node) } case 345: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:881 + //line parser/parser.y:872 { yyVAL.node = yyDollar[2].node } case 346: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:882 + //line parser/parser.y:873 { yyVAL.node = yyDollar[1].node } case 347: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:883 + //line parser/parser.y:874 { yyVAL.node = expr.NewTernary(yyDollar[1].node, yyDollar[3].node, yyDollar[5].node) } case 348: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:884 + //line parser/parser.y:875 { yyVAL.node = expr.NewTernary(yyDollar[1].node, nil, yyDollar[4].node) } case 349: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:885 + //line parser/parser.y:876 { yyVAL.node = binary_op.NewCoalesce(yyDollar[1].node, yyDollar[3].node) } case 350: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:886 + //line parser/parser.y:877 { yyVAL.node = yyDollar[1].node } case 351: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:887 + //line parser/parser.y:878 { yyVAL.node = cast.NewCastInt(yyDollar[2].node) } case 352: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:888 + //line parser/parser.y:879 { yyVAL.node = cast.NewCastDouble(yyDollar[2].node) } case 353: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:889 + //line parser/parser.y:880 { yyVAL.node = cast.NewCastString(yyDollar[2].node) } case 354: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:890 + //line parser/parser.y:881 { yyVAL.node = cast.NewCastArray(yyDollar[2].node) } case 355: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:891 + //line parser/parser.y:882 { yyVAL.node = cast.NewCastObject(yyDollar[2].node) } case 356: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:892 + //line parser/parser.y:883 { yyVAL.node = cast.NewCastBool(yyDollar[2].node) } case 357: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:893 + //line parser/parser.y:884 { yyVAL.node = cast.NewCastUnset(yyDollar[2].node) } case 358: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:894 + //line parser/parser.y:885 { yyVAL.node = expr.NewExit(yyDollar[2].node, strings.EqualFold(yyDollar[1].token.Value, "die")) } case 359: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:895 + //line parser/parser.y:886 { yyVAL.node = expr.NewErrorSuppress(yyDollar[2].node) } case 360: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:896 + //line parser/parser.y:887 { yyVAL.node = yyDollar[1].node } case 361: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:897 + //line parser/parser.y:888 { yyVAL.node = expr.NewShellExec(yyDollar[2].list) } case 362: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:898 + //line parser/parser.y:889 { yyVAL.node = expr.NewPrint(yyDollar[2].node) } case 363: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:899 + //line parser/parser.y:890 { yyVAL.node = expr.NewYield(nil, nil) } case 364: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:900 + //line parser/parser.y:891 { yyVAL.node = expr.NewYield(nil, yyDollar[2].node) } case 365: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:901 + //line parser/parser.y:892 { yyVAL.node = expr.NewYield(yyDollar[2].node, yyDollar[4].node) } case 366: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:902 + //line parser/parser.y:893 { yyVAL.node = expr.NewYieldFrom(yyDollar[2].node) } case 367: yyDollar = yyS[yypt-10 : yypt+1] - //line parser/parser.y:904 + //line parser/parser.y:895 { yyVAL.node = expr.NewClosure(yyDollar[4].list, yyDollar[6].list, yyDollar[7].node, yyDollar[9].list, false, yyDollar[2].value == "true") } case 368: yyDollar = yyS[yypt-11 : yypt+1] - //line parser/parser.y:908 + //line parser/parser.y:899 { yyVAL.node = expr.NewClosure(yyDollar[5].list, yyDollar[7].list, yyDollar[8].node, yyDollar[10].list, true, yyDollar[3].value == "true") } case 369: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:914 + //line parser/parser.y:905 { yyVAL.value = "false" } case 370: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:915 + //line parser/parser.y:906 { yyVAL.value = "true" } case 371: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:919 + //line parser/parser.y:910 { yyVAL.list = []node.Node{} } case 372: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:920 + //line parser/parser.y:911 { yyVAL.list = yyDollar[3].list } case 373: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:924 + //line parser/parser.y:915 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 374: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:925 + //line parser/parser.y:916 { yyVAL.list = []node.Node{yyDollar[1].node} } case 375: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:929 + //line parser/parser.y:920 { yyVAL.node = expr.NewClusureUse(expr.NewVariable(node.NewIdentifier(yyDollar[1].token)), false) } case 376: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:930 + //line parser/parser.y:921 { yyVAL.node = expr.NewClusureUse(expr.NewVariable(node.NewIdentifier(yyDollar[2].token)), true) } case 377: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:934 + //line parser/parser.y:925 { yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].list) } case 378: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:936 + //line parser/parser.y:927 { yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].list) } case 379: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:938 + //line parser/parser.y:929 { yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].list) } case 380: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:939 + //line parser/parser.y:930 { yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].list) } case 381: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:943 + //line parser/parser.y:934 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 382: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:944 + //line parser/parser.y:935 { yyVAL.node = yyDollar[1].node } case 383: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:948 + //line parser/parser.y:939 { yyVAL.node = yyDollar[1].node } case 384: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:949 + //line parser/parser.y:940 { yyVAL.node = yyDollar[1].node } case 385: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:953 + //line parser/parser.y:944 { yyVAL.node = nil } case 386: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:954 + //line parser/parser.y:945 { yyVAL.node = yyDollar[2].node } case 387: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:958 + //line parser/parser.y:949 { yyVAL.list = []node.Node{} } case 388: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:959 + //line parser/parser.y:950 { yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token)} } case 389: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:960 + //line parser/parser.y:951 { yyVAL.list = yyDollar[1].list } case 390: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:964 + //line parser/parser.y:955 { yyVAL.list = nil } case 391: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:965 + //line parser/parser.y:956 { yyVAL.list = yyDollar[1].list } case 392: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:969 + //line parser/parser.y:960 { yyVAL.node = expr.NewArray(yyDollar[1].token, yyDollar[4].token, yyDollar[3].list) } case 393: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:970 + //line parser/parser.y:961 { yyVAL.node = expr.NewShortArray(yyDollar[1].token, yyDollar[3].token, yyDollar[2].list) } case 394: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:971 + //line parser/parser.y:962 { yyVAL.node = scalar.NewString(yyDollar[1].token) } case 395: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:975 + //line parser/parser.y:966 { yyVAL.node = scalar.NewLnumber(yyDollar[1].token) } case 396: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:976 + //line parser/parser.y:967 { yyVAL.node = scalar.NewDnumber(yyDollar[1].token) } case 397: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:977 + //line parser/parser.y:968 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 398: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:978 + //line parser/parser.y:969 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 399: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:979 + //line parser/parser.y:970 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 400: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:980 + //line parser/parser.y:971 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 401: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:981 + //line parser/parser.y:972 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 402: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:982 + //line parser/parser.y:973 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 403: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:983 + //line parser/parser.y:974 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 404: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:984 + //line parser/parser.y:975 { yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token) } case 405: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:986 + //line parser/parser.y:977 { yyVAL.node = scalar.NewString(yyDollar[2].token) /* TODO: mark as Heredoc*/ } case 406: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:988 + //line parser/parser.y:979 { yyVAL.node = scalar.NewEncapsed(yyDollar[1].token, nil, yyDollar[2].token) } case 407: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:989 + //line parser/parser.y:980 { yyVAL.node = scalar.NewEncapsed(yyDollar[1].token, yyDollar[2].list, yyDollar[3].token) } case 408: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:990 + //line parser/parser.y:981 { yyVAL.node = scalar.NewEncapsed(yyDollar[1].token, yyDollar[2].list, yyDollar[3].token) } case 409: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:991 + //line parser/parser.y:982 { yyVAL.node = yyDollar[1].node } case 410: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:992 + //line parser/parser.y:983 { yyVAL.node = yyDollar[1].node } case 411: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:996 + //line parser/parser.y:987 { yyVAL.node = expr.NewConstFetch(yyDollar[1].node) } case 412: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:997 + //line parser/parser.y:988 { yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, yyDollar[3].token) } case 413: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:999 + //line parser/parser.y:990 { yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, yyDollar[3].token) } case 414: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1003 + //line parser/parser.y:994 { yyVAL.node = yyDollar[1].node } case 415: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1004 + //line parser/parser.y:995 { yyVAL.node = yyDollar[1].node } case 416: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1008 + //line parser/parser.y:999 { yyVAL.node = nil } case 417: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1009 + //line parser/parser.y:1000 { yyVAL.node = yyDollar[1].node } case 418: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1013 + //line parser/parser.y:1004 { yyVAL.node = yyDollar[1].node } case 419: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1017 + //line parser/parser.y:1008 { yyVAL.node = yyDollar[1].node } case 420: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1018 + //line parser/parser.y:1009 { yyVAL.node = yyDollar[2].node } case 421: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1019 + //line parser/parser.y:1010 { yyVAL.node = yyDollar[1].node } case 422: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1023 + //line parser/parser.y:1014 { yyVAL.node = yyDollar[1].node } case 423: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1024 + //line parser/parser.y:1015 { yyVAL.node = yyDollar[2].node } case 424: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1025 + //line parser/parser.y:1016 { yyVAL.node = yyDollar[1].node } case 425: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1029 + //line parser/parser.y:1020 { yyVAL.node = yyDollar[1].node } case 426: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1030 + //line parser/parser.y:1021 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) } case 427: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1031 + //line parser/parser.y:1022 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) } case 428: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1032 + //line parser/parser.y:1023 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) } case 429: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1034 + //line parser/parser.y:1025 { yyVAL.node = expr.NewMethodCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].list) } case 430: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1035 + //line parser/parser.y:1026 { yyVAL.node = yyDollar[1].node } case 431: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1039 + //line parser/parser.y:1030 { yyVAL.node = yyDollar[1].node } case 432: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1040 + //line parser/parser.y:1031 { yyVAL.node = yyDollar[1].node } case 433: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1041 + //line parser/parser.y:1032 { yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node) } case 434: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1045 + //line parser/parser.y:1036 { yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token)) } case 435: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1046 + //line parser/parser.y:1037 { yyVAL.node = expr.NewVariable(yyDollar[3].node) } case 436: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1047 + //line parser/parser.y:1038 { yyVAL.node = expr.NewVariable(yyDollar[2].node) } case 437: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1052 + //line parser/parser.y:1043 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) } case 438: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1054 + //line parser/parser.y:1045 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) } case 439: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1058 + //line parser/parser.y:1049 { yyVAL.node = yyDollar[1].node } case 440: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1059 + //line parser/parser.y:1050 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) } case 441: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1060 + //line parser/parser.y:1051 { yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node) } case 442: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1061 + //line parser/parser.y:1052 { yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node) } case 443: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1063 + //line parser/parser.y:1054 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) } case 444: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1065 + //line parser/parser.y:1056 { yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node) } case 445: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1069 + //line parser/parser.y:1060 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 446: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1070 + //line parser/parser.y:1061 { yyVAL.node = yyDollar[2].node } case 447: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1071 + //line parser/parser.y:1062 { yyVAL.node = yyDollar[1].node } case 448: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1075 + //line parser/parser.y:1066 { yyVAL.node = node.NewIdentifier(yyDollar[1].token) } case 449: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1076 + //line parser/parser.y:1067 { yyVAL.node = yyDollar[2].node } case 450: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1077 + //line parser/parser.y:1068 { yyVAL.node = yyDollar[1].node } case 451: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1082 + //line parser/parser.y:1073 { if yyDollar[1].list[len(yyDollar[1].list)-1] == nil { yyVAL.list = yyDollar[1].list[:len(yyDollar[1].list)-1] @@ -4761,55 +4751,55 @@ yydefault: } case 452: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1092 + //line parser/parser.y:1083 { yyVAL.node = nil } case 453: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1093 + //line parser/parser.y:1084 { yyVAL.node = yyDollar[1].node } case 454: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1098 + //line parser/parser.y:1089 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 455: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1099 + //line parser/parser.y:1090 { yyVAL.list = []node.Node{yyDollar[1].node} } case 456: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1103 + //line parser/parser.y:1094 { yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node, false) } case 457: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1104 + //line parser/parser.y:1095 { yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node, false) } case 458: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1105 + //line parser/parser.y:1096 { yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[4].node, true) } case 459: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1106 + //line parser/parser.y:1097 { yyVAL.node = expr.NewArrayItem(nil, yyDollar[2].node, true) } case 460: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:1108 + //line parser/parser.y:1099 { // TODO: Cannot use list() as standalone expression list := expr.NewList(yyDollar[5].list) @@ -4817,7 +4807,7 @@ yydefault: } case 461: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1114 + //line parser/parser.y:1105 { // TODO: Cannot use list() as standalone expression list := expr.NewList(yyDollar[3].list) @@ -4825,80 +4815,81 @@ yydefault: } case 462: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1122 + //line parser/parser.y:1113 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 463: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1123 + //line parser/parser.y:1114 { yyVAL.list = append(yyDollar[1].list, scalar.NewEncapsedStringPart(yyDollar[2].token)) } case 464: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1124 + //line parser/parser.y:1115 { yyVAL.list = []node.Node{yyDollar[1].node} } case 465: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1125 + //line parser/parser.y:1116 { yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token), yyDollar[2].node} } case 466: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1129 + //line parser/parser.y:1120 { yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token)) } case 467: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1130 + //line parser/parser.y:1121 { yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(node.NewIdentifier(yyDollar[1].token)), yyDollar[3].node) } case 468: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1131 + //line parser/parser.y:1122 { yyVAL.node = expr.NewPropertyFetch(expr.NewVariable(node.NewIdentifier(yyDollar[1].token)), node.NewIdentifier(yyDollar[3].token)) } case 469: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1132 + //line parser/parser.y:1123 { yyVAL.node = expr.NewVariable(yyDollar[2].node) } case 470: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1133 + //line parser/parser.y:1124 { yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[2].token)) } case 471: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:1135 + //line parser/parser.y:1126 { yyVAL.node = expr.NewArrayDimFetch(expr.NewVariable(node.NewIdentifier(yyDollar[2].token)), yyDollar[4].node) } case 472: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1136 + //line parser/parser.y:1127 { yyVAL.node = yyDollar[2].node } case 473: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1139 + //line parser/parser.y:1130 { yyVAL.node = scalar.NewString(yyDollar[1].token) } case 474: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1141 + //line parser/parser.y:1132 { + // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(yyDollar[1].token.Value); err == nil { yyVAL.node = scalar.NewLnumber(yyDollar[1].token) } else { @@ -4907,8 +4898,9 @@ yydefault: } case 475: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1149 + //line parser/parser.y:1141 { + // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi(yyDollar[2].token.Value); err == nil { yyVAL.node = expr.NewUnaryMinus(scalar.NewLnumber(yyDollar[2].token)) } else { @@ -4918,67 +4910,67 @@ yydefault: } case 476: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1157 + //line parser/parser.y:1150 { yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token)) } case 477: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:1161 + //line parser/parser.y:1154 { yyVAL.node = expr.NewIsset(yyDollar[3].list) } case 478: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1162 + //line parser/parser.y:1155 { yyVAL.node = expr.NewEmpty(yyDollar[3].node) } case 479: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1163 + //line parser/parser.y:1156 { yyVAL.node = expr.NewInclude(yyDollar[2].node) } case 480: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1164 + //line parser/parser.y:1157 { yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node) } case 481: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1165 + //line parser/parser.y:1158 { yyVAL.node = expr.NewEval(yyDollar[3].node) } case 482: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1166 + //line parser/parser.y:1159 { yyVAL.node = expr.NewRequire(yyDollar[2].node) } case 483: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1167 + //line parser/parser.y:1160 { yyVAL.node = expr.NewRequireOnce(yyDollar[2].node) } case 484: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1171 + //line parser/parser.y:1164 { yyVAL.list = []node.Node{yyDollar[1].node} } case 485: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1172 + //line parser/parser.y:1165 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 486: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1176 + //line parser/parser.y:1169 { yyVAL.node = yyDollar[1].node } diff --git a/parser/parser.y b/parser/parser.y index 1fe5815..11201f4 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -602,31 +602,22 @@ non_empty_parameter_list: parameter: optional_type is_reference is_variadic T_VARIABLE { - $$ = node.NewSimpleNode("Parameter"). - Append($1). - Attribute("is_reference", $2). - Attribute("is_variadic", $3). - Attribute("var", $4.String()); + $$ = node.NewParameter($1, expr.NewVariable(node.NewIdentifier($4)), nil, $2 == "true", $3 == "true") } | optional_type is_reference is_variadic T_VARIABLE '=' expr { - $$ = node.NewSimpleNode("Parameter"). - Append($1). - Attribute("is_reference", $2). - Attribute("is_variadic", $3). - Attribute("var", $4.String()). - Append($6); + $$ = node.NewParameter($1, expr.NewVariable(node.NewIdentifier($4)), $6, $2 == "true", $3 == "true") } ; optional_type: - /* empty */ { $$ = node.NewSimpleNode("No type") } + /* empty */ { $$ = nil } | type_expr { $$ = $1; } ; type_expr: type { $$ = $1; } - | '?' type { $$ = $2; $$.Attribute("nullable", "true") } + | '?' type { $$ = node.NewNullable($2) } ; type: @@ -651,8 +642,8 @@ non_empty_argument_list: ; argument: - expr { $$ = $1; } - | T_ELLIPSIS expr { $$ = node.NewSimpleNode("Unpack").Append($2) } + expr { $$ = node.NewArgument($1, false) } + | T_ELLIPSIS expr { $$ = node.NewArgument($2, true) } ; global_var_list: