diff --git a/README.md b/README.md index 524a1ae..74fdb8b 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ A Parser for PHP written in Go inspired by [Nikic PHP Parser](https://github.com - [x] AST visitor - [x] AST dumper - [x] node position -- [ ] handling comments +- [x] handling comments - [ ] Tests - [ ] Documentation - [ ] PHP 5 syntax analyzer diff --git a/dumper.go b/dumper.go index 715e344..1f1cd21 100644 --- a/dumper.go +++ b/dumper.go @@ -22,6 +22,13 @@ func (d dumper) EnterNode(n node.Node) bool { } fmt.Println() + if c := n.Comments(); c != nil && len(*c) > 0 { + fmt.Printf("%vcomments:\n", d.indent+" ") + for _, cc := range *c { + fmt.Printf("%v%q\n", d.indent+" ", cc) + } + } + return true } diff --git a/node/argument.go b/node/argument.go index 551a6f4..6bde221 100644 --- a/node/argument.go +++ b/node/argument.go @@ -1,13 +1,17 @@ package node +import "github.com/z7zmey/php-parser/comment" + type Argument struct { position *Position + comments *[]comment.Comment Variadic bool Expr Node } func NewArgument(Expression Node, Variadic bool) Node { return &Argument{ + nil, nil, Variadic, Expression, @@ -29,6 +33,15 @@ func (n Argument) SetPosition(p *Position) Node { return n } +func (n Argument) Comments() *[]comment.Comment { + return n.comments +} + +func (n Argument) SetComments(c []comment.Comment) Node { + n.comments = &c + return n +} + func (n Argument) Walk(v Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/array.go b/node/expr/array.go index d54a169..c13f987 100644 --- a/node/expr/array.go +++ b/node/expr/array.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Array struct { position *node.Position + comments *[]comment.Comment Items []node.Node } func NewArray(Items []node.Node) node.Node { return &Array{ + nil, nil, Items, } @@ -29,6 +32,15 @@ func (n Array) SetPosition(p *node.Position) node.Node { return n } +func (n Array) Comments() *[]comment.Comment { + return n.comments +} + +func (n Array) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Array) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/array_dim_fetch.go b/node/expr/array_dim_fetch.go index ec93ffa..b2140a4 100644 --- a/node/expr/array_dim_fetch.go +++ b/node/expr/array_dim_fetch.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ArrayDimFetch struct { position *node.Position + comments *[]comment.Comment Variable node.Node Dim node.Node } func NewArrayDimFetch(Variable node.Node, Dim node.Node) node.Node { return &ArrayDimFetch{ + nil, nil, Variable, Dim, @@ -31,6 +34,15 @@ func (n ArrayDimFetch) SetPosition(p *node.Position) node.Node { return n } +func (n ArrayDimFetch) Comments() *[]comment.Comment { + return n.comments +} + +func (n ArrayDimFetch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ArrayDimFetch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/array_item.go b/node/expr/array_item.go index 72c1974..8548895 100644 --- a/node/expr/array_item.go +++ b/node/expr/array_item.go @@ -1,11 +1,13 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ArrayItem struct { position *node.Position + comments *[]comment.Comment ByRef bool Key node.Node Val node.Node @@ -13,6 +15,7 @@ type ArrayItem struct { func NewArrayItem(Key node.Node, Val node.Node, ByRef bool) node.Node { return &ArrayItem{ + nil, nil, ByRef, Key, @@ -35,6 +38,15 @@ func (n ArrayItem) SetPosition(p *node.Position) node.Node { return n } +func (n ArrayItem) Comments() *[]comment.Comment { + return n.comments +} + +func (n ArrayItem) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ArrayItem) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/assign.go b/node/expr/assign_op/assign.go index 58668ff..6278cab 100644 --- a/node/expr/assign_op/assign.go +++ b/node/expr/assign_op/assign.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Assign struct { func NewAssign(Variable node.Node, Expression node.Node) node.Node { return &Assign{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Assign) SetPosition(p *node.Position) node.Node { return n } +func (n Assign) Comments() *[]comment.Comment { + return n.comments +} + +func (n Assign) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Assign) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/assign_op.go b/node/expr/assign_op/assign_op.go index 41d1e0e..5c40f2f 100644 --- a/node/expr/assign_op/assign_op.go +++ b/node/expr/assign_op/assign_op.go @@ -1,11 +1,13 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type AssignOp struct { position *node.Position + comments *[]comment.Comment Variable node.Node Expression node.Node } diff --git a/node/expr/assign_op/assign_ref.go b/node/expr/assign_op/assign_ref.go index caecb12..36409ca 100644 --- a/node/expr/assign_op/assign_ref.go +++ b/node/expr/assign_op/assign_ref.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type AssignRef struct { func NewAssignRef(Variable node.Node, Expression node.Node) node.Node { return &AssignRef{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n AssignRef) SetPosition(p *node.Position) node.Node { return n } +func (n AssignRef) Comments() *[]comment.Comment { + return n.comments +} + +func (n AssignRef) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n AssignRef) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/bitwise_and.go b/node/expr/assign_op/bitwise_and.go index 5aebcdf..35bbfe3 100644 --- a/node/expr/assign_op/bitwise_and.go +++ b/node/expr/assign_op/bitwise_and.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BitwiseAnd struct { func NewBitwiseAnd(Variable node.Node, Expression node.Node) node.Node { return &BitwiseAnd{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BitwiseAnd) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseAnd) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseAnd) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseAnd) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/bitwise_or.go b/node/expr/assign_op/bitwise_or.go index 2ea40bb..5ed4c31 100644 --- a/node/expr/assign_op/bitwise_or.go +++ b/node/expr/assign_op/bitwise_or.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BitwiseOr struct { func NewBitwiseOr(Variable node.Node, Expression node.Node) node.Node { return &BitwiseOr{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BitwiseOr) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseOr) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseOr) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseOr) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/bitwise_xor.go b/node/expr/assign_op/bitwise_xor.go index 66d68ce..cb776f8 100644 --- a/node/expr/assign_op/bitwise_xor.go +++ b/node/expr/assign_op/bitwise_xor.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BitwiseXor struct { func NewBitwiseXor(Variable node.Node, Expression node.Node) node.Node { return &BitwiseXor{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BitwiseXor) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseXor) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseXor) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseXor) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/concat.go b/node/expr/assign_op/concat.go index 80dfbf9..1d4a7e3 100644 --- a/node/expr/assign_op/concat.go +++ b/node/expr/assign_op/concat.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Concat struct { func NewConcat(Variable node.Node, Expression node.Node) node.Node { return &Concat{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Concat) SetPosition(p *node.Position) node.Node { return n } +func (n Concat) Comments() *[]comment.Comment { + return n.comments +} + +func (n Concat) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Concat) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/div.go b/node/expr/assign_op/div.go index 0fe1904..43552a7 100644 --- a/node/expr/assign_op/div.go +++ b/node/expr/assign_op/div.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Div struct { func NewDiv(Variable node.Node, Expression node.Node) node.Node { return &Div{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Div) SetPosition(p *node.Position) node.Node { return n } +func (n Div) Comments() *[]comment.Comment { + return n.comments +} + +func (n Div) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Div) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/minus.go b/node/expr/assign_op/minus.go index 6fea61d..efeb765 100644 --- a/node/expr/assign_op/minus.go +++ b/node/expr/assign_op/minus.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Minus struct { func NewMinus(Variable node.Node, Expression node.Node) node.Node { return &Minus{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Minus) SetPosition(p *node.Position) node.Node { return n } +func (n Minus) Comments() *[]comment.Comment { + return n.comments +} + +func (n Minus) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Minus) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/mod.go b/node/expr/assign_op/mod.go index 3a0a1f3..d58882e 100644 --- a/node/expr/assign_op/mod.go +++ b/node/expr/assign_op/mod.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Mod struct { func NewMod(Variable node.Node, Expression node.Node) node.Node { return &Mod{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Mod) SetPosition(p *node.Position) node.Node { return n } +func (n Mod) Comments() *[]comment.Comment { + return n.comments +} + +func (n Mod) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Mod) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/mul.go b/node/expr/assign_op/mul.go index 610c018..06bcb4b 100644 --- a/node/expr/assign_op/mul.go +++ b/node/expr/assign_op/mul.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Mul struct { func NewMul(Variable node.Node, Expression node.Node) node.Node { return &Mul{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Mul) SetPosition(p *node.Position) node.Node { return n } +func (n Mul) Comments() *[]comment.Comment { + return n.comments +} + +func (n Mul) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Mul) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/plus.go b/node/expr/assign_op/plus.go index 25749a4..1d6173a 100644 --- a/node/expr/assign_op/plus.go +++ b/node/expr/assign_op/plus.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Plus struct { func NewPlus(Variable node.Node, Expression node.Node) node.Node { return &Plus{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Plus) SetPosition(p *node.Position) node.Node { return n } +func (n Plus) Comments() *[]comment.Comment { + return n.comments +} + +func (n Plus) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Plus) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/pow.go b/node/expr/assign_op/pow.go index 7192955..be23df8 100644 --- a/node/expr/assign_op/pow.go +++ b/node/expr/assign_op/pow.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Pow struct { func NewPow(Variable node.Node, Expression node.Node) node.Node { return &Pow{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Pow) SetPosition(p *node.Position) node.Node { return n } +func (n Pow) Comments() *[]comment.Comment { + return n.comments +} + +func (n Pow) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Pow) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/shift_left.go b/node/expr/assign_op/shift_left.go index 385888c..6cc46dc 100644 --- a/node/expr/assign_op/shift_left.go +++ b/node/expr/assign_op/shift_left.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type ShiftLeft struct { func NewShiftLeft(Variable node.Node, Expression node.Node) node.Node { return &ShiftLeft{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n ShiftLeft) SetPosition(p *node.Position) node.Node { return n } +func (n ShiftLeft) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShiftLeft) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShiftLeft) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/assign_op/shift_right.go b/node/expr/assign_op/shift_right.go index f68bbfa..db26af0 100644 --- a/node/expr/assign_op/shift_right.go +++ b/node/expr/assign_op/shift_right.go @@ -1,6 +1,7 @@ package assign_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type ShiftRight struct { func NewShiftRight(Variable node.Node, Expression node.Node) node.Node { return &ShiftRight{ AssignOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n ShiftRight) SetPosition(p *node.Position) node.Node { return n } +func (n ShiftRight) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShiftRight) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShiftRight) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/binary_op.go b/node/expr/binary_op/binary_op.go index 2c43a28..897534d 100644 --- a/node/expr/binary_op/binary_op.go +++ b/node/expr/binary_op/binary_op.go @@ -1,11 +1,13 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type BinaryOp struct { position *node.Position + comments *[]comment.Comment Left node.Node Right node.Node } diff --git a/node/expr/binary_op/bitwise_and.go b/node/expr/binary_op/bitwise_and.go index fad24f9..9723440 100644 --- a/node/expr/binary_op/bitwise_and.go +++ b/node/expr/binary_op/bitwise_and.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BitwiseAnd struct { func NewBitwiseAnd(Variable node.Node, Expression node.Node) node.Node { return &BitwiseAnd{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BitwiseAnd) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseAnd) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseAnd) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseAnd) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/bitwise_or.go b/node/expr/binary_op/bitwise_or.go index 97a8a3e..d4b65c6 100644 --- a/node/expr/binary_op/bitwise_or.go +++ b/node/expr/binary_op/bitwise_or.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BitwiseOr struct { func NewBitwiseOr(Variable node.Node, Expression node.Node) node.Node { return &BitwiseOr{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BitwiseOr) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseOr) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseOr) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseOr) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/bitwise_xor.go b/node/expr/binary_op/bitwise_xor.go index 941aaac..1460f86 100644 --- a/node/expr/binary_op/bitwise_xor.go +++ b/node/expr/binary_op/bitwise_xor.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BitwiseXor struct { func NewBitwiseXor(Variable node.Node, Expression node.Node) node.Node { return &BitwiseXor{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BitwiseXor) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseXor) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseXor) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseXor) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/boolean_and.go b/node/expr/binary_op/boolean_and.go index 1d90d35..a16f6ab 100644 --- a/node/expr/binary_op/boolean_and.go +++ b/node/expr/binary_op/boolean_and.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BooleanAnd struct { func NewBooleanAnd(Variable node.Node, Expression node.Node) node.Node { return &BooleanAnd{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BooleanAnd) SetPosition(p *node.Position) node.Node { return n } +func (n BooleanAnd) Comments() *[]comment.Comment { + return n.comments +} + +func (n BooleanAnd) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BooleanAnd) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/boolean_or.go b/node/expr/binary_op/boolean_or.go index da4938e..0cec937 100644 --- a/node/expr/binary_op/boolean_or.go +++ b/node/expr/binary_op/boolean_or.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type BooleanOr struct { func NewBooleanOr(Variable node.Node, Expression node.Node) node.Node { return &BooleanOr{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n BooleanOr) SetPosition(p *node.Position) node.Node { return n } +func (n BooleanOr) Comments() *[]comment.Comment { + return n.comments +} + +func (n BooleanOr) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BooleanOr) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/coalesce.go b/node/expr/binary_op/coalesce.go index 5425c03..db71d83 100644 --- a/node/expr/binary_op/coalesce.go +++ b/node/expr/binary_op/coalesce.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Coalesce struct { func NewCoalesce(Variable node.Node, Expression node.Node) node.Node { return &Coalesce{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Coalesce) SetPosition(p *node.Position) node.Node { return n } +func (n Coalesce) Comments() *[]comment.Comment { + return n.comments +} + +func (n Coalesce) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Coalesce) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/concat.go b/node/expr/binary_op/concat.go index 5786a9a..303e834 100644 --- a/node/expr/binary_op/concat.go +++ b/node/expr/binary_op/concat.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Concat struct { func NewConcat(Variable node.Node, Expression node.Node) node.Node { return &Concat{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Concat) SetPosition(p *node.Position) node.Node { return n } +func (n Concat) Comments() *[]comment.Comment { + return n.comments +} + +func (n Concat) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Concat) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/div.go b/node/expr/binary_op/div.go index c5fb5c1..f449fce 100644 --- a/node/expr/binary_op/div.go +++ b/node/expr/binary_op/div.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Div struct { func NewDiv(Variable node.Node, Expression node.Node) node.Node { return &Div{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Div) SetPosition(p *node.Position) node.Node { return n } +func (n Div) Comments() *[]comment.Comment { + return n.comments +} + +func (n Div) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Div) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/equal.go b/node/expr/binary_op/equal.go index 9fb5aa3..4681b2e 100644 --- a/node/expr/binary_op/equal.go +++ b/node/expr/binary_op/equal.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Equal struct { func NewEqual(Variable node.Node, Expression node.Node) node.Node { return &Equal{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Equal) SetPosition(p *node.Position) node.Node { return n } +func (n Equal) Comments() *[]comment.Comment { + return n.comments +} + +func (n Equal) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Equal) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/greater.go b/node/expr/binary_op/greater.go index 29901d2..041f1b7 100644 --- a/node/expr/binary_op/greater.go +++ b/node/expr/binary_op/greater.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Greater struct { func NewGreater(Variable node.Node, Expression node.Node) node.Node { return &Greater{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Greater) SetPosition(p *node.Position) node.Node { return n } +func (n Greater) Comments() *[]comment.Comment { + return n.comments +} + +func (n Greater) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Greater) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/greater_or_equal.go b/node/expr/binary_op/greater_or_equal.go index 6cd4c45..77a3bc0 100644 --- a/node/expr/binary_op/greater_or_equal.go +++ b/node/expr/binary_op/greater_or_equal.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type GreaterOrEqual struct { func NewGreaterOrEqual(Variable node.Node, Expression node.Node) node.Node { return &GreaterOrEqual{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n GreaterOrEqual) SetPosition(p *node.Position) node.Node { return n } +func (n GreaterOrEqual) Comments() *[]comment.Comment { + return n.comments +} + +func (n GreaterOrEqual) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n GreaterOrEqual) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/identical.go b/node/expr/binary_op/identical.go index b7f544b..14b368c 100644 --- a/node/expr/binary_op/identical.go +++ b/node/expr/binary_op/identical.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Identical struct { func NewIdentical(Variable node.Node, Expression node.Node) node.Node { return &Identical{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Identical) SetPosition(p *node.Position) node.Node { return n } +func (n Identical) Comments() *[]comment.Comment { + return n.comments +} + +func (n Identical) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Identical) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/logical_and.go b/node/expr/binary_op/logical_and.go index a9400d3..97173f7 100644 --- a/node/expr/binary_op/logical_and.go +++ b/node/expr/binary_op/logical_and.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type LogicalAnd struct { func NewLogicalAnd(Variable node.Node, Expression node.Node) node.Node { return &LogicalAnd{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n LogicalAnd) SetPosition(p *node.Position) node.Node { return n } +func (n LogicalAnd) Comments() *[]comment.Comment { + return n.comments +} + +func (n LogicalAnd) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n LogicalAnd) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/logical_or.go b/node/expr/binary_op/logical_or.go index 84fa84d..6b9c335 100644 --- a/node/expr/binary_op/logical_or.go +++ b/node/expr/binary_op/logical_or.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type LogicalOr struct { func NewLogicalOr(Variable node.Node, Expression node.Node) node.Node { return &LogicalOr{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n LogicalOr) SetPosition(p *node.Position) node.Node { return n } +func (n LogicalOr) Comments() *[]comment.Comment { + return n.comments +} + +func (n LogicalOr) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n LogicalOr) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/logical_xor.go b/node/expr/binary_op/logical_xor.go index cdc5830..f034f67 100644 --- a/node/expr/binary_op/logical_xor.go +++ b/node/expr/binary_op/logical_xor.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type LogicalXor struct { func NewLogicalXor(Variable node.Node, Expression node.Node) node.Node { return &LogicalXor{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n LogicalXor) SetPosition(p *node.Position) node.Node { return n } +func (n LogicalXor) Comments() *[]comment.Comment { + return n.comments +} + +func (n LogicalXor) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n LogicalXor) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/minus.go b/node/expr/binary_op/minus.go index 4b0804e..cc3ccf4 100644 --- a/node/expr/binary_op/minus.go +++ b/node/expr/binary_op/minus.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Minus struct { func NewMinus(Variable node.Node, Expression node.Node) node.Node { return &Minus{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Minus) SetPosition(p *node.Position) node.Node { return n } +func (n Minus) Comments() *[]comment.Comment { + return n.comments +} + +func (n Minus) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Minus) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/mod.go b/node/expr/binary_op/mod.go index 509b9c9..f385912 100644 --- a/node/expr/binary_op/mod.go +++ b/node/expr/binary_op/mod.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Mod struct { func NewMod(Variable node.Node, Expression node.Node) node.Node { return &Mod{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Mod) SetPosition(p *node.Position) node.Node { return n } +func (n Mod) Comments() *[]comment.Comment { + return n.comments +} + +func (n Mod) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Mod) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/mul.go b/node/expr/binary_op/mul.go index 05c471c..49b49f5 100644 --- a/node/expr/binary_op/mul.go +++ b/node/expr/binary_op/mul.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Mul struct { func NewMul(Variable node.Node, Expression node.Node) node.Node { return &Mul{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Mul) SetPosition(p *node.Position) node.Node { return n } +func (n Mul) Comments() *[]comment.Comment { + return n.comments +} + +func (n Mul) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Mul) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/not_equal.go b/node/expr/binary_op/not_equal.go index 9bbadf2..8fc23fe 100644 --- a/node/expr/binary_op/not_equal.go +++ b/node/expr/binary_op/not_equal.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type NotEqual struct { func NewNotEqual(Variable node.Node, Expression node.Node) node.Node { return &NotEqual{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n NotEqual) SetPosition(p *node.Position) node.Node { return n } +func (n NotEqual) Comments() *[]comment.Comment { + return n.comments +} + +func (n NotEqual) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n NotEqual) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/not_identical.go b/node/expr/binary_op/not_identical.go index b2d736e..1414b67 100644 --- a/node/expr/binary_op/not_identical.go +++ b/node/expr/binary_op/not_identical.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type NotIdentical struct { func NewNotIdentical(Variable node.Node, Expression node.Node) node.Node { return &NotIdentical{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n NotIdentical) SetPosition(p *node.Position) node.Node { return n } +func (n NotIdentical) Comments() *[]comment.Comment { + return n.comments +} + +func (n NotIdentical) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n NotIdentical) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/plus.go b/node/expr/binary_op/plus.go index 88ff8b9..05712be 100644 --- a/node/expr/binary_op/plus.go +++ b/node/expr/binary_op/plus.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Plus struct { func NewPlus(Variable node.Node, Expression node.Node) node.Node { return &Plus{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Plus) SetPosition(p *node.Position) node.Node { return n } +func (n Plus) Comments() *[]comment.Comment { + return n.comments +} + +func (n Plus) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Plus) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/pow.go b/node/expr/binary_op/pow.go index 01110a0..28b9a4f 100644 --- a/node/expr/binary_op/pow.go +++ b/node/expr/binary_op/pow.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Pow struct { func NewPow(Variable node.Node, Expression node.Node) node.Node { return &Pow{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Pow) SetPosition(p *node.Position) node.Node { return n } +func (n Pow) Comments() *[]comment.Comment { + return n.comments +} + +func (n Pow) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Pow) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/shift_left.go b/node/expr/binary_op/shift_left.go index 1e034e1..3c2d6fe 100644 --- a/node/expr/binary_op/shift_left.go +++ b/node/expr/binary_op/shift_left.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type ShiftLeft struct { func NewShiftLeft(Variable node.Node, Expression node.Node) node.Node { return &ShiftLeft{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n ShiftLeft) SetPosition(p *node.Position) node.Node { return n } +func (n ShiftLeft) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShiftLeft) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShiftLeft) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/shift_right.go b/node/expr/binary_op/shift_right.go index 6cb57f4..618f212 100644 --- a/node/expr/binary_op/shift_right.go +++ b/node/expr/binary_op/shift_right.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type ShiftRight struct { func NewShiftRight(Variable node.Node, Expression node.Node) node.Node { return &ShiftRight{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n ShiftRight) SetPosition(p *node.Position) node.Node { return n } +func (n ShiftRight) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShiftRight) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShiftRight) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/smaller.go b/node/expr/binary_op/smaller.go index 7a403c7..5a02365 100644 --- a/node/expr/binary_op/smaller.go +++ b/node/expr/binary_op/smaller.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Smaller struct { func NewSmaller(Variable node.Node, Expression node.Node) node.Node { return &Smaller{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Smaller) SetPosition(p *node.Position) node.Node { return n } +func (n Smaller) Comments() *[]comment.Comment { + return n.comments +} + +func (n Smaller) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Smaller) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/smaller_or_equal.go b/node/expr/binary_op/smaller_or_equal.go index 3dde672..8345562 100644 --- a/node/expr/binary_op/smaller_or_equal.go +++ b/node/expr/binary_op/smaller_or_equal.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type SmallerOrEqual struct { func NewSmallerOrEqual(Variable node.Node, Expression node.Node) node.Node { return &SmallerOrEqual{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n SmallerOrEqual) SetPosition(p *node.Position) node.Node { return n } +func (n SmallerOrEqual) Comments() *[]comment.Comment { + return n.comments +} + +func (n SmallerOrEqual) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n SmallerOrEqual) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/binary_op/spaceship.go b/node/expr/binary_op/spaceship.go index 52a5146..999651a 100644 --- a/node/expr/binary_op/spaceship.go +++ b/node/expr/binary_op/spaceship.go @@ -1,6 +1,7 @@ package binary_op import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type Spaceship struct { func NewSpaceship(Variable node.Node, Expression node.Node) node.Node { return &Spaceship{ BinaryOp{ + nil, nil, Variable, Expression, @@ -31,6 +33,15 @@ func (n Spaceship) SetPosition(p *node.Position) node.Node { return n } +func (n Spaceship) Comments() *[]comment.Comment { + return n.comments +} + +func (n Spaceship) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Spaceship) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/bitwise_not.go b/node/expr/bitwise_not.go index 8b62ced..05c0721 100644 --- a/node/expr/bitwise_not.go +++ b/node/expr/bitwise_not.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type BitwiseNot struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewBitwiseNot(Expression node.Node) node.Node { return &BitwiseNot{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n BitwiseNot) SetPosition(p *node.Position) node.Node { return n } +func (n BitwiseNot) Comments() *[]comment.Comment { + return n.comments +} + +func (n BitwiseNot) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BitwiseNot) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/boolean_not.go b/node/expr/boolean_not.go index 96f3288..18ef3e4 100644 --- a/node/expr/boolean_not.go +++ b/node/expr/boolean_not.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type BooleanNot struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewBooleanNot(Expression node.Node) node.Node { return &BooleanNot{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n BooleanNot) SetPosition(p *node.Position) node.Node { return n } +func (n BooleanNot) Comments() *[]comment.Comment { + return n.comments +} + +func (n BooleanNot) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n BooleanNot) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast.go b/node/expr/cast/cast.go index f632f15..12d3eb4 100644 --- a/node/expr/cast/cast.go +++ b/node/expr/cast/cast.go @@ -1,10 +1,12 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Cast struct { position *node.Position + comments *[]comment.Comment Expr node.Node } diff --git a/node/expr/cast/cast_array.go b/node/expr/cast/cast_array.go index a82c4da..51e47c4 100644 --- a/node/expr/cast/cast_array.go +++ b/node/expr/cast/cast_array.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastArray struct { func NewCastArray(Expr node.Node) node.Node { return &CastArray{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastArray) SetPosition(p *node.Position) node.Node { return n } +func (n CastArray) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastArray) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastArray) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast_bool.go b/node/expr/cast/cast_bool.go index 0ba23d1..6d25a75 100644 --- a/node/expr/cast/cast_bool.go +++ b/node/expr/cast/cast_bool.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastBool struct { func NewCastBool(Expr node.Node) node.Node { return &CastBool{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastBool) SetPosition(p *node.Position) node.Node { return n } +func (n CastBool) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastBool) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastBool) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast_double.go b/node/expr/cast/cast_double.go index 0f7a600..820578b 100644 --- a/node/expr/cast/cast_double.go +++ b/node/expr/cast/cast_double.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastDouble struct { func NewCastDouble(Expr node.Node) node.Node { return &CastDouble{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastDouble) SetPosition(p *node.Position) node.Node { return n } +func (n CastDouble) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastDouble) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastDouble) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast_int.go b/node/expr/cast/cast_int.go index c1b6572..fed7775 100644 --- a/node/expr/cast/cast_int.go +++ b/node/expr/cast/cast_int.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastInt struct { func NewCastInt(Expr node.Node) node.Node { return &CastInt{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastInt) SetPosition(p *node.Position) node.Node { return n } +func (n CastInt) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastInt) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastInt) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast_object.go b/node/expr/cast/cast_object.go index 4f5259f..1c3ade0 100644 --- a/node/expr/cast/cast_object.go +++ b/node/expr/cast/cast_object.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastObject struct { func NewCastObject(Expr node.Node) node.Node { return &CastObject{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastObject) SetPosition(p *node.Position) node.Node { return n } +func (n CastObject) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastObject) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastObject) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast_string.go b/node/expr/cast/cast_string.go index 589ec60..f73969f 100644 --- a/node/expr/cast/cast_string.go +++ b/node/expr/cast/cast_string.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastString struct { func NewCastString(Expr node.Node) node.Node { return &CastString{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastString) SetPosition(p *node.Position) node.Node { return n } +func (n CastString) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastString) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastString) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/cast/cast_unset.go b/node/expr/cast/cast_unset.go index 9d510ab..8a6fb48 100644 --- a/node/expr/cast/cast_unset.go +++ b/node/expr/cast/cast_unset.go @@ -1,6 +1,7 @@ package cast import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) @@ -11,6 +12,7 @@ type CastUnset struct { func NewCastUnset(Expr node.Node) node.Node { return &CastUnset{ Cast{ + nil, nil, Expr, }, @@ -30,6 +32,15 @@ func (n CastUnset) SetPosition(p *node.Position) node.Node { return n } +func (n CastUnset) Comments() *[]comment.Comment { + return n.comments +} + +func (n CastUnset) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n CastUnset) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/class_const_fetch.go b/node/expr/class_const_fetch.go index 3bb9e53..e220f98 100644 --- a/node/expr/class_const_fetch.go +++ b/node/expr/class_const_fetch.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ClassConstFetch struct { position *node.Position + comments *[]comment.Comment Class node.Node ConstantName node.Node } func NewClassConstFetch(Class node.Node, ConstantName node.Node) node.Node { return &ClassConstFetch{ + nil, nil, Class, ConstantName, @@ -31,6 +34,15 @@ func (n ClassConstFetch) SetPosition(p *node.Position) node.Node { return n } +func (n ClassConstFetch) Comments() *[]comment.Comment { + return n.comments +} + +func (n ClassConstFetch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ClassConstFetch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/clone.go b/node/expr/clone.go index 1cfa618..e25eec4 100644 --- a/node/expr/clone.go +++ b/node/expr/clone.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Clone struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewClone(Expression node.Node) node.Node { return &Clone{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n Clone) SetPosition(p *node.Position) node.Node { return n } +func (n Clone) Comments() *[]comment.Comment { + return n.comments +} + +func (n Clone) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Clone) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/closure.go b/node/expr/closure.go index 5481b13..64143d2 100644 --- a/node/expr/closure.go +++ b/node/expr/closure.go @@ -1,11 +1,13 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Closure struct { position *node.Position + comments *[]comment.Comment ReturnsRef bool Static bool PhpDocComment string @@ -17,6 +19,7 @@ type Closure struct { func NewClosure(Params []node.Node, Uses []node.Node, ReturnType node.Node, Stmts []node.Node, Static bool, ReturnsRef bool, PhpDocComment string) node.Node { return &Closure{ + nil, nil, ReturnsRef, Static, @@ -45,6 +48,15 @@ func (n Closure) SetPosition(p *node.Position) node.Node { return n } +func (n Closure) Comments() *[]comment.Comment { + return n.comments +} + +func (n Closure) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Closure) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/closure_use.go b/node/expr/closure_use.go index 235fc3d..5a9dad2 100644 --- a/node/expr/closure_use.go +++ b/node/expr/closure_use.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ClusureUse struct { position *node.Position + comments *[]comment.Comment ByRef bool Variable node.Node } func NewClusureUse(Variable node.Node, ByRef bool) node.Node { return &ClusureUse{ + nil, nil, ByRef, Variable, @@ -33,6 +36,15 @@ func (n ClusureUse) SetPosition(p *node.Position) node.Node { return n } +func (n ClusureUse) Comments() *[]comment.Comment { + return n.comments +} + +func (n ClusureUse) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ClusureUse) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/const_fetch.go b/node/expr/const_fetch.go index af1b540..31115f5 100644 --- a/node/expr/const_fetch.go +++ b/node/expr/const_fetch.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ConstFetch struct { position *node.Position + comments *[]comment.Comment Constant node.Node } func NewConstFetch(Constant node.Node) node.Node { return &ConstFetch{ + nil, nil, Constant, } @@ -29,6 +32,15 @@ func (n ConstFetch) SetPosition(p *node.Position) node.Node { return n } +func (n ConstFetch) Comments() *[]comment.Comment { + return n.comments +} + +func (n ConstFetch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ConstFetch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/empty.go b/node/expr/empty.go index 73d6b8d..5080f86 100644 --- a/node/expr/empty.go +++ b/node/expr/empty.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Empty struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewEmpty(Expression node.Node) node.Node { return &Empty{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n Empty) SetPosition(p *node.Position) node.Node { return n } +func (n Empty) Comments() *[]comment.Comment { + return n.comments +} + +func (n Empty) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Empty) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/error_suppress.go b/node/expr/error_suppress.go index 7c2f966..7a280a8 100644 --- a/node/expr/error_suppress.go +++ b/node/expr/error_suppress.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ErrorSuppress struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewErrorSuppress(Expression node.Node) node.Node { return &ErrorSuppress{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n ErrorSuppress) SetPosition(p *node.Position) node.Node { return n } +func (n ErrorSuppress) Comments() *[]comment.Comment { + return n.comments +} + +func (n ErrorSuppress) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ErrorSuppress) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/eval.go b/node/expr/eval.go index 10e201b..8183248 100644 --- a/node/expr/eval.go +++ b/node/expr/eval.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Eval struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewEval(Expression node.Node) node.Node { return &Eval{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n Eval) SetPosition(p *node.Position) node.Node { return n } +func (n Eval) Comments() *[]comment.Comment { + return n.comments +} + +func (n Eval) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Eval) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/exit.go b/node/expr/exit.go index 43060fe..de55874 100644 --- a/node/expr/exit.go +++ b/node/expr/exit.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Exit struct { position *node.Position + comments *[]comment.Comment Expr node.Node IsDie bool } func NewExit(Expr node.Node, IsDie bool) node.Node { return &Exit{ + nil, nil, Expr, IsDie, @@ -33,6 +36,15 @@ func (n Exit) SetPosition(p *node.Position) node.Node { return n } +func (n Exit) Comments() *[]comment.Comment { + return n.comments +} + +func (n Exit) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Exit) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/function_call.go b/node/expr/function_call.go index f76b8ff..b988b59 100644 --- a/node/expr/function_call.go +++ b/node/expr/function_call.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type FunctionCall struct { position *node.Position + comments *[]comment.Comment Function node.Node Arguments []node.Node } func NewFunctionCall(Function node.Node, Arguments []node.Node) node.Node { return &FunctionCall{ + nil, nil, Function, Arguments, @@ -31,6 +34,15 @@ func (n FunctionCall) SetPosition(p *node.Position) node.Node { return n } +func (n FunctionCall) Comments() *[]comment.Comment { + return n.comments +} + +func (n FunctionCall) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n FunctionCall) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/include.go b/node/expr/include.go index 3d1f969..e992207 100644 --- a/node/expr/include.go +++ b/node/expr/include.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Include struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewInclude(Expression node.Node) node.Node { return &Include{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n Include) SetPosition(p *node.Position) node.Node { return n } +func (n Include) Comments() *[]comment.Comment { + return n.comments +} + +func (n Include) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Include) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/include_once.go b/node/expr/include_once.go index f38fcfc..f1a1dbe 100644 --- a/node/expr/include_once.go +++ b/node/expr/include_once.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type IncludeOnce struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewIncludeOnce(Expression node.Node) node.Node { return &IncludeOnce{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n IncludeOnce) SetPosition(p *node.Position) node.Node { return n } +func (n IncludeOnce) Comments() *[]comment.Comment { + return n.comments +} + +func (n IncludeOnce) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n IncludeOnce) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/instance_of.go b/node/expr/instance_of.go index dbf273c..50e7b8e 100644 --- a/node/expr/instance_of.go +++ b/node/expr/instance_of.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type InstanceOf struct { position *node.Position + comments *[]comment.Comment Expr node.Node Class node.Node } func NewInstanceOf(Expr node.Node, Class node.Node) node.Node { return &InstanceOf{ + nil, nil, Expr, Class, @@ -31,6 +34,15 @@ func (n InstanceOf) SetPosition(p *node.Position) node.Node { return n } +func (n InstanceOf) Comments() *[]comment.Comment { + return n.comments +} + +func (n InstanceOf) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n InstanceOf) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/isset.go b/node/expr/isset.go index ea1a95d..4f019e7 100644 --- a/node/expr/isset.go +++ b/node/expr/isset.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Isset struct { position *node.Position + comments *[]comment.Comment Variables []node.Node } func NewIsset(Variables []node.Node) node.Node { return &Isset{ + nil, nil, Variables, } @@ -29,6 +32,15 @@ func (n Isset) SetPosition(p *node.Position) node.Node { return n } +func (n Isset) Comments() *[]comment.Comment { + return n.comments +} + +func (n Isset) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Isset) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/list.go b/node/expr/list.go index 32c329c..93e4e26 100644 --- a/node/expr/list.go +++ b/node/expr/list.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type List struct { position *node.Position + comments *[]comment.Comment Items []node.Node } func NewList(Items []node.Node) node.Node { return &List{ + nil, nil, Items, } @@ -29,6 +32,15 @@ func (n List) SetPosition(p *node.Position) node.Node { return n } +func (n List) Comments() *[]comment.Comment { + return n.comments +} + +func (n List) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n List) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/method_call.go b/node/expr/method_call.go index d8ce3a6..fd3c2eb 100644 --- a/node/expr/method_call.go +++ b/node/expr/method_call.go @@ -1,11 +1,13 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type MethodCall struct { position *node.Position + comments *[]comment.Comment Variable node.Node Method node.Node Arguments []node.Node @@ -13,6 +15,7 @@ type MethodCall struct { func NewMethodCall(Variable node.Node, Method node.Node, Arguments []node.Node) node.Node { return &MethodCall{ + nil, nil, Variable, Method, @@ -33,6 +36,15 @@ func (n MethodCall) SetPosition(p *node.Position) node.Node { return n } +func (n MethodCall) Comments() *[]comment.Comment { + return n.comments +} + +func (n MethodCall) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n MethodCall) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/new.go b/node/expr/new.go index 12a786e..c4e1eb3 100644 --- a/node/expr/new.go +++ b/node/expr/new.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type New struct { position *node.Position + comments *[]comment.Comment Class node.Node Arguments []node.Node } func NewNew(Class node.Node, Arguments []node.Node) node.Node { return &New{ + nil, nil, Class, Arguments, @@ -31,6 +34,15 @@ func (n New) SetPosition(p *node.Position) node.Node { return n } +func (n New) Comments() *[]comment.Comment { + return n.comments +} + +func (n New) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n New) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/post_dec.go b/node/expr/post_dec.go index e0282bd..64e325a 100644 --- a/node/expr/post_dec.go +++ b/node/expr/post_dec.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type PostDec struct { position *node.Position + comments *[]comment.Comment Variable node.Node } func NewPostDec(Variable node.Node) node.Node { return &PostDec{ + nil, nil, Variable, } @@ -29,6 +32,15 @@ func (n PostDec) SetPosition(p *node.Position) node.Node { return n } +func (n PostDec) Comments() *[]comment.Comment { + return n.comments +} + +func (n PostDec) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n PostDec) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/post_inc.go b/node/expr/post_inc.go index d87285d..fba26c7 100644 --- a/node/expr/post_inc.go +++ b/node/expr/post_inc.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type PostInc struct { position *node.Position + comments *[]comment.Comment Variable node.Node } func NewPostInc(Variable node.Node) node.Node { return &PostInc{ + nil, nil, Variable, } @@ -29,6 +32,15 @@ func (n PostInc) SetPosition(p *node.Position) node.Node { return n } +func (n PostInc) Comments() *[]comment.Comment { + return n.comments +} + +func (n PostInc) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n PostInc) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/pre_dec.go b/node/expr/pre_dec.go index 4713eb2..660d20d 100644 --- a/node/expr/pre_dec.go +++ b/node/expr/pre_dec.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type PreDec struct { position *node.Position + comments *[]comment.Comment Variable node.Node } func NewPreDec(Variable node.Node) node.Node { return &PreDec{ + nil, nil, Variable, } @@ -29,6 +32,15 @@ func (n PreDec) SetPosition(p *node.Position) node.Node { return n } +func (n PreDec) Comments() *[]comment.Comment { + return n.comments +} + +func (n PreDec) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n PreDec) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/pre_inc.go b/node/expr/pre_inc.go index f75bad9..090f98f 100644 --- a/node/expr/pre_inc.go +++ b/node/expr/pre_inc.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type PreInc struct { position *node.Position + comments *[]comment.Comment Variable node.Node } func NewPreInc(Variable node.Node) node.Node { return &PreInc{ + nil, nil, Variable, } @@ -29,6 +32,15 @@ func (n PreInc) SetPosition(p *node.Position) node.Node { return n } +func (n PreInc) Comments() *[]comment.Comment { + return n.comments +} + +func (n PreInc) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n PreInc) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/print.go b/node/expr/print.go index 46881fc..e73a134 100644 --- a/node/expr/print.go +++ b/node/expr/print.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Print struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewPrint(Expression node.Node) node.Node { return &Print{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n Print) SetPosition(p *node.Position) node.Node { return n } +func (n Print) Comments() *[]comment.Comment { + return n.comments +} + +func (n Print) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Print) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/property_fetch.go b/node/expr/property_fetch.go index 60af79f..af1781d 100644 --- a/node/expr/property_fetch.go +++ b/node/expr/property_fetch.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type PropertyFetch struct { position *node.Position + comments *[]comment.Comment Variable node.Node Property node.Node } func NewPropertyFetch(Variable node.Node, Property node.Node) node.Node { return &PropertyFetch{ + nil, nil, Variable, Property, @@ -31,6 +34,15 @@ func (n PropertyFetch) SetPosition(p *node.Position) node.Node { return n } +func (n PropertyFetch) Comments() *[]comment.Comment { + return n.comments +} + +func (n PropertyFetch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n PropertyFetch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/require.go b/node/expr/require.go index 1dd1309..6d2f706 100644 --- a/node/expr/require.go +++ b/node/expr/require.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Require struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewRequire(Expression node.Node) node.Node { return &Require{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n Require) SetPosition(p *node.Position) node.Node { return n } +func (n Require) Comments() *[]comment.Comment { + return n.comments +} + +func (n Require) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Require) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/require_once.go b/node/expr/require_once.go index d96e4db..f9e6bd1 100644 --- a/node/expr/require_once.go +++ b/node/expr/require_once.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type RequireOnce struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewRequireOnce(Expression node.Node) node.Node { return &RequireOnce{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n RequireOnce) SetPosition(p *node.Position) node.Node { return n } +func (n RequireOnce) Comments() *[]comment.Comment { + return n.comments +} + +func (n RequireOnce) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n RequireOnce) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/shell_exec.go b/node/expr/shell_exec.go index e36485b..be6ee7d 100644 --- a/node/expr/shell_exec.go +++ b/node/expr/shell_exec.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ShellExec struct { position *node.Position + comments *[]comment.Comment Parts []node.Node } func NewShellExec(Parts []node.Node) node.Node { return &ShellExec{ + nil, nil, Parts, } @@ -29,6 +32,15 @@ func (n ShellExec) SetPosition(p *node.Position) node.Node { return n } +func (n ShellExec) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShellExec) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShellExec) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/short_array.go b/node/expr/short_array.go index 3bb1ee9..aba0c02 100644 --- a/node/expr/short_array.go +++ b/node/expr/short_array.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ShortArray struct { position *node.Position + comments *[]comment.Comment Items []node.Node } func NewShortArray(Items []node.Node) node.Node { return &ShortArray{ + nil, nil, Items, } @@ -29,6 +32,15 @@ func (n ShortArray) SetPosition(p *node.Position) node.Node { return n } +func (n ShortArray) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShortArray) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShortArray) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/short_list.go b/node/expr/short_list.go index 31e762e..71bbe68 100644 --- a/node/expr/short_list.go +++ b/node/expr/short_list.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ShortList struct { position *node.Position + comments *[]comment.Comment Items []node.Node } func NewShortList(Items []node.Node) node.Node { return &ShortList{ + nil, nil, Items, } @@ -29,6 +32,15 @@ func (n ShortList) SetPosition(p *node.Position) node.Node { return n } +func (n ShortList) Comments() *[]comment.Comment { + return n.comments +} + +func (n ShortList) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ShortList) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/static_call.go b/node/expr/static_call.go index 2d6fb18..91118d3 100644 --- a/node/expr/static_call.go +++ b/node/expr/static_call.go @@ -1,11 +1,13 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type StaticCall struct { position *node.Position + comments *[]comment.Comment Class node.Node Call node.Node Arguments []node.Node @@ -13,6 +15,7 @@ type StaticCall struct { func NewStaticCall(Class node.Node, Call node.Node, Arguments []node.Node) node.Node { return &StaticCall{ + nil, nil, Class, Call, @@ -33,6 +36,15 @@ func (n StaticCall) SetPosition(p *node.Position) node.Node { return n } +func (n StaticCall) Comments() *[]comment.Comment { + return n.comments +} + +func (n StaticCall) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n StaticCall) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/static_property_fetch.go b/node/expr/static_property_fetch.go index 062704d..4f8713d 100644 --- a/node/expr/static_property_fetch.go +++ b/node/expr/static_property_fetch.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type StaticPropertyFetch struct { position *node.Position + comments *[]comment.Comment Class node.Node Property node.Node } func NewStaticPropertyFetch(Class node.Node, Property node.Node) node.Node { return &StaticPropertyFetch{ + nil, nil, Class, Property, @@ -31,6 +34,15 @@ func (n StaticPropertyFetch) SetPosition(p *node.Position) node.Node { return n } +func (n StaticPropertyFetch) Comments() *[]comment.Comment { + return n.comments +} + +func (n StaticPropertyFetch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n StaticPropertyFetch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/ternary.go b/node/expr/ternary.go index ea4a7b6..bb0cf8b 100644 --- a/node/expr/ternary.go +++ b/node/expr/ternary.go @@ -1,11 +1,13 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Ternary struct { position *node.Position + comments *[]comment.Comment Condition node.Node IfTrue node.Node IfFalse node.Node @@ -13,6 +15,7 @@ type Ternary struct { func NewTernary(Condition node.Node, IfTrue node.Node, IfFalse node.Node) node.Node { return &Ternary{ + nil, nil, Condition, IfTrue, @@ -33,6 +36,15 @@ func (n Ternary) SetPosition(p *node.Position) node.Node { return n } +func (n Ternary) Comments() *[]comment.Comment { + return n.comments +} + +func (n Ternary) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Ternary) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/unary_minus.go b/node/expr/unary_minus.go index 7a99c04..5dc4098 100644 --- a/node/expr/unary_minus.go +++ b/node/expr/unary_minus.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type UnaryMinus struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewUnaryMinus(Expression node.Node) node.Node { return &UnaryMinus{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n UnaryMinus) SetPosition(p *node.Position) node.Node { return n } +func (n UnaryMinus) Comments() *[]comment.Comment { + return n.comments +} + +func (n UnaryMinus) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n UnaryMinus) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/unary_plus.go b/node/expr/unary_plus.go index 67082a6..e013337 100644 --- a/node/expr/unary_plus.go +++ b/node/expr/unary_plus.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type UnaryPlus struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewUnaryPlus(Expression node.Node) node.Node { return &UnaryPlus{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n UnaryPlus) SetPosition(p *node.Position) node.Node { return n } +func (n UnaryPlus) Comments() *[]comment.Comment { + return n.comments +} + +func (n UnaryPlus) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n UnaryPlus) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/variable.go b/node/expr/variable.go index 02769b1..667e4a7 100644 --- a/node/expr/variable.go +++ b/node/expr/variable.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Variable struct { position *node.Position + comments *[]comment.Comment VarName node.Node } func NewVariable(VarName node.Node) node.Node { return &Variable{ + nil, nil, VarName, } @@ -29,6 +32,15 @@ func (n Variable) SetPosition(p *node.Position) node.Node { return n } +func (n Variable) Comments() *[]comment.Comment { + return n.comments +} + +func (n Variable) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Variable) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/yield.go b/node/expr/yield.go index 074a48a..97d93b9 100644 --- a/node/expr/yield.go +++ b/node/expr/yield.go @@ -1,17 +1,20 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Yield struct { position *node.Position + comments *[]comment.Comment Key node.Node Value node.Node } func NewYield(Key node.Node, Value node.Node) node.Node { return &Yield{ + nil, nil, Key, Value, @@ -31,6 +34,15 @@ func (n Yield) SetPosition(p *node.Position) node.Node { return n } +func (n Yield) Comments() *[]comment.Comment { + return n.comments +} + +func (n Yield) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Yield) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/expr/yield_from.go b/node/expr/yield_from.go index df0bd0e..1def185 100644 --- a/node/expr/yield_from.go +++ b/node/expr/yield_from.go @@ -1,16 +1,19 @@ package expr import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type YieldFrom struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewYieldFrom(Expression node.Node) node.Node { return &YieldFrom{ + nil, nil, Expression, } @@ -29,6 +32,15 @@ func (n YieldFrom) SetPosition(p *node.Position) node.Node { return n } +func (n YieldFrom) Comments() *[]comment.Comment { + return n.comments +} + +func (n YieldFrom) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n YieldFrom) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/identifier.go b/node/identifier.go index 6c29a21..a1432a0 100644 --- a/node/identifier.go +++ b/node/identifier.go @@ -1,12 +1,16 @@ package node +import "github.com/z7zmey/php-parser/comment" + type Identifier struct { position *Position + comments *[]comment.Comment Value string } func NewIdentifier(Value string) Node { return &Identifier{ + nil, nil, Value, } @@ -27,6 +31,15 @@ func (n Identifier) SetPosition(p *Position) Node { return n } +func (n Identifier) Comments() *[]comment.Comment { + return n.comments +} + +func (n Identifier) SetComments(c []comment.Comment) Node { + n.comments = &c + return n +} + func (n Identifier) Walk(v Visitor) { if v.EnterNode(n) == false { return diff --git a/node/name/fully_qualified.go b/node/name/fully_qualified.go index 7d35734..b12a479 100644 --- a/node/name/fully_qualified.go +++ b/node/name/fully_qualified.go @@ -11,6 +11,7 @@ type FullyQualified struct { func NewFullyQualified(Parts []node.Node) node.Node { return &FullyQualified{ Name{ + nil, nil, Parts, }, diff --git a/node/name/name.go b/node/name/name.go index fd799e1..3faf986 100644 --- a/node/name/name.go +++ b/node/name/name.go @@ -1,16 +1,19 @@ package name import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Name struct { position *node.Position + comments *[]comment.Comment Parts []node.Node } func NewName(Parts []node.Node) node.Node { return &Name{ + nil, nil, Parts, } @@ -29,6 +32,15 @@ func (n Name) SetPosition(p *node.Position) node.Node { return n } +func (n Name) Comments() *[]comment.Comment { + return n.comments +} + +func (n Name) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Name) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/name/name_part.go b/node/name/name_part.go index a05b7e1..7dce590 100644 --- a/node/name/name_part.go +++ b/node/name/name_part.go @@ -1,16 +1,19 @@ package name import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type NamePart struct { position *node.Position + comments *[]comment.Comment Value string } func NewNamePart(Value string) node.Node { return &NamePart{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n NamePart) SetPosition(p *node.Position) node.Node { return n } +func (n NamePart) Comments() *[]comment.Comment { + return n.comments +} + +func (n NamePart) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n NamePart) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/name/relative.go b/node/name/relative.go index 38ce435..72d50c4 100644 --- a/node/name/relative.go +++ b/node/name/relative.go @@ -11,6 +11,7 @@ type Relative struct { func NewRelative(Parts []node.Node) node.Node { return &Relative{ Name{ + nil, nil, Parts, }, diff --git a/node/node.go b/node/node.go index 3698cf2..ff96c67 100644 --- a/node/node.go +++ b/node/node.go @@ -1,13 +1,20 @@ package node import "fmt" +import "github.com/z7zmey/php-parser/comment" type Node interface { Positioner + Commenter Attributes() map[string]interface{} Walk(v Visitor) } +type Commenter interface { + Comments() *[]comment.Comment + SetComments([]comment.Comment) Node +} + type Positioner interface { Position() *Position SetPosition(p *Position) Node diff --git a/node/nullable.go b/node/nullable.go index d4e22ef..219a188 100644 --- a/node/nullable.go +++ b/node/nullable.go @@ -1,12 +1,16 @@ package node +import "github.com/z7zmey/php-parser/comment" + type Nullable struct { position *Position + comments *[]comment.Comment Expr Node } func NewNullable(Expression Node) Node { return &Nullable{ + nil, nil, Expression, } @@ -25,6 +29,15 @@ func (n Nullable) SetPosition(p *Position) Node { return n } +func (n Nullable) Comments() *[]comment.Comment { + return n.comments +} + +func (n Nullable) SetComments(c []comment.Comment) Node { + n.comments = &c + return n +} + func (n Nullable) Walk(v Visitor) { if v.EnterNode(n) == false { return diff --git a/node/parameter.go b/node/parameter.go index 66afe4c..58a0083 100644 --- a/node/parameter.go +++ b/node/parameter.go @@ -1,7 +1,10 @@ package node +import "github.com/z7zmey/php-parser/comment" + type Parameter struct { position *Position + comments *[]comment.Comment ByRef bool Variadic bool VariableType Node @@ -11,6 +14,7 @@ type Parameter struct { func NewParameter(VariableType Node, Variable Node, DefaultValue Node, ByRef bool, Variadic bool) Node { return &Parameter{ + nil, nil, ByRef, Variadic, @@ -36,6 +40,15 @@ func (n Parameter) SetPosition(p *Position) Node { return n } +func (n Parameter) Comments() *[]comment.Comment { + return n.comments +} + +func (n Parameter) SetComments(c []comment.Comment) Node { + n.comments = &c + return n +} + func (n Parameter) Walk(v Visitor) { if v.EnterNode(n) == false { return diff --git a/node/scalar/dnumber.go b/node/scalar/dnumber.go index d546e5e..6e7584c 100644 --- a/node/scalar/dnumber.go +++ b/node/scalar/dnumber.go @@ -1,16 +1,19 @@ package scalar import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Dnumber struct { position *node.Position + comments *[]comment.Comment Value string } func NewDnumber(Value string) node.Node { return &Dnumber{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n Dnumber) SetPosition(p *node.Position) node.Node { return n } +func (n Dnumber) Comments() *[]comment.Comment { + return n.comments +} + +func (n Dnumber) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Dnumber) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/scalar/encapsed.go b/node/scalar/encapsed.go index f6d0cef..7eb26c4 100644 --- a/node/scalar/encapsed.go +++ b/node/scalar/encapsed.go @@ -1,16 +1,19 @@ package scalar import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Encapsed struct { position *node.Position + comments *[]comment.Comment Parts []node.Node } func NewEncapsed(Parts []node.Node) node.Node { return &Encapsed{ + nil, nil, Parts, } @@ -29,6 +32,15 @@ func (n Encapsed) SetPosition(p *node.Position) node.Node { return n } +func (n Encapsed) Comments() *[]comment.Comment { + return n.comments +} + +func (n Encapsed) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Encapsed) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/scalar/encapsed_string_part.go b/node/scalar/encapsed_string_part.go index aad59b2..c5b6388 100644 --- a/node/scalar/encapsed_string_part.go +++ b/node/scalar/encapsed_string_part.go @@ -1,16 +1,19 @@ package scalar import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type EncapsedStringPart struct { position *node.Position + comments *[]comment.Comment Value string } func NewEncapsedStringPart(Value string) node.Node { return &EncapsedStringPart{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n EncapsedStringPart) SetPosition(p *node.Position) node.Node { return n } +func (n EncapsedStringPart) Comments() *[]comment.Comment { + return n.comments +} + +func (n EncapsedStringPart) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n EncapsedStringPart) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/scalar/lnumber.go b/node/scalar/lnumber.go index 0d834f1..4089410 100644 --- a/node/scalar/lnumber.go +++ b/node/scalar/lnumber.go @@ -1,16 +1,19 @@ package scalar import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Lnumber struct { position *node.Position + comments *[]comment.Comment Value string } func NewLnumber(Value string) node.Node { return &Lnumber{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n Lnumber) SetPosition(p *node.Position) node.Node { return n } +func (n Lnumber) Comments() *[]comment.Comment { + return n.comments +} + +func (n Lnumber) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Lnumber) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/scalar/magic_constant.go b/node/scalar/magic_constant.go index 9e9d886..beafca9 100644 --- a/node/scalar/magic_constant.go +++ b/node/scalar/magic_constant.go @@ -1,16 +1,19 @@ package scalar import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type MagicConstant struct { position *node.Position + comments *[]comment.Comment Value string } func NewMagicConstant(Value string) node.Node { return &MagicConstant{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n MagicConstant) SetPosition(p *node.Position) node.Node { return n } +func (n MagicConstant) Comments() *[]comment.Comment { + return n.comments +} + +func (n MagicConstant) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n MagicConstant) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/scalar/string.go b/node/scalar/string.go index 801727b..226e997 100644 --- a/node/scalar/string.go +++ b/node/scalar/string.go @@ -1,16 +1,19 @@ package scalar import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type String struct { position *node.Position + comments *[]comment.Comment Value string } func NewString(Value string) node.Node { return &String{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n String) SetPosition(p *node.Position) node.Node { return n } +func (n String) Comments() *[]comment.Comment { + return n.comments +} + +func (n String) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n String) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/alt_else.go b/node/stmt/alt_else.go index 4c66ec8..94086f2 100644 --- a/node/stmt/alt_else.go +++ b/node/stmt/alt_else.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type AltElse struct { position *node.Position + comments *[]comment.Comment Stmt node.Node } func NewAltElse(Stmt node.Node) node.Node { return &AltElse{ + nil, nil, Stmt, } @@ -29,6 +32,15 @@ func (n AltElse) SetPosition(p *node.Position) node.Node { return n } +func (n AltElse) Comments() *[]comment.Comment { + return n.comments +} + +func (n AltElse) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n AltElse) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/alt_else_if.go b/node/stmt/alt_else_if.go index 258abee..687ee2b 100644 --- a/node/stmt/alt_else_if.go +++ b/node/stmt/alt_else_if.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type AltElseIf struct { position *node.Position + comments *[]comment.Comment Cond node.Node Stmt node.Node } func NewAltElseIf(Cond node.Node, Stmt node.Node) node.Node { return &AltElseIf{ + nil, nil, Cond, Stmt, @@ -31,6 +34,15 @@ func (n AltElseIf) SetPosition(p *node.Position) node.Node { return n } +func (n AltElseIf) Comments() *[]comment.Comment { + return n.comments +} + +func (n AltElseIf) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n AltElseIf) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/alt_if.go b/node/stmt/alt_if.go index 4de0890..87f5bf7 100644 --- a/node/stmt/alt_if.go +++ b/node/stmt/alt_if.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type AltIf struct { position *node.Position + comments *[]comment.Comment Cond node.Node Stmt node.Node ElseIf []node.Node @@ -14,6 +16,7 @@ type AltIf struct { func NewAltIf(Cond node.Node, Stmt node.Node) node.Node { return &AltIf{ + nil, nil, Cond, Stmt, @@ -35,6 +38,15 @@ func (n AltIf) SetPosition(p *node.Position) node.Node { return n } +func (n AltIf) Comments() *[]comment.Comment { + return n.comments +} + +func (n AltIf) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n AltIf) AddElseIf(ElseIf node.Node) node.Node { if n.ElseIf == nil { n.ElseIf = make([]node.Node, 0) diff --git a/node/stmt/break.go b/node/stmt/break.go index 4189796..2dee43a 100644 --- a/node/stmt/break.go +++ b/node/stmt/break.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Break struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewBreak(Expr node.Node) node.Node { return &Break{ + nil, nil, Expr, } @@ -29,6 +32,15 @@ func (n Break) SetPosition(p *node.Position) node.Node { return n } +func (n Break) Comments() *[]comment.Comment { + return n.comments +} + +func (n Break) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Break) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/case.go b/node/stmt/case.go index e55af64..46265f6 100644 --- a/node/stmt/case.go +++ b/node/stmt/case.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Case struct { position *node.Position + comments *[]comment.Comment Cond node.Node Stmts []node.Node } func NewCase(Cond node.Node, Stmts []node.Node) node.Node { return &Case{ + nil, nil, Cond, Stmts, @@ -31,6 +34,15 @@ func (n Case) SetPosition(p *node.Position) node.Node { return n } +func (n Case) Comments() *[]comment.Comment { + return n.comments +} + +func (n Case) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Case) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/catch.go b/node/stmt/catch.go index 103ecc5..c8a3c92 100644 --- a/node/stmt/catch.go +++ b/node/stmt/catch.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Catch struct { position *node.Position + comments *[]comment.Comment Types []node.Node Variable node.Node Stmts []node.Node @@ -13,6 +15,7 @@ type Catch struct { func NewCatch(Types []node.Node, Variable node.Node, Stmts []node.Node) node.Node { return &Catch{ + nil, nil, Types, Variable, @@ -33,6 +36,15 @@ func (n Catch) SetPosition(p *node.Position) node.Node { return n } +func (n Catch) Comments() *[]comment.Comment { + return n.comments +} + +func (n Catch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Catch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/class.go b/node/stmt/class.go index 91bc13c..fcbe6d5 100644 --- a/node/stmt/class.go +++ b/node/stmt/class.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Class struct { position *node.Position + comments *[]comment.Comment PhpDocComment string ClassName node.Node Modifiers []node.Node @@ -17,6 +19,7 @@ type Class struct { func NewClass(ClassName node.Node, Modifiers []node.Node, args []node.Node, Extends node.Node, Implements []node.Node, Stmts []node.Node, PhpDocComment string) node.Node { return &Class{ + nil, nil, PhpDocComment, ClassName, @@ -43,6 +46,15 @@ func (n Class) SetPosition(p *node.Position) node.Node { return n } +func (n Class) Comments() *[]comment.Comment { + return n.comments +} + +func (n Class) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Class) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/class_const_list.go b/node/stmt/class_const_list.go index cf60270..b631988 100644 --- a/node/stmt/class_const_list.go +++ b/node/stmt/class_const_list.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ClassConstList struct { position *node.Position + comments *[]comment.Comment Modifiers []node.Node Consts []node.Node } func NewClassConstList(Modifiers []node.Node, Consts []node.Node) node.Node { return &ClassConstList{ + nil, nil, Modifiers, Consts, @@ -31,6 +34,15 @@ func (n ClassConstList) SetPosition(p *node.Position) node.Node { return n } +func (n ClassConstList) Comments() *[]comment.Comment { + return n.comments +} + +func (n ClassConstList) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ClassConstList) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/class_method.go b/node/stmt/class_method.go index dc2a779..579240a 100644 --- a/node/stmt/class_method.go +++ b/node/stmt/class_method.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ClassMethod struct { position *node.Position + comments *[]comment.Comment ReturnsRef bool PhpDocComment string MethodName node.Node @@ -17,6 +19,7 @@ type ClassMethod struct { func NewClassMethod(MethodName node.Node, Modifiers []node.Node, ReturnsRef bool, Params []node.Node, ReturnType node.Node, Stmts []node.Node, PhpDocComment string) node.Node { return &ClassMethod{ + nil, nil, ReturnsRef, PhpDocComment, @@ -44,6 +47,15 @@ func (n ClassMethod) SetPosition(p *node.Position) node.Node { return n } +func (n ClassMethod) Comments() *[]comment.Comment { + return n.comments +} + +func (n ClassMethod) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ClassMethod) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/const_list.go b/node/stmt/const_list.go index 8bf75bb..4c53595 100644 --- a/node/stmt/const_list.go +++ b/node/stmt/const_list.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ConstList struct { position *node.Position + comments *[]comment.Comment Consts []node.Node } func NewConstList(Consts []node.Node) node.Node { return &ConstList{ + nil, nil, Consts, } @@ -29,6 +32,15 @@ func (n ConstList) SetPosition(p *node.Position) node.Node { return n } +func (n ConstList) Comments() *[]comment.Comment { + return n.comments +} + +func (n ConstList) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ConstList) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/constant.go b/node/stmt/constant.go index d7c7a22..f6470f6 100644 --- a/node/stmt/constant.go +++ b/node/stmt/constant.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Constant struct { position *node.Position + comments *[]comment.Comment PhpDocComment string ConstantName node.Node Expr node.Node @@ -13,6 +15,7 @@ type Constant struct { func NewConstant(ConstantName node.Node, Expr node.Node, PhpDocComment string) node.Node { return &Constant{ + nil, nil, PhpDocComment, ConstantName, @@ -35,6 +38,15 @@ func (n Constant) SetPosition(p *node.Position) node.Node { return n } +func (n Constant) Comments() *[]comment.Comment { + return n.comments +} + +func (n Constant) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Constant) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/continue.go b/node/stmt/continue.go index 8e4482a..df71ffb 100644 --- a/node/stmt/continue.go +++ b/node/stmt/continue.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Continue struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewContinue(Expr node.Node) node.Node { return &Continue{ + nil, nil, Expr, } @@ -29,6 +32,15 @@ func (n Continue) SetPosition(p *node.Position) node.Node { return n } +func (n Continue) Comments() *[]comment.Comment { + return n.comments +} + +func (n Continue) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Continue) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/declare.go b/node/stmt/declare.go index 2316e5f..5c4c435 100644 --- a/node/stmt/declare.go +++ b/node/stmt/declare.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Declare struct { position *node.Position + comments *[]comment.Comment Consts []node.Node Stmt node.Node } func NewDeclare(Consts []node.Node, Stmt node.Node) node.Node { return &Declare{ + nil, nil, Consts, Stmt, @@ -31,6 +34,15 @@ func (n Declare) SetPosition(p *node.Position) node.Node { return n } +func (n Declare) Comments() *[]comment.Comment { + return n.comments +} + +func (n Declare) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Declare) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/default.go b/node/stmt/default.go index 322b397..9b5db97 100644 --- a/node/stmt/default.go +++ b/node/stmt/default.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Default struct { position *node.Position + comments *[]comment.Comment Stmts []node.Node } func NewDefault(Stmts []node.Node) node.Node { return &Default{ + nil, nil, Stmts, } @@ -29,6 +32,15 @@ func (n Default) SetPosition(p *node.Position) node.Node { return n } +func (n Default) Comments() *[]comment.Comment { + return n.comments +} + +func (n Default) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Default) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/do.go b/node/stmt/do.go index 8453d8d..13e1938 100644 --- a/node/stmt/do.go +++ b/node/stmt/do.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Do struct { position *node.Position + comments *[]comment.Comment Stmt node.Node Cond node.Node } func NewDo(Stmt node.Node, Cond node.Node) node.Node { return &Do{ + nil, nil, Stmt, Cond, @@ -31,6 +34,15 @@ func (n Do) SetPosition(p *node.Position) node.Node { return n } +func (n Do) Comments() *[]comment.Comment { + return n.comments +} + +func (n Do) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Do) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/echo.go b/node/stmt/echo.go index 698cbe2..f569124 100644 --- a/node/stmt/echo.go +++ b/node/stmt/echo.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Echo struct { position *node.Position + comments *[]comment.Comment Exprs []node.Node } func NewEcho(Exprs []node.Node) node.Node { return &Echo{ + nil, nil, Exprs, } @@ -29,6 +32,15 @@ func (n Echo) SetPosition(p *node.Position) node.Node { return n } +func (n Echo) Comments() *[]comment.Comment { + return n.comments +} + +func (n Echo) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Echo) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/else.go b/node/stmt/else.go index 3524c7e..4d9ed58 100644 --- a/node/stmt/else.go +++ b/node/stmt/else.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Else struct { position *node.Position + comments *[]comment.Comment Stmt node.Node } func NewElse(Stmt node.Node) node.Node { return &Else{ + nil, nil, Stmt, } @@ -29,6 +32,15 @@ func (n Else) SetPosition(p *node.Position) node.Node { return n } +func (n Else) Comments() *[]comment.Comment { + return n.comments +} + +func (n Else) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Else) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/else_if.go b/node/stmt/else_if.go index 709e6cb..b0d4a64 100644 --- a/node/stmt/else_if.go +++ b/node/stmt/else_if.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type ElseIf struct { position *node.Position + comments *[]comment.Comment Cond node.Node Stmt node.Node } func NewElseIf(Cond node.Node, Stmt node.Node) node.Node { return &ElseIf{ + nil, nil, Cond, Stmt, @@ -31,6 +34,15 @@ func (n ElseIf) SetPosition(p *node.Position) node.Node { return n } +func (n ElseIf) Comments() *[]comment.Comment { + return n.comments +} + +func (n ElseIf) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n ElseIf) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/expression.go b/node/stmt/expression.go index afcd587..dc180ec 100644 --- a/node/stmt/expression.go +++ b/node/stmt/expression.go @@ -1,25 +1,26 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Expression struct { - attributes map[string]interface{} - position *node.Position - Expr node.Node + position *node.Position + comments *[]comment.Comment + Expr node.Node } func NewExpression(Expr node.Node) node.Node { return &Expression{ - map[string]interface{}{}, + nil, nil, Expr, } } func (n Expression) Attributes() map[string]interface{} { - return n.attributes + return nil } func (n Expression) Position() *node.Position { @@ -31,6 +32,15 @@ func (n Expression) SetPosition(p *node.Position) node.Node { return n } +func (n Expression) Comments() *[]comment.Comment { + return n.comments +} + +func (n Expression) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Expression) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/finally.go b/node/stmt/finally.go index 2dfae03..1827558 100644 --- a/node/stmt/finally.go +++ b/node/stmt/finally.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Finally struct { position *node.Position + comments *[]comment.Comment Stmts []node.Node } func NewFinally(Stmts []node.Node) node.Node { return &Finally{ + nil, nil, Stmts, } @@ -29,6 +32,15 @@ func (n Finally) SetPosition(p *node.Position) node.Node { return n } +func (n Finally) Comments() *[]comment.Comment { + return n.comments +} + +func (n Finally) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Finally) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/for.go b/node/stmt/for.go index 2d4562a..dacac5c 100644 --- a/node/stmt/for.go +++ b/node/stmt/for.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type For struct { position *node.Position + comments *[]comment.Comment Init []node.Node Cond []node.Node Loop []node.Node @@ -14,6 +16,7 @@ type For struct { func NewFor(Init []node.Node, Cond []node.Node, Loop []node.Node, Stmt node.Node) node.Node { return &For{ + nil, nil, Init, Cond, @@ -35,6 +38,15 @@ func (n For) SetPosition(p *node.Position) node.Node { return n } +func (n For) Comments() *[]comment.Comment { + return n.comments +} + +func (n For) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n For) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/foreach.go b/node/stmt/foreach.go index c88c04a..89b3161 100644 --- a/node/stmt/foreach.go +++ b/node/stmt/foreach.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Foreach struct { position *node.Position + comments *[]comment.Comment ByRef bool Expr node.Node Key node.Node @@ -15,6 +17,7 @@ type Foreach struct { func NewForeach(Expr node.Node, Key node.Node, Variable node.Node, Stmt node.Node, ByRef bool) node.Node { return &Foreach{ + nil, nil, ByRef, Expr, @@ -39,6 +42,15 @@ func (n Foreach) SetPosition(p *node.Position) node.Node { return n } +func (n Foreach) Comments() *[]comment.Comment { + return n.comments +} + +func (n Foreach) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Foreach) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/function.go b/node/stmt/function.go index eac5da0..19aeac4 100644 --- a/node/stmt/function.go +++ b/node/stmt/function.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Function struct { position *node.Position + comments *[]comment.Comment ReturnsRef bool PhpDocComment string FunctionName node.Node @@ -16,6 +18,7 @@ type Function struct { func NewFunction(FunctionName node.Node, ReturnsRef bool, Params []node.Node, ReturnType node.Node, Stmts []node.Node, PhpDocComment string) node.Node { return &Function{ + nil, nil, ReturnsRef, PhpDocComment, @@ -43,6 +46,15 @@ func (n Function) SetPosition(p *node.Position) node.Node { return n } +func (n Function) Comments() *[]comment.Comment { + return n.comments +} + +func (n Function) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Function) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/global.go b/node/stmt/global.go index 57a2500..2934e6f 100644 --- a/node/stmt/global.go +++ b/node/stmt/global.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Global struct { position *node.Position + comments *[]comment.Comment Vars []node.Node } func NewGlobal(Vars []node.Node) node.Node { return &Global{ + nil, nil, Vars, } @@ -29,6 +32,15 @@ func (n Global) SetPosition(p *node.Position) node.Node { return n } +func (n Global) Comments() *[]comment.Comment { + return n.comments +} + +func (n Global) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Global) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/goto.go b/node/stmt/goto.go index 1fcd9dc..82901e9 100644 --- a/node/stmt/goto.go +++ b/node/stmt/goto.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Goto struct { position *node.Position + comments *[]comment.Comment Label node.Node } func NewGoto(Label node.Node) node.Node { return &Goto{ + nil, nil, Label, } @@ -29,6 +32,15 @@ func (n Goto) SetPosition(p *node.Position) node.Node { return n } +func (n Goto) Comments() *[]comment.Comment { + return n.comments +} + +func (n Goto) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Goto) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/group_use.go b/node/stmt/group_use.go index 2f52317..73299d7 100644 --- a/node/stmt/group_use.go +++ b/node/stmt/group_use.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type GroupUse struct { position *node.Position + comments *[]comment.Comment UseType node.Node pRefix node.Node UseList []node.Node @@ -13,6 +15,7 @@ type GroupUse struct { func NewGroupUse(UseType node.Node, pRefix node.Node, UseList []node.Node) node.Node { return &GroupUse{ + nil, nil, UseType, pRefix, @@ -33,6 +36,15 @@ func (n GroupUse) SetPosition(p *node.Position) node.Node { return n } +func (n GroupUse) Comments() *[]comment.Comment { + return n.comments +} + +func (n GroupUse) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n GroupUse) SetUseType(UseType node.Node) node.Node { n.UseType = UseType return n diff --git a/node/stmt/halt_compiler.go b/node/stmt/halt_compiler.go index dd4ab31..8a0bc62 100644 --- a/node/stmt/halt_compiler.go +++ b/node/stmt/halt_compiler.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type HaltCompiler struct { position *node.Position + comments *[]comment.Comment } func NewHaltCompiler() node.Node { return &HaltCompiler{ nil, + nil, } } @@ -27,6 +30,15 @@ func (n HaltCompiler) SetPosition(p *node.Position) node.Node { return n } +func (n HaltCompiler) Comments() *[]comment.Comment { + return n.comments +} + +func (n HaltCompiler) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n HaltCompiler) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/if.go b/node/stmt/if.go index b98d019..7c11b2d 100644 --- a/node/stmt/if.go +++ b/node/stmt/if.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type If struct { position *node.Position + comments *[]comment.Comment Cond node.Node Stmt node.Node ElseIf []node.Node @@ -14,6 +16,7 @@ type If struct { func NewIf(Cond node.Node, Stmt node.Node) node.Node { return &If{ + nil, nil, Cond, Stmt, @@ -35,6 +38,15 @@ func (n If) SetPosition(p *node.Position) node.Node { return n } +func (n If) Comments() *[]comment.Comment { + return n.comments +} + +func (n If) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n If) AddElseIf(ElseIf node.Node) node.Node { if n.ElseIf == nil { n.ElseIf = make([]node.Node, 0) diff --git a/node/stmt/inline_html.go b/node/stmt/inline_html.go index 3da6ae3..975f9fe 100644 --- a/node/stmt/inline_html.go +++ b/node/stmt/inline_html.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type InlineHtml struct { position *node.Position + comments *[]comment.Comment Value string } func NewInlineHtml(Value string) node.Node { return &InlineHtml{ + nil, nil, Value, } @@ -31,6 +34,15 @@ func (n InlineHtml) SetPosition(p *node.Position) node.Node { return n } +func (n InlineHtml) Comments() *[]comment.Comment { + return n.comments +} + +func (n InlineHtml) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n InlineHtml) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/interface.go b/node/stmt/interface.go index f6b325d..99a3a90 100644 --- a/node/stmt/interface.go +++ b/node/stmt/interface.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Interface struct { position *node.Position + comments *[]comment.Comment PhpDocComment string InterfaceName node.Node Extends []node.Node @@ -14,6 +16,7 @@ type Interface struct { func NewInterface(InterfaceName node.Node, Extends []node.Node, Stmts []node.Node, PhpDocComment string) node.Node { return &Interface{ + nil, nil, PhpDocComment, InterfaceName, @@ -37,6 +40,15 @@ func (n Interface) SetPosition(p *node.Position) node.Node { return n } +func (n Interface) Comments() *[]comment.Comment { + return n.comments +} + +func (n Interface) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Interface) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/label.go b/node/stmt/label.go index 3f7ceaa..ca47806 100644 --- a/node/stmt/label.go +++ b/node/stmt/label.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Label struct { position *node.Position + comments *[]comment.Comment LabelName node.Node } func NewLabel(LabelName node.Node) node.Node { return &Label{ + nil, nil, LabelName, } @@ -29,6 +32,15 @@ func (n Label) SetPosition(p *node.Position) node.Node { return n } +func (n Label) Comments() *[]comment.Comment { + return n.comments +} + +func (n Label) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Label) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/namespace.go b/node/stmt/namespace.go index 78433c2..11d2911 100644 --- a/node/stmt/namespace.go +++ b/node/stmt/namespace.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Namespace struct { position *node.Position + comments *[]comment.Comment NamespaceName node.Node Stmts []node.Node } func NewNamespace(NamespaceName node.Node, Stmts []node.Node) node.Node { return &Namespace{ + nil, nil, NamespaceName, Stmts, @@ -31,6 +34,15 @@ func (n Namespace) SetPosition(p *node.Position) node.Node { return n } +func (n Namespace) Comments() *[]comment.Comment { + return n.comments +} + +func (n Namespace) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Namespace) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/nop.go b/node/stmt/nop.go index 8ba7f3f..bba8ec1 100644 --- a/node/stmt/nop.go +++ b/node/stmt/nop.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Nop struct { position *node.Position + comments *[]comment.Comment } func NewNop() node.Node { return &Nop{ nil, + nil, } } @@ -27,6 +30,15 @@ func (n Nop) SetPosition(p *node.Position) node.Node { return n } +func (n Nop) Comments() *[]comment.Comment { + return n.comments +} + +func (n Nop) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Nop) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/property.go b/node/stmt/property.go index 428791d..8ad7a97 100644 --- a/node/stmt/property.go +++ b/node/stmt/property.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Property struct { position *node.Position + comments *[]comment.Comment PhpDocComment string Variable node.Node Expr node.Node @@ -13,6 +15,7 @@ type Property struct { func NewProperty(Variable node.Node, Expr node.Node, PhpDocComment string) node.Node { return &Property{ + nil, nil, PhpDocComment, Variable, @@ -34,6 +37,15 @@ func (n Property) SetPosition(p *node.Position) node.Node { return n } +func (n Property) Comments() *[]comment.Comment { + return n.comments +} + +func (n Property) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Property) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/property_list.go b/node/stmt/property_list.go index 257cd36..a30eca1 100644 --- a/node/stmt/property_list.go +++ b/node/stmt/property_list.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type PropertyList struct { position *node.Position + comments *[]comment.Comment Modifiers []node.Node Properties []node.Node } func NewPropertyList(Modifiers []node.Node, Properties []node.Node) node.Node { return &PropertyList{ + nil, nil, Modifiers, Properties, @@ -31,6 +34,15 @@ func (n PropertyList) SetPosition(p *node.Position) node.Node { return n } +func (n PropertyList) Comments() *[]comment.Comment { + return n.comments +} + +func (n PropertyList) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n PropertyList) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/return.go b/node/stmt/return.go index e76548f..21a5780 100644 --- a/node/stmt/return.go +++ b/node/stmt/return.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Return struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewReturn(Expr node.Node) node.Node { return &Return{ + nil, nil, Expr, } @@ -29,6 +32,15 @@ func (n Return) SetPosition(p *node.Position) node.Node { return n } +func (n Return) Comments() *[]comment.Comment { + return n.comments +} + +func (n Return) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Return) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/static.go b/node/stmt/static.go index 6529faf..869b4f9 100644 --- a/node/stmt/static.go +++ b/node/stmt/static.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Static struct { position *node.Position + comments *[]comment.Comment Vars []node.Node } func NewStatic(Vars []node.Node) node.Node { return &Static{ + nil, nil, Vars, } @@ -29,6 +32,15 @@ func (n Static) SetPosition(p *node.Position) node.Node { return n } +func (n Static) Comments() *[]comment.Comment { + return n.comments +} + +func (n Static) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Static) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/static_var.go b/node/stmt/static_var.go index 2ccb38f..f5f61a5 100644 --- a/node/stmt/static_var.go +++ b/node/stmt/static_var.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type StaticVar struct { position *node.Position + comments *[]comment.Comment Variable node.Node Expr node.Node } func NewStaticVar(Variable node.Node, Expr node.Node) node.Node { return &StaticVar{ + nil, nil, Variable, Expr, @@ -31,6 +34,15 @@ func (n StaticVar) SetPosition(p *node.Position) node.Node { return n } +func (n StaticVar) Comments() *[]comment.Comment { + return n.comments +} + +func (n StaticVar) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n StaticVar) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/stmt_list.go b/node/stmt/stmt_list.go index 2285f3f..8d12ac8 100644 --- a/node/stmt/stmt_list.go +++ b/node/stmt/stmt_list.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type StmtList struct { position *node.Position + comments *[]comment.Comment Stmts []node.Node } func NewStmtList(Stmts []node.Node) node.Node { - return StmtList{ + return &StmtList{ + nil, nil, Stmts, } @@ -29,6 +32,15 @@ func (n StmtList) SetPosition(p *node.Position) node.Node { return n } +func (n StmtList) Comments() *[]comment.Comment { + return n.comments +} + +func (n StmtList) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n StmtList) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/switch.go b/node/stmt/switch.go index c30c8e0..b210c53 100644 --- a/node/stmt/switch.go +++ b/node/stmt/switch.go @@ -1,12 +1,14 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" "github.com/z7zmey/php-parser/token" ) type Switch struct { position *node.Position + comments *[]comment.Comment token token.Token Cond node.Node cases []node.Node @@ -14,6 +16,7 @@ type Switch struct { func NewSwitch(token token.Token, Cond node.Node, cases []node.Node) node.Node { return &Switch{ + nil, nil, token, Cond, @@ -34,6 +37,15 @@ func (n Switch) SetPosition(p *node.Position) node.Node { return n } +func (n Switch) Comments() *[]comment.Comment { + return n.comments +} + +func (n Switch) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Switch) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/throw.go b/node/stmt/throw.go index 7e5162f..f014b8b 100644 --- a/node/stmt/throw.go +++ b/node/stmt/throw.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Throw struct { position *node.Position + comments *[]comment.Comment Expr node.Node } func NewThrow(Expr node.Node) node.Node { return &Throw{ + nil, nil, Expr, } @@ -29,6 +32,15 @@ func (n Throw) SetPosition(p *node.Position) node.Node { return n } +func (n Throw) Comments() *[]comment.Comment { + return n.comments +} + +func (n Throw) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Throw) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/trait.go b/node/stmt/trait.go index 0b51e09..000169a 100644 --- a/node/stmt/trait.go +++ b/node/stmt/trait.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Trait struct { position *node.Position + comments *[]comment.Comment PhpDocComment string TraitName node.Node Stmts []node.Node @@ -13,6 +15,7 @@ type Trait struct { func NewTrait(TraitName node.Node, Stmts []node.Node, PhpDocComment string) node.Node { return &Trait{ + nil, nil, PhpDocComment, TraitName, @@ -35,6 +38,15 @@ func (n Trait) SetPosition(p *node.Position) node.Node { return n } +func (n Trait) Comments() *[]comment.Comment { + return n.comments +} + +func (n Trait) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Trait) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/trait_method_ref.go b/node/stmt/trait_method_ref.go index 41510e6..32cedb3 100644 --- a/node/stmt/trait_method_ref.go +++ b/node/stmt/trait_method_ref.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type TraitMethodRef struct { position *node.Position + comments *[]comment.Comment Trait node.Node Method node.Node } func NewTraitMethodRef(Trait node.Node, Method node.Node) node.Node { return &TraitMethodRef{ + nil, nil, Trait, Method, @@ -31,6 +34,15 @@ func (n TraitMethodRef) SetPosition(p *node.Position) node.Node { return n } +func (n TraitMethodRef) Comments() *[]comment.Comment { + return n.comments +} + +func (n TraitMethodRef) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n TraitMethodRef) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/trait_use.go b/node/stmt/trait_use.go index 492a300..def3e9c 100644 --- a/node/stmt/trait_use.go +++ b/node/stmt/trait_use.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type TraitUse struct { position *node.Position + comments *[]comment.Comment Traits []node.Node Adaptations []node.Node } func NewTraitUse(Traits []node.Node, Adaptations []node.Node) node.Node { return &TraitUse{ + nil, nil, Traits, Adaptations, @@ -31,6 +34,15 @@ func (n TraitUse) SetPosition(p *node.Position) node.Node { return n } +func (n TraitUse) Comments() *[]comment.Comment { + return n.comments +} + +func (n TraitUse) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n TraitUse) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/trait_use_alias.go b/node/stmt/trait_use_alias.go index 75d1b05..01cb46e 100644 --- a/node/stmt/trait_use_alias.go +++ b/node/stmt/trait_use_alias.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type TraitUseAlias struct { position *node.Position + comments *[]comment.Comment Ref node.Node Modifier node.Node Alias node.Node @@ -13,6 +15,7 @@ type TraitUseAlias struct { func NewTraitUseAlias(Ref node.Node, Modifier node.Node, Alias node.Node) node.Node { return &TraitUseAlias{ + nil, nil, Ref, Modifier, @@ -33,6 +36,15 @@ func (n TraitUseAlias) SetPosition(p *node.Position) node.Node { return n } +func (n TraitUseAlias) Comments() *[]comment.Comment { + return n.comments +} + +func (n TraitUseAlias) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n TraitUseAlias) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/trait_use_precedence.go b/node/stmt/trait_use_precedence.go index 755900a..7d3c0e4 100644 --- a/node/stmt/trait_use_precedence.go +++ b/node/stmt/trait_use_precedence.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type TraitUsePrecedence struct { position *node.Position + comments *[]comment.Comment Ref node.Node Insteadof node.Node } func NewTraitUsePrecedence(Ref node.Node, Insteadof node.Node) node.Node { return &TraitUsePrecedence{ + nil, nil, Ref, Insteadof, @@ -31,6 +34,15 @@ func (n TraitUsePrecedence) SetPosition(p *node.Position) node.Node { return n } +func (n TraitUsePrecedence) Comments() *[]comment.Comment { + return n.comments +} + +func (n TraitUsePrecedence) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n TraitUsePrecedence) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/try.go b/node/stmt/try.go index a0c4517..0d5919d 100644 --- a/node/stmt/try.go +++ b/node/stmt/try.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Try struct { position *node.Position + comments *[]comment.Comment Stmts []node.Node Catches []node.Node Finally node.Node @@ -13,6 +15,7 @@ type Try struct { func NewTry(Stmts []node.Node, Catches []node.Node, Finally node.Node) node.Node { return &Try{ + nil, nil, Stmts, Catches, @@ -33,6 +36,15 @@ func (n Try) SetPosition(p *node.Position) node.Node { return n } +func (n Try) Comments() *[]comment.Comment { + return n.comments +} + +func (n Try) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Try) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/unset.go b/node/stmt/unset.go index 6e09314..aedcb19 100644 --- a/node/stmt/unset.go +++ b/node/stmt/unset.go @@ -1,16 +1,19 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Unset struct { position *node.Position + comments *[]comment.Comment Vars []node.Node } func NewUnset(Vars []node.Node) node.Node { return &Unset{ + nil, nil, Vars, } @@ -29,6 +32,15 @@ func (n Unset) SetPosition(p *node.Position) node.Node { return n } +func (n Unset) Comments() *[]comment.Comment { + return n.comments +} + +func (n Unset) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Unset) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/use.go b/node/stmt/use.go index 8da0431..4d39676 100644 --- a/node/stmt/use.go +++ b/node/stmt/use.go @@ -1,11 +1,13 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type Use struct { position *node.Position + comments *[]comment.Comment UseType node.Node Use node.Node Alias node.Node @@ -13,6 +15,7 @@ type Use struct { func NewUse(UseType node.Node, use node.Node, Alias node.Node) node.Node { return &Use{ + nil, nil, UseType, use, @@ -33,6 +36,15 @@ func (n Use) SetPosition(p *node.Position) node.Node { return n } +func (n Use) Comments() *[]comment.Comment { + return n.comments +} + +func (n Use) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n Use) SetUseType(UseType node.Node) node.Node { n.UseType = UseType return n diff --git a/node/stmt/use_list.go b/node/stmt/use_list.go index b17fbc3..fa4a358 100644 --- a/node/stmt/use_list.go +++ b/node/stmt/use_list.go @@ -1,17 +1,20 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" ) type UseList struct { position *node.Position + comments *[]comment.Comment UseType node.Node Uses []node.Node } func NewUseList(UseType node.Node, Uses []node.Node) node.Node { return &UseList{ + nil, nil, UseType, Uses, @@ -31,6 +34,15 @@ func (n UseList) SetPosition(p *node.Position) node.Node { return n } +func (n UseList) Comments() *[]comment.Comment { + return n.comments +} + +func (n UseList) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n UseList) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/node/stmt/while.go b/node/stmt/while.go index 081d8b9..861de14 100644 --- a/node/stmt/while.go +++ b/node/stmt/while.go @@ -1,12 +1,14 @@ package stmt import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" "github.com/z7zmey/php-parser/token" ) type While struct { position *node.Position + comments *[]comment.Comment Token token.Token Cond node.Node Stmt node.Node @@ -14,6 +16,7 @@ type While struct { func NewWhile(Token token.Token, Cond node.Node, Stmt node.Node) node.Node { return &While{ + nil, nil, Token, Cond, @@ -34,6 +37,15 @@ func (n While) SetPosition(p *node.Position) node.Node { return n } +func (n While) Comments() *[]comment.Comment { + return n.comments +} + +func (n While) SetComments(c []comment.Comment) node.Node { + n.comments = &c + return n +} + func (n While) Walk(v node.Visitor) { if v.EnterNode(n) == false { return diff --git a/parser/lexer.go b/parser/lexer.go index d7432fd..9ac375e 100644 --- a/parser/lexer.go +++ b/parser/lexer.go @@ -8,6 +8,7 @@ import ( "github.com/cznic/golex/lex" "github.com/z7zmey/php-parser/comment" + t "github.com/z7zmey/php-parser/token" ) // Allocate Character classes anywhere in [0x80, 0xFF]. @@ -107,3 +108,7 @@ func (l *lexer) handleNewLine(tokenBytes []byte) ([]byte, int, int, int, int) { return tokenBytes, startln, l.lineNumber, int(l.First.Pos()), int(l.Prev.Pos()) } + +func (l *lexer) newToken() t.Token { + return t.NewToken(l.handleNewLine(l.TokenBytes(nil))).SetComments(l.comments) +} diff --git a/parser/parser.go b/parser/parser.go index 2194b8f..cc983f8 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -368,7 +368,7 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line parser/parser.y:1355 +//line parser/parser.y:1456 //line yacctab:1 var yyExca = [...]int{ @@ -2553,31 +2553,31 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:304 { - yyVAL.list = []node.Node{name.NewNamePart(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token))} + yyVAL.list = []node.Node{name.NewNamePart(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token))} } case 81: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:305 { - yyVAL.list = append(yyDollar[1].list, name.NewNamePart(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))) + yyVAL.list = append(yyDollar[1].list, name.NewNamePart(yyDollar[3].token.Value).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewTokenPosition(yyDollar[3].token))) } case 82: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:309 { - yyVAL.node = name.NewName(yyDollar[1].list).SetPosition(NewNodeListPosition(yyDollar[1].list)) + yyVAL.node = name.NewName(yyDollar[1].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListPosition(yyDollar[1].list)) } case 83: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:310 { - yyVAL.node = name.NewRelative(yyDollar[3].list).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].list)) + yyVAL.node = name.NewRelative(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[3].list)) } case 84: yyDollar = yyS[yypt-2 : yypt+1] //line parser/parser.y:311 { - yyVAL.node = name.NewFullyQualified(yyDollar[2].list).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].list)) + yyVAL.node = name.NewFullyQualified(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[2].list)) } case 85: yyDollar = yyS[yypt-1 : yypt+1] @@ -2617,2230 +2617,2268 @@ yydefault: } case 91: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:321 + //line parser/parser.y:322 { - yyVAL.node = stmt.NewNamespace(name.NewName(yyDollar[2].list).SetPosition(NewNodeListPosition(yyDollar[2].list)), nil).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + name := name.NewName(yyDollar[2].list).SetComments(ListGetFirstNodeComments(yyDollar[2].list)).SetPosition(NewNodeListPosition(yyDollar[2].list)) + yyVAL.node = stmt.NewNamespace(name, nil). + SetComments(yyDollar[1].token.Comments()). + SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 92: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:323 + //line parser/parser.y:329 { - yyVAL.node = stmt.NewNamespace(name.NewName(yyDollar[2].list).SetPosition(NewNodeListPosition(yyDollar[2].list)), yyDollar[4].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[5].token)) + name := name.NewName(yyDollar[2].list).SetComments(ListGetFirstNodeComments(yyDollar[2].list)).SetPosition(NewNodeListPosition(yyDollar[2].list)) + yyVAL.node = stmt.NewNamespace(name, yyDollar[4].list). + SetComments(yyDollar[1].token.Comments()). + SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[5].token)) } case 93: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:324 + //line parser/parser.y:335 { - yyVAL.node = stmt.NewNamespace(nil, yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = stmt.NewNamespace(nil, yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 94: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:325 + //line parser/parser.y:336 { yyVAL.node = yyDollar[2].node } case 95: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:326 + //line parser/parser.y:337 { yyVAL.node = yyDollar[3].node.(stmt.GroupUse).SetUseType(yyDollar[2].node) } case 96: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:327 + //line parser/parser.y:338 { - yyVAL.node = stmt.NewUseList(nil, yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewUseList(nil, yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 97: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:328 + //line parser/parser.y:339 { yyVAL.node = stmt.NewUseList(yyDollar[2].node, yyDollar[3].list) } case 98: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:329 + //line parser/parser.y:340 { - yyVAL.node = stmt.NewConstList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewConstList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 99: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:333 + //line parser/parser.y:344 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 100: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:334 + //line parser/parser.y:345 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 101: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:339 + //line parser/parser.y:350 { - name := name.NewName(yyDollar[1].list).SetPosition(NewNodeListPosition(yyDollar[1].list)) + name := name.NewName(yyDollar[1].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListPosition(yyDollar[1].list)) yyVAL.node = stmt.NewGroupUse(nil, name, yyDollar[4].list). + SetComments(ListGetFirstNodeComments(yyDollar[1].list)). SetPosition(NewNodeListTokenPosition(yyDollar[1].list, yyDollar[6].token)) } case 102: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:345 + //line parser/parser.y:357 { - name := name.NewName(yyDollar[2].list).SetPosition(NewNodeListPosition(yyDollar[2].list)) + name := name.NewName(yyDollar[2].list).SetComments(ListGetFirstNodeComments(yyDollar[2].list)).SetPosition(NewNodeListPosition(yyDollar[2].list)) yyVAL.node = stmt.NewGroupUse(nil, name, yyDollar[5].list). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[7].token)) } case 103: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:354 + //line parser/parser.y:367 { - name := name.NewName(yyDollar[1].list).SetPosition(NewNodeListPosition(yyDollar[1].list)) + name := name.NewName(yyDollar[1].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListPosition(yyDollar[1].list)) yyVAL.node = stmt.NewGroupUse(nil, name, yyDollar[4].list). + SetComments(ListGetFirstNodeComments(yyDollar[1].list)). SetPosition(NewNodeListTokenPosition(yyDollar[1].list, yyDollar[6].token)) } case 104: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:360 + //line parser/parser.y:374 { - name := name.NewName(yyDollar[2].list).SetPosition(NewNodeListPosition(yyDollar[2].list)) + name := name.NewName(yyDollar[2].list).SetComments(ListGetFirstNodeComments(yyDollar[2].list)).SetPosition(NewNodeListPosition(yyDollar[2].list)) yyVAL.node = stmt.NewGroupUse(nil, name, yyDollar[5].list). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[7].token)) } case 107: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:374 + //line parser/parser.y:389 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 108: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:375 + //line parser/parser.y:390 { yyVAL.list = []node.Node{yyDollar[1].node} } case 109: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:380 + //line parser/parser.y:395 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 110: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:381 + //line parser/parser.y:396 { yyVAL.list = []node.Node{yyDollar[1].node} } case 111: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:385 + //line parser/parser.y:400 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 112: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:386 + //line parser/parser.y:401 { yyVAL.list = []node.Node{yyDollar[1].node} } case 113: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:390 + //line parser/parser.y:405 { yyVAL.node = yyDollar[1].node } case 114: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:391 + //line parser/parser.y:406 { yyVAL.node = yyDollar[2].node.(stmt.Use).SetUseType(yyDollar[1].node) } case 115: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:395 + //line parser/parser.y:411 { - yyVAL.node = stmt.NewUse(nil, name.NewName(yyDollar[1].list).SetPosition(NewNodeListPosition(yyDollar[1].list)), nil).SetPosition(NewNodeListPosition(yyDollar[1].list)) + name := name.NewName(yyDollar[1].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListPosition(yyDollar[1].list)) + yyVAL.node = stmt.NewUse(nil, name, nil).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListPosition(yyDollar[1].list)) } case 116: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:396 - { - yyVAL.node = stmt.NewUse(nil, name.NewName(yyDollar[1].list).SetPosition(NewNodeListPosition(yyDollar[1].list)), node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))).SetPosition(NewNodeListTokenPosition(yyDollar[1].list, yyDollar[3].token)) - } - case 117: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:400 - { - yyVAL.node = yyDollar[1].node - } - case 118: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:401 - { - yyVAL.node = yyDollar[2].node - } - case 119: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:405 - { - yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) - } - case 120: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:406 - { - yyVAL.list = []node.Node{yyDollar[1].node} - } - case 121: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:410 - { - yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) - } - case 122: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:411 - { - yyVAL.list = []node.Node{} - } - case 123: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:415 - { - yyVAL.node = yyDollar[1].node - } - case 124: - yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:416 { - yyVAL.node = yyDollar[1].node + name := name.NewName(yyDollar[1].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListPosition(yyDollar[1].list)) + alias := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) + yyVAL.node = stmt.NewUse(nil, name, alias).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListTokenPosition(yyDollar[1].list, yyDollar[3].token)) } - case 125: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:417 - { - yyVAL.node = yyDollar[1].node - } - case 126: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:418 - { - yyVAL.node = yyDollar[1].node - } - case 127: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:419 - { - yyVAL.node = yyDollar[1].node - } - case 128: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:420 - { - yyVAL.node = stmt.NewHaltCompiler().SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) - } - case 129: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:423 - { - yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) - } - case 130: + case 117: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:424 { yyVAL.node = yyDollar[1].node } + case 118: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.y:425 + { + yyVAL.node = yyDollar[2].node + } + case 119: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:429 + { + yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) + } + case 120: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:430 + { + yyVAL.list = []node.Node{yyDollar[1].node} + } + case 121: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.y:434 + { + yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) + } + case 122: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.y:435 + { + yyVAL.list = []node.Node{} + } + case 123: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:439 + { + yyVAL.node = yyDollar[1].node + } + case 124: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:440 + { + yyVAL.node = yyDollar[1].node + } + case 125: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:441 + { + yyVAL.node = yyDollar[1].node + } + case 126: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:442 + { + yyVAL.node = yyDollar[1].node + } + case 127: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:443 + { + yyVAL.node = yyDollar[1].node + } + case 128: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:444 + { + yyVAL.node = stmt.NewHaltCompiler().SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + } + case 129: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:447 + { + yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + } + case 130: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:448 + { + yyVAL.node = yyDollar[1].node + } case 131: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:425 + //line parser/parser.y:449 { yyVAL.node = yyDollar[1].node } case 132: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:427 + //line parser/parser.y:451 { - yyVAL.node = stmt.NewWhile(yyDollar[1].token, yyDollar[3].node, yyDollar[5].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) + yyVAL.node = stmt.NewWhile(yyDollar[1].token, yyDollar[3].node, yyDollar[5].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) } case 133: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:428 + //line parser/parser.y:452 { - yyVAL.node = stmt.NewDo(yyDollar[2].node, yyDollar[5].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[7].token)) + yyVAL.node = stmt.NewDo(yyDollar[2].node, yyDollar[5].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[7].token)) } case 134: yyDollar = yyS[yypt-9 : yypt+1] - //line parser/parser.y:430 + //line parser/parser.y:454 { - yyVAL.node = stmt.NewFor(yyDollar[3].list, yyDollar[5].list, yyDollar[7].list, yyDollar[9].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node)) + yyVAL.node = stmt.NewFor(yyDollar[3].list, yyDollar[5].list, yyDollar[7].list, yyDollar[9].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node)) } case 135: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:431 + //line parser/parser.y:455 { - yyVAL.node = stmt.NewSwitch(yyDollar[1].token, yyDollar[3].node, yyDollar[5].nodesWithEndToken.nodes).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[5].nodesWithEndToken.endToken)) + yyVAL.node = stmt.NewSwitch(yyDollar[1].token, yyDollar[3].node, yyDollar[5].nodesWithEndToken.nodes).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[5].nodesWithEndToken.endToken)) } case 136: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:432 + //line parser/parser.y:456 { - yyVAL.node = stmt.NewBreak(yyDollar[2].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewBreak(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 137: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:433 + //line parser/parser.y:457 { - yyVAL.node = stmt.NewContinue(yyDollar[2].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewContinue(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 138: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:434 + //line parser/parser.y:458 { - yyVAL.node = stmt.NewReturn(yyDollar[2].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewReturn(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 139: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:435 + //line parser/parser.y:459 { - yyVAL.node = stmt.NewGlobal(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewGlobal(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 140: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:436 + //line parser/parser.y:460 { - yyVAL.node = stmt.NewStatic(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewStatic(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 141: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:437 + //line parser/parser.y:461 { - yyVAL.node = stmt.NewEcho(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewEcho(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 142: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:438 + //line parser/parser.y:462 { - yyVAL.node = stmt.NewInlineHtml(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewInlineHtml(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 143: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:439 + //line parser/parser.y:463 { - yyVAL.node = stmt.NewExpression(yyDollar[1].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token)) + yyVAL.node = stmt.NewExpression(yyDollar[1].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token)) } case 144: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:441 + //line parser/parser.y:465 { - yyVAL.node = stmt.NewUnset(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[6].token)) + yyVAL.node = stmt.NewUnset(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[6].token)) } case 145: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:443 + //line parser/parser.y:467 { - yyVAL.node = stmt.NewForeach(yyDollar[3].node, nil, yyDollar[5].foreachVariable.node, yyDollar[7].node, yyDollar[5].foreachVariable.byRef).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[7].node)) + yyVAL.node = stmt.NewForeach(yyDollar[3].node, nil, yyDollar[5].foreachVariable.node, yyDollar[7].node, yyDollar[5].foreachVariable.byRef).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[7].node)) } case 146: yyDollar = yyS[yypt-9 : yypt+1] - //line parser/parser.y:445 + //line parser/parser.y:469 { - yyVAL.node = stmt.NewForeach(yyDollar[3].node, yyDollar[5].node, yyDollar[7].foreachVariable.node, yyDollar[9].node, yyDollar[7].foreachVariable.byRef).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node)) + yyVAL.node = stmt.NewForeach(yyDollar[3].node, yyDollar[5].node, yyDollar[7].foreachVariable.node, yyDollar[9].node, yyDollar[7].foreachVariable.byRef).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[9].node)) } case 147: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:446 + //line parser/parser.y:470 { - yyVAL.node = stmt.NewDeclare(yyDollar[3].list, yyDollar[5].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) + yyVAL.node = stmt.NewDeclare(yyDollar[3].list, yyDollar[5].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) } case 148: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:447 + //line parser/parser.y:471 { - yyVAL.node = stmt.NewNop().SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewNop().SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 149: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:449 + //line parser/parser.y:473 { if yyDollar[6].node == nil { - yyVAL.node = stmt.NewTry(yyDollar[3].list, yyDollar[5].list, yyDollar[6].node).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[5].list)) + yyVAL.node = stmt.NewTry(yyDollar[3].list, yyDollar[5].list, yyDollar[6].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[5].list)) } else { - yyVAL.node = stmt.NewTry(yyDollar[3].list, yyDollar[5].list, yyDollar[6].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node)) + yyVAL.node = stmt.NewTry(yyDollar[3].list, yyDollar[5].list, yyDollar[6].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node)) } } case 150: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:456 + //line parser/parser.y:480 { - yyVAL.node = stmt.NewThrow(yyDollar[2].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = stmt.NewThrow(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 151: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:457 + //line parser/parser.y:482 { - yyVAL.node = stmt.NewGoto(node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token))).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + label := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) + yyVAL.node = stmt.NewGoto(label).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 152: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:458 + //line parser/parser.y:487 { - yyVAL.node = stmt.NewLabel(node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token))).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) + label := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewLabel(label).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) } case 153: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:461 + //line parser/parser.y:493 { yyVAL.list = []node.Node{} } case 154: yyDollar = yyS[yypt-9 : yypt+1] - //line parser/parser.y:463 + //line parser/parser.y:495 { - identifier := node.NewIdentifier(yyDollar[5].token.Value).SetPosition(NewTokenPosition(yyDollar[5].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[5].token)) - yyVAL.list = append(yyDollar[1].list, stmt.NewCatch(yyDollar[4].list, variable, yyDollar[8].list).SetPosition(NewTokensPosition(yyDollar[2].token, yyDollar[9].token))) + identifier := node.NewIdentifier(yyDollar[5].token.Value).SetComments(yyDollar[5].token.Comments()).SetPosition(NewTokenPosition(yyDollar[5].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[5].token.Comments()).SetPosition(NewTokenPosition(yyDollar[5].token)) + yyVAL.list = append(yyDollar[1].list, stmt.NewCatch(yyDollar[4].list, variable, yyDollar[8].list).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokensPosition(yyDollar[2].token, yyDollar[9].token))) } case 155: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:470 + //line parser/parser.y:502 { yyVAL.list = []node.Node{yyDollar[1].node} } case 156: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:471 + //line parser/parser.y:503 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 157: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:475 + //line parser/parser.y:507 { yyVAL.node = nil } case 158: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:476 + //line parser/parser.y:508 { - yyVAL.node = stmt.NewFinally(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = stmt.NewFinally(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 159: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:480 + //line parser/parser.y:512 { yyVAL.list = []node.Node{yyDollar[1].node} } case 160: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:481 + //line parser/parser.y:513 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 161: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:485 + //line parser/parser.y:517 { yyVAL.node = yyDollar[1].node } case 162: yyDollar = yyS[yypt-11 : yypt+1] - //line parser/parser.y:490 + //line parser/parser.y:522 { - name := node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token)) + name := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) yyVAL.node = stmt.NewFunction(name, yyDollar[2].boolWithToken.value, yyDollar[6].list, yyDollar[8].node, yyDollar[10].list, yyDollar[4].str). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[11].token)) } case 163: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:498 + //line parser/parser.y:531 { yyVAL.boolWithToken = boolWithToken{false, nil} } case 164: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:499 + //line parser/parser.y:532 { yyVAL.boolWithToken = boolWithToken{true, &yyDollar[1].token} } case 165: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:503 + //line parser/parser.y:536 { yyVAL.boolWithToken = boolWithToken{false, nil} } case 166: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:504 + //line parser/parser.y:537 { yyVAL.boolWithToken = boolWithToken{true, &yyDollar[1].token} } case 167: yyDollar = yyS[yypt-9 : yypt+1] - //line parser/parser.y:509 + //line parser/parser.y:542 { - name := node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token)) + name := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) yyVAL.node = stmt.NewClass(name, yyDollar[1].list, nil, yyDollar[4].node, yyDollar[5].list, yyDollar[8].list, yyDollar[6].str). + SetComments(yyDollar[2].token.Comments()). SetPosition(NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[9].token)) } case 168: yyDollar = yyS[yypt-8 : yypt+1] - //line parser/parser.y:515 + //line parser/parser.y:549 { - name := node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token)) + name := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) yyVAL.node = stmt.NewClass(name, nil, nil, yyDollar[3].node, yyDollar[4].list, yyDollar[7].list, yyDollar[5].str). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[8].token)) } case 169: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:523 + //line parser/parser.y:558 { yyVAL.list = []node.Node{yyDollar[1].node} } case 170: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:524 + //line parser/parser.y:559 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 171: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:528 + //line parser/parser.y:563 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 172: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:529 + //line parser/parser.y:564 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 173: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:534 + //line parser/parser.y:569 { - name := node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token)) + name := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) yyVAL.node = stmt.NewTrait(name, yyDollar[5].list, yyDollar[3].str). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[6].token)) } case 174: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:543 + //line parser/parser.y:579 { - name := node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token)) + name := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) yyVAL.node = stmt.NewInterface(name, yyDollar[3].list, yyDollar[6].list, yyDollar[4].str). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[7].token)) } case 175: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:551 + //line parser/parser.y:588 { yyVAL.node = nil } case 176: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:552 + //line parser/parser.y:589 { yyVAL.node = yyDollar[2].node } case 177: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:556 + //line parser/parser.y:593 { yyVAL.list = nil } case 178: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:557 + //line parser/parser.y:594 { yyVAL.list = yyDollar[2].list } case 179: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:561 + //line parser/parser.y:598 { yyVAL.list = nil } case 180: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:562 + //line parser/parser.y:599 { yyVAL.list = yyDollar[2].list } case 181: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:566 + //line parser/parser.y:603 { yyVAL.foreachVariable = foreachVariable{yyDollar[1].node, false} } case 182: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:567 + //line parser/parser.y:604 { yyVAL.foreachVariable = foreachVariable{yyDollar[2].node, true} } case 183: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:568 + //line parser/parser.y:605 { - yyVAL.foreachVariable = foreachVariable{expr.NewList(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)), false} + yyVAL.foreachVariable = foreachVariable{expr.NewList(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)), false} } case 184: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:569 + //line parser/parser.y:606 { - yyVAL.foreachVariable = foreachVariable{expr.NewShortList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)), false} + yyVAL.foreachVariable = foreachVariable{expr.NewShortList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)), false} } case 185: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:573 + //line parser/parser.y:610 { yyVAL.node = yyDollar[1].node } case 186: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:574 + //line parser/parser.y:611 { - yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 187: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:578 + //line parser/parser.y:615 { yyVAL.node = yyDollar[1].node } case 188: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:579 + //line parser/parser.y:616 { - yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 189: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:583 + //line parser/parser.y:620 { yyVAL.node = yyDollar[1].node } case 190: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:584 + //line parser/parser.y:621 { - yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 191: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:588 + //line parser/parser.y:625 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[2].list, yyDollar[3].token} } case 192: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:589 + //line parser/parser.y:626 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[3].list, yyDollar[4].token} } case 193: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:590 + //line parser/parser.y:627 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[2].list, yyDollar[4].token} } case 194: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:591 + //line parser/parser.y:628 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[3].list, yyDollar[5].token} } case 195: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:595 + //line parser/parser.y:632 { yyVAL.list = []node.Node{} } case 196: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:597 + //line parser/parser.y:634 { - yyVAL.list = append(yyDollar[1].list, stmt.NewCase(yyDollar[3].node, yyDollar[5].list).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[5].list))) + yyVAL.list = append(yyDollar[1].list, stmt.NewCase(yyDollar[3].node, yyDollar[5].list).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[5].list))) } case 197: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:601 + //line parser/parser.y:638 { - yyVAL.list = append(yyDollar[1].list, stmt.NewDefault(yyDollar[4].list).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list))) + yyVAL.list = append(yyDollar[1].list, stmt.NewDefault(yyDollar[4].list).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list))) } case 200: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:612 + //line parser/parser.y:649 { yyVAL.node = yyDollar[1].node } case 201: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:613 + //line parser/parser.y:650 { - yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = stmt.NewStmtList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 202: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:617 + //line parser/parser.y:654 { - yyVAL.node = stmt.NewIf(yyDollar[3].node, yyDollar[5].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) + yyVAL.node = stmt.NewIf(yyDollar[3].node, yyDollar[5].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) } case 203: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:619 + //line parser/parser.y:656 { - _elseIf := stmt.NewElseIf(yyDollar[4].node, yyDollar[6].node).SetPosition(NewTokenNodePosition(yyDollar[2].token, yyDollar[6].node)) + _elseIf := stmt.NewElseIf(yyDollar[4].node, yyDollar[6].node).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[2].token, yyDollar[6].node)) yyVAL.node = yyDollar[1].node.(stmt.If).AddElseIf(_elseIf).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[6].node)) } case 204: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:626 + //line parser/parser.y:663 { yyVAL.node = yyDollar[1].node } case 205: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:628 + //line parser/parser.y:665 { - _else := stmt.NewElse(yyDollar[3].node).SetPosition(NewTokenNodePosition(yyDollar[2].token, yyDollar[3].node)) + _else := stmt.NewElse(yyDollar[3].node).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[2].token, yyDollar[3].node)) yyVAL.node = yyDollar[1].node.(stmt.If).SetElse(_else).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 206: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:636 + //line parser/parser.y:673 { - stmts := stmt.NewStmtList(yyDollar[6].list).SetPosition(NewNodeListPosition(yyDollar[6].list)) - yyVAL.node = stmt.NewAltIf(yyDollar[3].node, stmts).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[6].list)) + stmts := stmt.NewStmtList(yyDollar[6].list).SetComments(yyDollar[5].token.Comments()).SetPosition(NewNodeListPosition(yyDollar[6].list)) + yyVAL.node = stmt.NewAltIf(yyDollar[3].node, stmts).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[1].token, yyDollar[6].list)) } case 207: yyDollar = yyS[yypt-7 : yypt+1] - //line parser/parser.y:641 + //line parser/parser.y:678 { - stmts := stmt.NewStmtList(yyDollar[7].list).SetPosition(NewNodeListPosition(yyDollar[7].list)) - _elseIf := stmt.NewAltElseIf(yyDollar[4].node, stmts).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[7].list)) + stmts := stmt.NewStmtList(yyDollar[7].list).SetComments(yyDollar[6].token.Comments()).SetPosition(NewNodeListPosition(yyDollar[7].list)) + _elseIf := stmt.NewAltElseIf(yyDollar[4].node, stmts).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[7].list)) yyVAL.node = yyDollar[1].node.(stmt.AltIf).AddElseIf(_elseIf) } case 208: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:650 + //line parser/parser.y:687 { yyVAL.node = yyDollar[1].node.SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) } case 209: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:654 + //line parser/parser.y:691 { - stmts := stmt.NewStmtList(yyDollar[4].list).SetPosition(NewNodeListPosition(yyDollar[4].list)) - _else := stmt.NewAltElse(stmts).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list)) + stmts := stmt.NewStmtList(yyDollar[4].list).SetComments(yyDollar[3].token.Comments()).SetPosition(NewNodeListPosition(yyDollar[4].list)) + _else := stmt.NewAltElse(stmts).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenNodeListPosition(yyDollar[2].token, yyDollar[4].list)) yyVAL.node = yyDollar[1].node.(stmt.AltIf).SetElse(_else).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token)) } case 210: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:662 + //line parser/parser.y:699 { yyVAL.list = yyDollar[1].list } case 211: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:663 + //line parser/parser.y:700 { yyVAL.list = nil } case 212: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:667 + //line parser/parser.y:704 { yyVAL.list = []node.Node{yyDollar[1].node} } case 213: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:668 + //line parser/parser.y:705 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 214: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:673 + //line parser/parser.y:710 { - identifier := node.NewIdentifier(yyDollar[4].token.Value).SetPosition(NewTokenPosition(yyDollar[4].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[4].token)) + identifier := node.NewIdentifier(yyDollar[4].token.Value).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) if yyDollar[1].node != nil { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) } else if yyDollar[2].boolWithToken.value == true { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewTokensPosition(*yyDollar[2].boolWithToken.token, yyDollar[4].token)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(yyDollar[2].boolWithToken.token.Comments()).SetPosition(NewTokensPosition(*yyDollar[2].boolWithToken.token, yyDollar[4].token)) } else if yyDollar[3].boolWithToken.value == true { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewTokensPosition(*yyDollar[3].boolWithToken.token, yyDollar[4].token)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(yyDollar[3].boolWithToken.token.Comments()).SetPosition(NewTokensPosition(*yyDollar[3].boolWithToken.token, yyDollar[4].token)) } else { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewTokenPosition(yyDollar[4].token)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, nil, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) } } case 215: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:687 + //line parser/parser.y:724 { - identifier := node.NewIdentifier(yyDollar[4].token.Value).SetPosition(NewTokenPosition(yyDollar[4].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[4].token)) + identifier := node.NewIdentifier(yyDollar[4].token.Value).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) if yyDollar[1].node != nil { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[6].node)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[6].node)) } else if yyDollar[2].boolWithToken.value == true { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewTokenNodePosition(*yyDollar[2].boolWithToken.token, yyDollar[6].node)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(yyDollar[2].boolWithToken.token.Comments()).SetPosition(NewTokenNodePosition(*yyDollar[2].boolWithToken.token, yyDollar[6].node)) } else if yyDollar[3].boolWithToken.value == true { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewTokenNodePosition(*yyDollar[3].boolWithToken.token, yyDollar[6].node)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(yyDollar[3].boolWithToken.token.Comments()).SetPosition(NewTokenNodePosition(*yyDollar[3].boolWithToken.token, yyDollar[6].node)) } else { - yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetPosition(NewTokenNodePosition(yyDollar[4].token, yyDollar[6].node)) + yyVAL.node = node.NewParameter(yyDollar[1].node, variable, yyDollar[6].node, yyDollar[2].boolWithToken.value, yyDollar[3].boolWithToken.value).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[4].token, yyDollar[6].node)) } } case 216: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:703 + //line parser/parser.y:740 { yyVAL.node = nil } case 217: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:704 + //line parser/parser.y:741 { yyVAL.node = yyDollar[1].node } case 218: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:708 + //line parser/parser.y:745 { yyVAL.node = yyDollar[1].node } case 219: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:709 + //line parser/parser.y:746 { - yyVAL.node = node.NewNullable(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = node.NewNullable(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 220: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:713 + //line parser/parser.y:750 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 221: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:714 + //line parser/parser.y:751 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 222: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:715 + //line parser/parser.y:752 { yyVAL.node = yyDollar[1].node } case 223: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:719 + //line parser/parser.y:756 { yyVAL.node = nil } case 224: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:720 + //line parser/parser.y:757 { yyVAL.node = yyDollar[2].node } case 225: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:724 + //line parser/parser.y:761 { yyVAL.nodesWithEndToken = &nodesWithEndToken{[]node.Node{}, yyDollar[2].token} } case 226: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:725 + //line parser/parser.y:762 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[2].list, yyDollar[4].token} } case 227: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:729 + //line parser/parser.y:766 { yyVAL.list = []node.Node{yyDollar[1].node} } case 228: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:730 + //line parser/parser.y:767 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 229: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:734 + //line parser/parser.y:771 { - yyVAL.node = node.NewArgument(yyDollar[1].node, false).SetPosition(NewNodePosition(yyDollar[1].node)) + yyVAL.node = node.NewArgument(yyDollar[1].node, false).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodePosition(yyDollar[1].node)) } case 230: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:735 + //line parser/parser.y:772 { - yyVAL.node = node.NewArgument(yyDollar[2].node, true).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = node.NewArgument(yyDollar[2].node, true).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 231: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:739 + //line parser/parser.y:776 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 232: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:740 + //line parser/parser.y:777 { yyVAL.list = []node.Node{yyDollar[1].node} } case 233: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:744 + //line parser/parser.y:781 { yyVAL.node = yyDollar[1].node } case 234: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:748 + //line parser/parser.y:785 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 235: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:749 + //line parser/parser.y:786 { yyVAL.list = []node.Node{yyDollar[1].node} } case 236: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:754 + //line parser/parser.y:791 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = stmt.NewStaticVar(variable, nil).SetPosition(NewTokenPosition(yyDollar[1].token)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewStaticVar(variable, nil).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 237: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:760 + //line parser/parser.y:797 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = stmt.NewStaticVar(variable, yyDollar[3].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewStaticVar(variable, yyDollar[3].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) } case 238: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:768 + //line parser/parser.y:805 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 239: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:769 + //line parser/parser.y:806 { yyVAL.list = []node.Node{} } case 240: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:773 + //line parser/parser.y:810 { - yyVAL.node = stmt.NewPropertyList(yyDollar[1].list, yyDollar[2].list).SetPosition(NewNodeListTokenPosition(yyDollar[1].list, yyDollar[3].token)) + yyVAL.node = stmt.NewPropertyList(yyDollar[1].list, yyDollar[2].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewNodeListTokenPosition(yyDollar[1].list, yyDollar[3].token)) } case 241: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:774 + //line parser/parser.y:811 { - yyVAL.node = stmt.NewClassConstList(yyDollar[1].list, yyDollar[3].list).SetPosition(NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[4].token)) + yyVAL.node = stmt.NewClassConstList(yyDollar[1].list, yyDollar[3].list).SetComments(ListGetFirstNodeComments(yyDollar[1].list)).SetPosition(NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[4].token)) } case 242: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:775 + //line parser/parser.y:812 { - yyVAL.node = stmt.NewTraitUse(yyDollar[2].list, yyDollar[3].nodesWithEndToken.nodes).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].nodesWithEndToken.endToken)) + yyVAL.node = stmt.NewTraitUse(yyDollar[2].list, yyDollar[3].nodesWithEndToken.nodes).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].nodesWithEndToken.endToken)) } case 243: yyDollar = yyS[yypt-10 : yypt+1] - //line parser/parser.y:777 + //line parser/parser.y:814 { - name := node.NewIdentifier(yyDollar[4].token.Value).SetPosition(NewTokenPosition(yyDollar[4].token)) + name := node.NewIdentifier(yyDollar[4].token.Value).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) yyVAL.node = stmt.NewClassMethod(name, yyDollar[1].list, yyDollar[3].boolWithToken.value, yyDollar[7].list, yyDollar[9].node, yyDollar[10].nodesWithEndToken.nodes, yyDollar[5].str). + SetComments(ListGetFirstNodeComments(yyDollar[1].list)). SetPosition(NewOptionalListTokensPosition(yyDollar[1].list, yyDollar[2].token, yyDollar[10].nodesWithEndToken.endToken)) } case 244: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:785 + //line parser/parser.y:823 { yyVAL.list = []node.Node{yyDollar[1].node} } case 245: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:786 + //line parser/parser.y:824 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 246: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:790 + //line parser/parser.y:828 { yyVAL.nodesWithEndToken = &nodesWithEndToken{nil, yyDollar[1].token} } case 247: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:791 + //line parser/parser.y:829 { yyVAL.nodesWithEndToken = &nodesWithEndToken{nil, yyDollar[2].token} } case 248: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:792 + //line parser/parser.y:830 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[2].list, yyDollar[3].token} } case 249: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:796 + //line parser/parser.y:834 { yyVAL.list = []node.Node{yyDollar[1].node} } case 250: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:797 + //line parser/parser.y:835 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 251: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:801 + //line parser/parser.y:839 { yyVAL.node = yyDollar[1].node } case 252: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:802 + //line parser/parser.y:840 { yyVAL.node = yyDollar[1].node } case 253: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:807 + //line parser/parser.y:845 { - yyVAL.node = stmt.NewTraitUsePrecedence(yyDollar[1].node, name.NewName(yyDollar[3].list).SetPosition(NewNodeListPosition(yyDollar[3].list))). + name := name.NewName(yyDollar[3].list).SetComments(ListGetFirstNodeComments(yyDollar[3].list)).SetPosition(NewNodeListPosition(yyDollar[3].list)) + yyVAL.node = stmt.NewTraitUsePrecedence(yyDollar[1].node, name). + SetComments(*yyDollar[1].node.Comments()). SetPosition(NewNodeNodeListPosition(yyDollar[1].node, yyDollar[3].list)) } case 254: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:814 + //line parser/parser.y:855 { - yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, nil, node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) + alias := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) + yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, nil, alias). + SetComments(*yyDollar[1].node.Comments()). + SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) } case 255: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:816 + //line parser/parser.y:862 { - yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, nil, node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) + alias := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) + yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, nil, alias). + SetComments(*yyDollar[1].node.Comments()). + SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) } case 256: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:818 + //line parser/parser.y:869 { - yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, yyDollar[3].node, node.NewIdentifier(yyDollar[4].token.Value).SetPosition(NewTokenPosition(yyDollar[4].token))).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + alias := node.NewIdentifier(yyDollar[4].token.Value).SetComments(yyDollar[4].token.Comments()).SetPosition(NewTokenPosition(yyDollar[4].token)) + yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, yyDollar[3].node, alias). + SetComments(*yyDollar[1].node.Comments()). + SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) } case 257: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:819 + //line parser/parser.y:876 { - yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, yyDollar[3].node, nil).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = stmt.NewTraitUseAlias(yyDollar[1].node, yyDollar[3].node, nil).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 258: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:823 + //line parser/parser.y:883 { - yyVAL.node = stmt.NewTraitMethodRef(nil, node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token))).SetPosition(NewTokenPosition(yyDollar[1].token)) + name := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewTraitMethodRef(nil, name).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 259: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:824 + //line parser/parser.y:887 { yyVAL.node = yyDollar[1].node } case 260: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:828 + //line parser/parser.y:892 { - yyVAL.node = stmt.NewTraitMethodRef(yyDollar[1].node, node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) + target := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) + yyVAL.node = stmt.NewTraitMethodRef(yyDollar[1].node, target).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) } case 261: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:832 + //line parser/parser.y:899 { yyVAL.nodesWithEndToken = &nodesWithEndToken{nil, yyDollar[1].token} } case 262: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:833 + //line parser/parser.y:900 { yyVAL.nodesWithEndToken = &nodesWithEndToken{yyDollar[2].list, yyDollar[3].token} } case 263: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:837 + //line parser/parser.y:904 { yyVAL.list = yyDollar[1].list } case 264: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:838 + //line parser/parser.y:905 { - yyVAL.list = []node.Node{node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token))} + yyVAL.list = []node.Node{node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token))} } case 265: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:842 + //line parser/parser.y:909 { yyVAL.list = nil } case 266: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:843 + //line parser/parser.y:910 { yyVAL.list = yyDollar[1].list } case 267: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:847 + //line parser/parser.y:914 { yyVAL.list = []node.Node{yyDollar[1].node} } case 268: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:848 + //line parser/parser.y:915 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 269: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:852 + //line parser/parser.y:919 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 270: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:853 + //line parser/parser.y:920 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 271: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:854 + //line parser/parser.y:921 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 272: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:855 + //line parser/parser.y:922 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 273: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:856 + //line parser/parser.y:923 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 274: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:857 + //line parser/parser.y:924 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 275: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:861 + //line parser/parser.y:928 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 276: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:862 + //line parser/parser.y:929 { yyVAL.list = []node.Node{yyDollar[1].node} } case 277: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:867 + //line parser/parser.y:934 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = stmt.NewProperty(variable, nil, yyDollar[2].str).SetPosition(NewTokenPosition(yyDollar[1].token)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewProperty(variable, nil, yyDollar[2].str).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 278: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:873 + //line parser/parser.y:940 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = stmt.NewProperty(variable, yyDollar[3].node, yyDollar[4].str).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewProperty(variable, yyDollar[3].node, yyDollar[4].str).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) } case 279: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:881 + //line parser/parser.y:948 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 280: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:882 + //line parser/parser.y:949 { yyVAL.list = []node.Node{yyDollar[1].node} } case 281: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:887 + //line parser/parser.y:954 { - name := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = stmt.NewConstant(name, yyDollar[3].node, yyDollar[4].str).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) + name := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewConstant(name, yyDollar[3].node, yyDollar[4].str).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) } case 282: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:895 + //line parser/parser.y:962 { - name := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = stmt.NewConstant(name, yyDollar[3].node, yyDollar[4].str).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) + name := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = stmt.NewConstant(name, yyDollar[3].node, yyDollar[4].str).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[3].node)) } case 283: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:902 + //line parser/parser.y:969 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 284: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:903 + //line parser/parser.y:970 { yyVAL.list = []node.Node{yyDollar[1].node} } case 285: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:907 + //line parser/parser.y:974 { yyVAL.node = yyDollar[1].node } case 286: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:911 + //line parser/parser.y:978 { yyVAL.list = nil } case 287: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:912 + //line parser/parser.y:979 { yyVAL.list = yyDollar[1].list } case 288: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:915 + //line parser/parser.y:982 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 289: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:916 + //line parser/parser.y:983 { yyVAL.list = []node.Node{yyDollar[1].node} } case 290: yyDollar = yyS[yypt-8 : yypt+1] - //line parser/parser.y:921 + //line parser/parser.y:988 { if yyDollar[2].nodesWithEndToken != nil { - yyVAL.node = stmt.NewClass(nil, nil, yyDollar[2].nodesWithEndToken.nodes, yyDollar[3].node, yyDollar[4].list, yyDollar[7].list, yyDollar[5].str).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[8].token)) + yyVAL.node = stmt.NewClass(nil, nil, yyDollar[2].nodesWithEndToken.nodes, yyDollar[3].node, yyDollar[4].list, yyDollar[7].list, yyDollar[5].str).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[8].token)) } else { - yyVAL.node = stmt.NewClass(nil, nil, nil, yyDollar[3].node, yyDollar[4].list, yyDollar[7].list, yyDollar[5].str).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[8].token)) + yyVAL.node = stmt.NewClass(nil, nil, nil, yyDollar[3].node, yyDollar[4].list, yyDollar[7].list, yyDollar[5].str).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[8].token)) } } case 291: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:932 + //line parser/parser.y:999 { if yyDollar[3].nodesWithEndToken != nil { - yyVAL.node = expr.NewNew(yyDollar[2].node, yyDollar[3].nodesWithEndToken.nodes).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].nodesWithEndToken.endToken)) + yyVAL.node = expr.NewNew(yyDollar[2].node, yyDollar[3].nodesWithEndToken.nodes).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].nodesWithEndToken.endToken)) } else { - yyVAL.node = expr.NewNew(yyDollar[2].node, nil).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewNew(yyDollar[2].node, nil).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } } case 292: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:939 + //line parser/parser.y:1006 { yyVAL.node = expr.NewNew(yyDollar[2].node, nil) } case 293: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:944 + //line parser/parser.y:1011 { - list := expr.NewList(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) - yyVAL.node = assign_op.NewAssign(list, yyDollar[6].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node)) + list := expr.NewList(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = assign_op.NewAssign(list, yyDollar[6].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[6].node)) } case 294: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:949 + //line parser/parser.y:1016 { - shortList := expr.NewShortList(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) - yyVAL.node = assign_op.NewAssign(shortList, yyDollar[5].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) + shortList := expr.NewShortList(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = assign_op.NewAssign(shortList, yyDollar[5].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[5].node)) } case 295: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:953 + //line parser/parser.y:1020 { - yyVAL.node = assign_op.NewAssign(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewAssign(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 296: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:954 + //line parser/parser.y:1021 { - yyVAL.node = assign_op.NewAssignRef(yyDollar[1].node, yyDollar[4].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[4].node)) + yyVAL.node = assign_op.NewAssignRef(yyDollar[1].node, yyDollar[4].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[4].node)) } case 297: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:955 + //line parser/parser.y:1022 { - yyVAL.node = expr.NewClone(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewClone(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 298: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:956 + //line parser/parser.y:1023 { - yyVAL.node = assign_op.NewPlus(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewPlus(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 299: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:957 + //line parser/parser.y:1024 { - yyVAL.node = assign_op.NewMinus(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewMinus(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 300: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:958 + //line parser/parser.y:1025 { - yyVAL.node = assign_op.NewMul(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewMul(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 301: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:959 + //line parser/parser.y:1026 { - yyVAL.node = assign_op.NewPow(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewPow(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 302: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:960 + //line parser/parser.y:1027 { - yyVAL.node = assign_op.NewDiv(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewDiv(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 303: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:961 + //line parser/parser.y:1028 { - yyVAL.node = assign_op.NewConcat(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewConcat(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 304: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:962 + //line parser/parser.y:1029 { - yyVAL.node = assign_op.NewMod(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewMod(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 305: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:963 + //line parser/parser.y:1030 { - yyVAL.node = assign_op.NewBitwiseAnd(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewBitwiseAnd(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 306: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:964 + //line parser/parser.y:1031 { - yyVAL.node = assign_op.NewBitwiseOr(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewBitwiseOr(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 307: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:965 + //line parser/parser.y:1032 { - yyVAL.node = assign_op.NewBitwiseXor(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewBitwiseXor(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 308: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:966 + //line parser/parser.y:1033 { - yyVAL.node = assign_op.NewShiftLeft(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewShiftLeft(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 309: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:967 + //line parser/parser.y:1034 { - yyVAL.node = assign_op.NewShiftRight(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = assign_op.NewShiftRight(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 310: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:968 + //line parser/parser.y:1035 { - yyVAL.node = expr.NewPostInc(yyDollar[1].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token)) + yyVAL.node = expr.NewPostInc(yyDollar[1].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token)) } case 311: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:969 + //line parser/parser.y:1036 { - yyVAL.node = expr.NewPreInc(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewPreInc(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 312: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:970 + //line parser/parser.y:1037 { - yyVAL.node = expr.NewPostDec(yyDollar[1].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token)) + yyVAL.node = expr.NewPostDec(yyDollar[1].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].token)) } case 313: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:971 + //line parser/parser.y:1038 { - yyVAL.node = expr.NewPreDec(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewPreDec(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 314: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:972 + //line parser/parser.y:1039 { - yyVAL.node = binary_op.NewBooleanOr(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewBooleanOr(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 315: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:973 + //line parser/parser.y:1040 { - yyVAL.node = binary_op.NewBooleanAnd(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewBooleanAnd(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 316: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:974 + //line parser/parser.y:1041 { - yyVAL.node = binary_op.NewLogicalOr(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewLogicalOr(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 317: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:975 + //line parser/parser.y:1042 { - yyVAL.node = binary_op.NewLogicalAnd(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewLogicalAnd(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 318: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:976 + //line parser/parser.y:1043 { - yyVAL.node = binary_op.NewLogicalXor(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewLogicalXor(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 319: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:977 + //line parser/parser.y:1044 { - yyVAL.node = binary_op.NewBitwiseOr(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewBitwiseOr(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 320: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:978 + //line parser/parser.y:1045 { - yyVAL.node = binary_op.NewBitwiseAnd(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewBitwiseAnd(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 321: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:979 + //line parser/parser.y:1046 { - yyVAL.node = binary_op.NewBitwiseXor(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewBitwiseXor(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 322: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:980 + //line parser/parser.y:1047 { - yyVAL.node = binary_op.NewConcat(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewConcat(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 323: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:981 + //line parser/parser.y:1048 { - yyVAL.node = binary_op.NewPlus(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewPlus(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 324: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:982 + //line parser/parser.y:1049 { - yyVAL.node = binary_op.NewMinus(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewMinus(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 325: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:983 + //line parser/parser.y:1050 { - yyVAL.node = binary_op.NewMul(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewMul(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 326: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:984 + //line parser/parser.y:1051 { - yyVAL.node = binary_op.NewPow(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewPow(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 327: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:985 + //line parser/parser.y:1052 { - yyVAL.node = binary_op.NewDiv(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewDiv(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 328: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:986 + //line parser/parser.y:1053 { - yyVAL.node = binary_op.NewMod(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewMod(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 329: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:987 + //line parser/parser.y:1054 { - yyVAL.node = binary_op.NewShiftLeft(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewShiftLeft(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 330: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:988 + //line parser/parser.y:1055 { - yyVAL.node = binary_op.NewShiftRight(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewShiftRight(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 331: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:989 + //line parser/parser.y:1056 { - yyVAL.node = expr.NewUnaryPlus(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewUnaryPlus(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 332: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:990 + //line parser/parser.y:1057 { - yyVAL.node = expr.NewUnaryMinus(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewUnaryMinus(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 333: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:991 + //line parser/parser.y:1058 { - yyVAL.node = expr.NewBooleanNot(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewBooleanNot(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 334: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:992 + //line parser/parser.y:1059 { - yyVAL.node = expr.NewBitwiseNot(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewBitwiseNot(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 335: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:993 + //line parser/parser.y:1060 { - yyVAL.node = binary_op.NewIdentical(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewIdentical(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 336: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:994 + //line parser/parser.y:1061 { - yyVAL.node = binary_op.NewNotIdentical(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewNotIdentical(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 337: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:995 + //line parser/parser.y:1062 { - yyVAL.node = binary_op.NewEqual(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewEqual(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 338: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:996 + //line parser/parser.y:1063 { - yyVAL.node = binary_op.NewNotEqual(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewNotEqual(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 339: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:997 + //line parser/parser.y:1064 { - yyVAL.node = binary_op.NewSmaller(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewSmaller(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 340: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:998 + //line parser/parser.y:1065 { - yyVAL.node = binary_op.NewSmallerOrEqual(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewSmallerOrEqual(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 341: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:999 + //line parser/parser.y:1066 { - yyVAL.node = binary_op.NewGreater(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewGreater(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 342: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1000 + //line parser/parser.y:1067 { - yyVAL.node = binary_op.NewGreaterOrEqual(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewGreaterOrEqual(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 343: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1001 + //line parser/parser.y:1068 { - yyVAL.node = binary_op.NewSpaceship(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewSpaceship(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 344: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1002 + //line parser/parser.y:1069 { - yyVAL.node = expr.NewInstanceOf(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = expr.NewInstanceOf(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 345: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1003 + //line parser/parser.y:1070 { yyVAL.node = yyDollar[2].node } case 346: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1004 + //line parser/parser.y:1071 { yyVAL.node = yyDollar[1].node } case 347: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:1005 + //line parser/parser.y:1072 { - yyVAL.node = expr.NewTernary(yyDollar[1].node, yyDollar[3].node, yyDollar[5].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[5].node)) + yyVAL.node = expr.NewTernary(yyDollar[1].node, yyDollar[3].node, yyDollar[5].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[5].node)) } case 348: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1006 + //line parser/parser.y:1073 { - yyVAL.node = expr.NewTernary(yyDollar[1].node, nil, yyDollar[4].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[4].node)) + yyVAL.node = expr.NewTernary(yyDollar[1].node, nil, yyDollar[4].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[4].node)) } case 349: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1007 + //line parser/parser.y:1074 { - yyVAL.node = binary_op.NewCoalesce(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = binary_op.NewCoalesce(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 350: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1008 + //line parser/parser.y:1075 { yyVAL.node = yyDollar[1].node } case 351: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1009 + //line parser/parser.y:1076 { - yyVAL.node = cast.NewCastInt(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = cast.NewCastInt(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 352: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1010 + //line parser/parser.y:1077 { - yyVAL.node = cast.NewCastDouble(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = cast.NewCastDouble(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 353: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1011 + //line parser/parser.y:1078 { - yyVAL.node = cast.NewCastString(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = cast.NewCastString(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 354: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1012 + //line parser/parser.y:1079 { - yyVAL.node = cast.NewCastArray(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = cast.NewCastArray(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 355: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1013 + //line parser/parser.y:1080 { - yyVAL.node = cast.NewCastObject(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = cast.NewCastObject(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 356: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1014 + //line parser/parser.y:1081 { - yyVAL.node = cast.NewCastBool(yyDollar[2].node.SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))) + yyVAL.node = cast.NewCastBool(yyDollar[2].node.SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))) } case 357: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1015 + //line parser/parser.y:1082 { - yyVAL.node = cast.NewCastUnset(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = cast.NewCastUnset(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 358: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1016 + //line parser/parser.y:1083 { - yyVAL.node = expr.NewExit(yyDollar[2].node, strings.EqualFold(yyDollar[1].token.Value, "die")).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewExit(yyDollar[2].node, strings.EqualFold(yyDollar[1].token.Value, "die")).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 359: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1017 + //line parser/parser.y:1084 { - yyVAL.node = expr.NewErrorSuppress(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewErrorSuppress(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 360: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1018 + //line parser/parser.y:1085 { yyVAL.node = yyDollar[1].node } case 361: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1019 + //line parser/parser.y:1086 { - yyVAL.node = expr.NewShellExec(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = expr.NewShellExec(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 362: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1020 + //line parser/parser.y:1087 { - yyVAL.node = expr.NewPrint(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewPrint(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 363: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1021 + //line parser/parser.y:1088 { - yyVAL.node = expr.NewYield(nil, nil).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewYield(nil, nil).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 364: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1022 + //line parser/parser.y:1089 { - yyVAL.node = expr.NewYield(nil, yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewYield(nil, yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 365: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1023 + //line parser/parser.y:1090 { - yyVAL.node = expr.NewYield(yyDollar[2].node, yyDollar[4].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node)) + yyVAL.node = expr.NewYield(yyDollar[2].node, yyDollar[4].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[4].node)) } case 366: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1024 + //line parser/parser.y:1091 { - yyVAL.node = expr.NewYieldFrom(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewYieldFrom(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 367: yyDollar = yyS[yypt-11 : yypt+1] - //line parser/parser.y:1026 + //line parser/parser.y:1093 { yyVAL.node = expr.NewClosure(yyDollar[5].list, yyDollar[7].list, yyDollar[8].node, yyDollar[10].list, false, yyDollar[2].boolWithToken.value, yyDollar[3].str). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[11].token)) } case 368: yyDollar = yyS[yypt-12 : yypt+1] - //line parser/parser.y:1031 + //line parser/parser.y:1099 { yyVAL.node = expr.NewClosure(yyDollar[6].list, yyDollar[8].list, yyDollar[9].node, yyDollar[11].list, true, yyDollar[3].boolWithToken.value, yyDollar[4].str). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[12].token)) } case 369: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1038 + //line parser/parser.y:1107 { yyVAL.str = yylex.(*lexer).phpDocComment yylex.(*lexer).phpDocComment = "" } case 370: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1042 + //line parser/parser.y:1111 { yyVAL.boolWithToken = boolWithToken{false, nil} } case 371: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1043 + //line parser/parser.y:1112 { yyVAL.boolWithToken = boolWithToken{true, &yyDollar[1].token} } case 372: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1047 + //line parser/parser.y:1116 { yyVAL.list = []node.Node{} } case 373: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1048 + //line parser/parser.y:1117 { yyVAL.list = yyDollar[3].list } case 374: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1052 + //line parser/parser.y:1121 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 375: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1053 + //line parser/parser.y:1122 { yyVAL.list = []node.Node{yyDollar[1].node} } case 376: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1058 + //line parser/parser.y:1127 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = expr.NewClusureUse(variable, false).SetPosition(NewTokenPosition(yyDollar[1].token)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewClusureUse(variable, false).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 377: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1064 + //line parser/parser.y:1133 { - identifier := node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[2].token)) - yyVAL.node = expr.NewClusureUse(variable, true).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) + identifier := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) + yyVAL.node = expr.NewClusureUse(variable, true).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) } case 378: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1072 + //line parser/parser.y:1142 { - yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].nodesWithEndToken.nodes).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].nodesWithEndToken.endToken)) + yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].nodesWithEndToken.nodes).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].nodesWithEndToken.endToken)) } case 379: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1074 + //line parser/parser.y:1146 { - yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].nodesWithEndToken.nodes).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].nodesWithEndToken.endToken)) + yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].nodesWithEndToken.nodes).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].nodesWithEndToken.endToken)) } case 380: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1078 + //line parser/parser.y:1150 { - yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].nodesWithEndToken.nodes).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].nodesWithEndToken.endToken)) + yyVAL.node = expr.NewStaticCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].nodesWithEndToken.nodes).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].nodesWithEndToken.endToken)) } case 381: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1081 + //line parser/parser.y:1154 { - yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].nodesWithEndToken.nodes).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].nodesWithEndToken.endToken)) + yyVAL.node = expr.NewFunctionCall(yyDollar[1].node, yyDollar[2].nodesWithEndToken.nodes).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[2].nodesWithEndToken.endToken)) } case 382: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1085 - { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 383: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1086 - { - yyVAL.node = yyDollar[1].node - } - case 384: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1090 - { - yyVAL.node = yyDollar[1].node - } - case 385: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1091 - { - yyVAL.node = yyDollar[1].node - } - case 386: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1095 - { - yyVAL.node = nil - } - case 387: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1096 - { - yyVAL.node = yyDollar[2].node - } - case 388: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1100 - { - yyVAL.list = []node.Node{} - } - case 389: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1101 - { - yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token.Value)} - } - case 390: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1102 - { - yyVAL.list = yyDollar[1].list - } - case 391: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1106 - { - yyVAL.nodesWithEndToken = nil - } - case 392: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1107 - { - yyVAL.nodesWithEndToken = yyDollar[1].nodesWithEndToken - } - case 393: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1111 - { - yyVAL.node = expr.NewArray(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) - } - case 394: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1112 - { - yyVAL.node = expr.NewShortArray(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) - } - case 395: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1113 - { - yyVAL.node = scalar.NewString(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 396: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1117 - { - yyVAL.node = scalar.NewLnumber(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 397: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1118 - { - yyVAL.node = scalar.NewDnumber(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 398: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1119 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 399: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1120 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 400: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1121 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 401: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1122 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 402: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1123 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 403: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1124 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 404: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1125 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 405: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1126 - { - yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 406: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1128 - { - yyVAL.node = scalar.NewString(yyDollar[2].token.Value).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) /* TODO: mark as Heredoc*/ - } - case 407: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1130 - { - yyVAL.node = scalar.NewEncapsed(nil).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) - } - case 408: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1131 - { - yyVAL.node = scalar.NewEncapsed(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) - } - case 409: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1132 - { - yyVAL.node = scalar.NewEncapsed(yyDollar[2].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) - } - case 410: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1133 - { - yyVAL.node = yyDollar[1].node - } - case 411: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1134 - { - yyVAL.node = yyDollar[1].node - } - case 412: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1138 - { - yyVAL.node = expr.NewConstFetch(yyDollar[1].node).SetPosition(NewNodePosition(yyDollar[1].node)) - } - case 413: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1139 - { - yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) - } - case 414: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1141 - { - yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) - } - case 415: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1145 - { - yyVAL.node = yyDollar[1].node - } - case 416: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1146 - { - yyVAL.node = yyDollar[1].node - } - case 417: - yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1150 - { - yyVAL.node = nil - } - case 418: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1151 - { - yyVAL.node = yyDollar[1].node - } - case 419: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1155 - { - yyVAL.node = yyDollar[1].node - } - case 420: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1159 - { - yyVAL.node = yyDollar[1].node - } - case 421: - yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:1160 { - yyVAL.node = yyDollar[2].node + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } - case 422: + case 383: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1161 { yyVAL.node = yyDollar[1].node } - case 423: + case 384: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1165 { yyVAL.node = yyDollar[1].node } - case 424: - yyDollar = yyS[yypt-3 : yypt+1] + case 385: + yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1166 + { + yyVAL.node = yyDollar[1].node + } + case 386: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.y:1170 + { + yyVAL.node = nil + } + case 387: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1171 { yyVAL.node = yyDollar[2].node } - case 425: + case 388: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.y:1175 + { + yyVAL.list = []node.Node{} + } + case 389: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1167 - { - yyVAL.node = yyDollar[1].node - } - case 426: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1171 - { - yyVAL.node = yyDollar[1].node - } - case 427: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1172 - { - yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) - } - case 428: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1173 - { - yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) - } - case 429: - yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1174 - { - yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) - } - case 430: - yyDollar = yyS[yypt-4 : yypt+1] //line parser/parser.y:1176 { - yyVAL.node = expr.NewMethodCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].nodesWithEndToken.nodes).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].nodesWithEndToken.endToken)) + yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token.Value)} } - case 431: + case 390: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1177 { - yyVAL.node = yyDollar[1].node + yyVAL.list = yyDollar[1].list } - case 432: - yyDollar = yyS[yypt-1 : yypt+1] + case 391: + yyDollar = yyS[yypt-0 : yypt+1] //line parser/parser.y:1181 { - yyVAL.node = yyDollar[1].node + yyVAL.nodesWithEndToken = nil } - case 433: + case 392: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1182 { - yyVAL.node = yyDollar[1].node + yyVAL.nodesWithEndToken = yyDollar[1].nodesWithEndToken } - case 434: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1183 + case 393: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1186 { - yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = expr.NewArray(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } - case 435: - yyDollar = yyS[yypt-1 : yypt+1] + case 394: + yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:1187 { - yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token))).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewShortArray(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } - case 436: - yyDollar = yyS[yypt-4 : yypt+1] + case 395: + yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1188 { - yyVAL.node = expr.NewVariable(yyDollar[3].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = scalar.NewString(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } - case 437: - yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1189 + case 396: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1192 { - yyVAL.node = expr.NewVariable(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = scalar.NewLnumber(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } - case 438: - yyDollar = yyS[yypt-3 : yypt+1] + case 397: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1193 + { + yyVAL.node = scalar.NewDnumber(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 398: + yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1194 { - yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } - case 439: - yyDollar = yyS[yypt-3 : yypt+1] + case 399: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1195 + { + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 400: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1196 + { + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 401: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1197 + { + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 402: + yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1198 { - yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } - case 440: + case 403: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1204 + //line parser/parser.y:1199 { - yyVAL.node = yyDollar[1].node + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } - case 441: - yyDollar = yyS[yypt-4 : yypt+1] + case 404: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1200 + { + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 405: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1201 + { + yyVAL.node = scalar.NewMagicConstant(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 406: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1203 + { + yyVAL.node = scalar.NewString(yyDollar[2].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) /* TODO: mark as Heredoc*/ + } + case 407: + yyDollar = yyS[yypt-2 : yypt+1] //line parser/parser.y:1205 { - yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + yyVAL.node = scalar.NewEncapsed(nil).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) } - case 442: - yyDollar = yyS[yypt-4 : yypt+1] + case 408: + yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:1206 { - yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + yyVAL.node = scalar.NewEncapsed(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } - case 443: + case 409: yyDollar = yyS[yypt-3 : yypt+1] //line parser/parser.y:1207 { - yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = scalar.NewEncapsed(yyDollar[2].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } - case 444: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1209 - { - yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) - } - case 445: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1213 - { - yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) - } - case 446: + case 410: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1219 - { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - } - case 447: - yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1220 - { - yyVAL.node = yyDollar[2].node - } - case 448: - yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1221 + //line parser/parser.y:1208 { yyVAL.node = yyDollar[1].node } - case 449: + case 411: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1225 + //line parser/parser.y:1209 { - yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = yyDollar[1].node } - case 450: + case 412: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1213 + { + yyVAL.node = expr.NewConstFetch(yyDollar[1].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodePosition(yyDollar[1].node)) + } + case 413: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1226 + //line parser/parser.y:1215 { - yyVAL.node = yyDollar[2].node + target := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) + yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, target).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) } - case 451: + case 414: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1220 + { + target := node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token)) + yyVAL.node = expr.NewClassConstFetch(yyDollar[1].node, target).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[3].token)) + } + case 415: yyDollar = yyS[yypt-1 : yypt+1] //line parser/parser.y:1227 { yyVAL.node = yyDollar[1].node } + case 416: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1228 + { + yyVAL.node = yyDollar[1].node + } + case 417: + yyDollar = yyS[yypt-0 : yypt+1] + //line parser/parser.y:1232 + { + yyVAL.node = nil + } + case 418: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1233 + { + yyVAL.node = yyDollar[1].node + } + case 419: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1237 + { + yyVAL.node = yyDollar[1].node + } + case 420: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1241 + { + yyVAL.node = yyDollar[1].node + } + case 421: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1242 + { + yyVAL.node = yyDollar[2].node + } + case 422: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1243 + { + yyVAL.node = yyDollar[1].node + } + case 423: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1247 + { + yyVAL.node = yyDollar[1].node + } + case 424: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1248 + { + yyVAL.node = yyDollar[2].node + } + case 425: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1249 + { + yyVAL.node = yyDollar[1].node + } + case 426: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1253 + { + yyVAL.node = yyDollar[1].node + } + case 427: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1254 + { + yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + } + case 428: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1255 + { + yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + } + case 429: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1256 + { + yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + } + case 430: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1258 + { + yyVAL.node = expr.NewMethodCall(yyDollar[1].node, yyDollar[3].node, yyDollar[4].nodesWithEndToken.nodes).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].nodesWithEndToken.endToken)) + } + case 431: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1259 + { + yyVAL.node = yyDollar[1].node + } + case 432: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1263 + { + yyVAL.node = yyDollar[1].node + } + case 433: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1264 + { + yyVAL.node = yyDollar[1].node + } + case 434: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1265 + { + yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + } + case 435: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1269 + { + yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token))).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 436: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1270 + { + yyVAL.node = expr.NewVariable(yyDollar[3].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + } + case 437: + yyDollar = yyS[yypt-2 : yypt+1] + //line parser/parser.y:1271 + { + yyVAL.node = expr.NewVariable(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + } + case 438: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1276 + { + yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + } + case 439: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1280 + { + yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + } + case 440: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1286 + { + yyVAL.node = yyDollar[1].node + } + case 441: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1287 + { + yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + } + case 442: + yyDollar = yyS[yypt-4 : yypt+1] + //line parser/parser.y:1288 + { + yyVAL.node = expr.NewArrayDimFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[4].token)) + } + case 443: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1289 + { + yyVAL.node = expr.NewPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + } + case 444: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1291 + { + yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + } + case 445: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1295 + { + yyVAL.node = expr.NewStaticPropertyFetch(yyDollar[1].node, yyDollar[3].node).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + } + case 446: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1301 + { + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 447: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1302 + { + yyVAL.node = yyDollar[2].node + } + case 448: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1303 + { + yyVAL.node = yyDollar[1].node + } + case 449: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1307 + { + yyVAL.node = node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + } + case 450: + yyDollar = yyS[yypt-3 : yypt+1] + //line parser/parser.y:1308 + { + yyVAL.node = yyDollar[2].node + } + case 451: + yyDollar = yyS[yypt-1 : yypt+1] + //line parser/parser.y:1309 + { + yyVAL.node = yyDollar[1].node + } case 452: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1232 + //line parser/parser.y:1314 { if yyDollar[1].list[len(yyDollar[1].list)-1] == nil { yyVAL.list = yyDollar[1].list[:len(yyDollar[1].list)-1] @@ -4850,237 +4888,244 @@ yydefault: } case 453: yyDollar = yyS[yypt-0 : yypt+1] - //line parser/parser.y:1242 + //line parser/parser.y:1324 { yyVAL.node = nil } case 454: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1243 + //line parser/parser.y:1325 { yyVAL.node = yyDollar[1].node } case 455: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1248 + //line parser/parser.y:1330 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 456: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1249 + //line parser/parser.y:1331 { yyVAL.list = []node.Node{yyDollar[1].node} } case 457: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1253 + //line parser/parser.y:1335 { - yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node, false).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) + yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node, false).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[3].node)) } case 458: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1254 + //line parser/parser.y:1336 { - yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node, false).SetPosition(NewNodePosition(yyDollar[1].node)) + yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node, false).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodePosition(yyDollar[1].node)) } case 459: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1255 + //line parser/parser.y:1337 { - yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[4].node, true).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[4].node)) + yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[4].node, true).SetComments(*yyDollar[1].node.Comments()).SetPosition(NewNodesPosition(yyDollar[1].node, yyDollar[4].node)) } case 460: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1256 + //line parser/parser.y:1338 { - yyVAL.node = expr.NewArrayItem(nil, yyDollar[2].node, true).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewArrayItem(nil, yyDollar[2].node, true).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 461: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:1258 + //line parser/parser.y:1340 { // TODO: Cannot use list() as standalone expression - list := expr.NewList(yyDollar[5].list).SetPosition(NewTokensPosition(yyDollar[3].token, yyDollar[6].token)) + list := expr.NewList(yyDollar[5].list).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokensPosition(yyDollar[3].token, yyDollar[6].token)) yyVAL.node = expr.NewArrayItem(yyDollar[1].node, list, false). + SetComments(*yyDollar[1].node.Comments()). SetPosition(NewNodeTokenPosition(yyDollar[1].node, yyDollar[6].token)) } case 462: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1265 + //line parser/parser.y:1348 { // TODO: Cannot use list() as standalone expression - list := expr.NewList(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + list := expr.NewList(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) yyVAL.node = expr.NewArrayItem(nil, list, false). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 463: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1274 + //line parser/parser.y:1358 { yyVAL.list = append(yyDollar[1].list, yyDollar[2].node) } case 464: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1275 + //line parser/parser.y:1359 { - yyVAL.list = append(yyDollar[1].list, scalar.NewEncapsedStringPart(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token))) + yyVAL.list = append(yyDollar[1].list, scalar.NewEncapsedStringPart(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token))) } case 465: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1276 + //line parser/parser.y:1360 { yyVAL.list = []node.Node{yyDollar[1].node} } case 466: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1277 + //line parser/parser.y:1361 { - yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)), yyDollar[2].node} + yyVAL.list = []node.Node{scalar.NewEncapsedStringPart(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)), yyDollar[2].node} } case 467: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1281 + //line parser/parser.y:1366 { - yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token))).SetPosition(NewTokenPosition(yyDollar[1].token)) + name := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewVariable(name).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 468: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1283 + //line parser/parser.y:1371 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = expr.NewArrayDimFetch(variable, yyDollar[3].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewArrayDimFetch(variable, yyDollar[3].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 469: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1289 + //line parser/parser.y:1377 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = expr.NewPropertyFetch(variable, node.NewIdentifier(yyDollar[3].token.Value).SetPosition(NewTokenPosition(yyDollar[3].token))). + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewPropertyFetch(variable, node.NewIdentifier(yyDollar[3].token.Value).SetComments(yyDollar[3].token.Comments()).SetPosition(NewTokenPosition(yyDollar[3].token))). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 470: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1295 + //line parser/parser.y:1385 { - yyVAL.node = expr.NewVariable(yyDollar[2].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + yyVAL.node = expr.NewVariable(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 471: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1296 + //line parser/parser.y:1389 { - yyVAL.node = expr.NewVariable(node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token))).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) + name := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) + yyVAL.node = expr.NewVariable(name).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[3].token)) } case 472: yyDollar = yyS[yypt-6 : yypt+1] - //line parser/parser.y:1298 + //line parser/parser.y:1394 { - identifier := node.NewIdentifier(yyDollar[2].token.Value).SetPosition(NewTokenPosition(yyDollar[2].token)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[2].token)) - yyVAL.node = expr.NewArrayDimFetch(variable, yyDollar[4].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[6].token)) + identifier := node.NewIdentifier(yyDollar[2].token.Value).SetComments(yyDollar[2].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) + variable := expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[2].token)) + yyVAL.node = expr.NewArrayDimFetch(variable, yyDollar[4].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[6].token)) } case 473: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1303 + //line parser/parser.y:1399 { yyVAL.node = yyDollar[2].node } case 474: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1306 + //line parser/parser.y:1403 { - yyVAL.node = scalar.NewString(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = scalar.NewString(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 475: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1308 + //line parser/parser.y:1407 { // 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.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = scalar.NewLnumber(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } else { - yyVAL.node = scalar.NewString(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = scalar.NewString(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } } case 476: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1317 + //line parser/parser.y:1416 { // 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.Value).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token))). + lnumber := scalar.NewLnumber(yyDollar[2].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) + yyVAL.node = expr.NewUnaryMinus(lnumber). + SetComments(yyDollar[1].token.Comments()). SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) } else { yyDollar[2].token.Value = "-" + yyDollar[2].token.Value - yyVAL.node = scalar.NewString(yyDollar[2].token.Value).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) + yyVAL.node = scalar.NewString(yyDollar[2].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[2].token)) } } case 477: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1328 + //line parser/parser.y:1429 { - identifier := node.NewIdentifier(yyDollar[1].token.Value).SetPosition(NewTokenPosition(yyDollar[1].token)) - yyVAL.node = expr.NewVariable(identifier).SetPosition(NewTokenPosition(yyDollar[1].token)) + identifier := node.NewIdentifier(yyDollar[1].token.Value).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) + yyVAL.node = expr.NewVariable(identifier).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenPosition(yyDollar[1].token)) } case 478: yyDollar = yyS[yypt-5 : yypt+1] - //line parser/parser.y:1335 + //line parser/parser.y:1436 { - yyVAL.node = expr.NewIsset(yyDollar[3].list).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[5].token)) + yyVAL.node = expr.NewIsset(yyDollar[3].list).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[5].token)) } case 479: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1336 + //line parser/parser.y:1437 { - yyVAL.node = expr.NewEmpty(yyDollar[3].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = expr.NewEmpty(yyDollar[3].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 480: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1337 + //line parser/parser.y:1438 { - yyVAL.node = expr.NewInclude(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewInclude(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 481: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1338 + //line parser/parser.y:1439 { - yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 482: yyDollar = yyS[yypt-4 : yypt+1] - //line parser/parser.y:1339 + //line parser/parser.y:1440 { - yyVAL.node = expr.NewEval(yyDollar[3].node).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) + yyVAL.node = expr.NewEval(yyDollar[3].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokensPosition(yyDollar[1].token, yyDollar[4].token)) } case 483: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1340 + //line parser/parser.y:1441 { - yyVAL.node = expr.NewRequire(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewRequire(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 484: yyDollar = yyS[yypt-2 : yypt+1] - //line parser/parser.y:1341 + //line parser/parser.y:1442 { - yyVAL.node = expr.NewRequireOnce(yyDollar[2].node).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) + yyVAL.node = expr.NewRequireOnce(yyDollar[2].node).SetComments(yyDollar[1].token.Comments()).SetPosition(NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node)) } case 485: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1345 + //line parser/parser.y:1446 { yyVAL.list = []node.Node{yyDollar[1].node} } case 486: yyDollar = yyS[yypt-3 : yypt+1] - //line parser/parser.y:1346 + //line parser/parser.y:1447 { yyVAL.list = append(yyDollar[1].list, yyDollar[3].node) } case 487: yyDollar = yyS[yypt-1 : yypt+1] - //line parser/parser.y:1350 + //line parser/parser.y:1451 { yyVAL.node = yyDollar[1].node } diff --git a/parser/parser.y b/parser/parser.y index c2359af..ce5d02d 100644 --- a/parser/parser.y +++ b/parser/parser.y @@ -301,14 +301,14 @@ top_statement_list: ; namespace_name: - T_STRING { $$ = []node.Node{name.NewNamePart($1.Value).SetPosition(NewTokenPosition($1))} } - | namespace_name T_NS_SEPARATOR T_STRING { $$ = append($1, name.NewNamePart($3.Value).SetPosition(NewTokenPosition($3))) } + T_STRING { $$ = []node.Node{name.NewNamePart($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1))} } + | namespace_name T_NS_SEPARATOR T_STRING { $$ = append($1, name.NewNamePart($3.Value).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewTokenPosition($3))) } ; name: - namespace_name { $$ = name.NewName($1).SetPosition(NewNodeListPosition($1)) } - | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = name.NewRelative($3).SetPosition(NewTokenNodeListPosition($1, $3)) } - | T_NS_SEPARATOR namespace_name { $$ = name.NewFullyQualified($2).SetPosition(NewTokenNodeListPosition($1, $2)) } + namespace_name { $$ = name.NewName($1).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListPosition($1)) } + | T_NAMESPACE T_NS_SEPARATOR namespace_name { $$ = name.NewRelative($3).SetComments($1.Comments()).SetPosition(NewTokenNodeListPosition($1, $3)) } + | T_NS_SEPARATOR namespace_name { $$ = name.NewFullyQualified($2).SetComments($1.Comments()).SetPosition(NewTokenNodeListPosition($1, $2)) } ; top_statement: @@ -318,33 +318,46 @@ top_statement: | trait_declaration_statement { $$ = $1; } | interface_declaration_statement { $$ = $1; } | T_HALT_COMPILER '(' ')' ';' { $$ = stmt.NewHaltCompiler() } - | T_NAMESPACE namespace_name ';' { $$ = stmt.NewNamespace(name.NewName($2).SetPosition(NewNodeListPosition($2)), nil).SetPosition(NewTokensPosition($1, $3)) } + | T_NAMESPACE namespace_name ';' + { + name := name.NewName($2).SetComments(ListGetFirstNodeComments($2)).SetPosition(NewNodeListPosition($2)) + $$ = stmt.NewNamespace(name, nil). + SetComments($1.Comments()). + SetPosition(NewTokensPosition($1, $3)) + } | T_NAMESPACE namespace_name '{' top_statement_list '}' - { $$ = stmt.NewNamespace(name.NewName($2).SetPosition(NewNodeListPosition($2)), $4).SetPosition(NewTokensPosition($1, $5)) } - | T_NAMESPACE '{' top_statement_list '}' { $$ = stmt.NewNamespace(nil, $3).SetPosition(NewTokensPosition($1, $4)) } + { + name := name.NewName($2).SetComments(ListGetFirstNodeComments($2)).SetPosition(NewNodeListPosition($2)) + $$ = stmt.NewNamespace(name, $4). + SetComments($1.Comments()). + SetPosition(NewTokensPosition($1, $5)) + } + | T_NAMESPACE '{' top_statement_list '}' { $$ = stmt.NewNamespace(nil, $3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } | T_USE mixed_group_use_declaration ';' { $$ = $2 } | T_USE use_type group_use_declaration ';' { $$ = $3.(stmt.GroupUse).SetUseType($2) } - | T_USE use_declarations ';' { $$ = stmt.NewUseList(nil, $2).SetPosition(NewTokensPosition($1, $3)) } + | T_USE use_declarations ';' { $$ = stmt.NewUseList(nil, $2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } | T_USE use_type use_declarations ';' { $$ = stmt.NewUseList($2, $3) } - | T_CONST const_list ';' { $$ = stmt.NewConstList($2).SetPosition(NewTokensPosition($1, $3)) } + | T_CONST const_list ';' { $$ = stmt.NewConstList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } ; use_type: - T_FUNCTION { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_CONST { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + T_FUNCTION { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_CONST { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } ; group_use_declaration: namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}' { - name := name.NewName($1).SetPosition(NewNodeListPosition($1)) + name := name.NewName($1).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListPosition($1)) $$ = stmt.NewGroupUse(nil, name, $4). + SetComments(ListGetFirstNodeComments($1)). SetPosition(NewNodeListTokenPosition($1, $6)) } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' unprefixed_use_declarations possible_comma '}' { - name := name.NewName($2).SetPosition(NewNodeListPosition($2)) + name := name.NewName($2).SetComments(ListGetFirstNodeComments($2)).SetPosition(NewNodeListPosition($2)) $$ = stmt.NewGroupUse(nil, name, $5). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $7)) } ; @@ -352,14 +365,16 @@ group_use_declaration: mixed_group_use_declaration: namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' { - name := name.NewName($1).SetPosition(NewNodeListPosition($1)) + name := name.NewName($1).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListPosition($1)) $$ = stmt.NewGroupUse(nil, name, $4). + SetComments(ListGetFirstNodeComments($1)). SetPosition(NewNodeListTokenPosition($1, $6)) } | T_NS_SEPARATOR namespace_name T_NS_SEPARATOR '{' inline_use_declarations possible_comma '}' { - name := name.NewName($2).SetPosition(NewNodeListPosition($2)) + name := name.NewName($2).SetComments(ListGetFirstNodeComments($2)).SetPosition(NewNodeListPosition($2)) $$ = stmt.NewGroupUse(nil, name, $5). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $7)) } ; @@ -392,8 +407,17 @@ inline_use_declaration: ; unprefixed_use_declaration: - namespace_name { $$ = stmt.NewUse(nil, name.NewName($1).SetPosition(NewNodeListPosition($1)), nil).SetPosition(NewNodeListPosition($1)) } - | namespace_name T_AS T_STRING { $$ = stmt.NewUse(nil, name.NewName($1).SetPosition(NewNodeListPosition($1)), node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))).SetPosition(NewNodeListTokenPosition($1, $3)) } + namespace_name + { + name := name.NewName($1).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListPosition($1)) + $$ = stmt.NewUse(nil, name, nil).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListPosition($1)) + } + | namespace_name T_AS T_STRING + { + name := name.NewName($1).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListPosition($1)) + alias := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) + $$ = stmt.NewUse(nil, name, alias).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListTokenPosition($1, $3)) + } ; use_declaration: @@ -417,53 +441,61 @@ inner_statement: | class_declaration_statement { $$ = $1; } | trait_declaration_statement { $$ = $1; } | interface_declaration_statement { $$ = $1; } - | T_HALT_COMPILER '(' ')' ';' { $$ = stmt.NewHaltCompiler().SetPosition(NewTokensPosition($1, $4)) } + | T_HALT_COMPILER '(' ')' ';' { $$ = stmt.NewHaltCompiler().SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } statement: - '{' inner_statement_list '}' { $$ = stmt.NewStmtList($2).SetPosition(NewTokensPosition($1, $3)) } + '{' inner_statement_list '}' { $$ = stmt.NewStmtList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } | if_stmt { $$ = $1; } | alt_if_stmt { $$ = $1; } | T_WHILE '(' expr ')' while_statement - { $$ = stmt.NewWhile($1, $3, $5).SetPosition(NewTokenNodePosition($1, $5)) } - | T_DO statement T_WHILE '(' expr ')' ';' { $$ = stmt.NewDo($2, $5).SetPosition(NewTokensPosition($1, $7)) } + { $$ = stmt.NewWhile($1, $3, $5).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $5)) } + | T_DO statement T_WHILE '(' expr ')' ';' { $$ = stmt.NewDo($2, $5).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $7)) } | T_FOR '(' for_exprs ';' for_exprs ';' for_exprs ')' for_statement - { $$ = stmt.NewFor($3, $5, $7, $9).SetPosition(NewTokenNodePosition($1, $9)) } - | T_SWITCH '(' expr ')' switch_case_list { $$ = stmt.NewSwitch($1, $3, $5.nodes).SetPosition(NewTokensPosition($1, $5.endToken)) } - | T_BREAK optional_expr ';' { $$ = stmt.NewBreak($2).SetPosition(NewTokensPosition($1, $3)) } - | T_CONTINUE optional_expr ';' { $$ = stmt.NewContinue($2).SetPosition(NewTokensPosition($1, $3)) } - | T_RETURN optional_expr ';' { $$ = stmt.NewReturn($2).SetPosition(NewTokensPosition($1, $3)) } - | T_GLOBAL global_var_list ';' { $$ = stmt.NewGlobal($2).SetPosition(NewTokensPosition($1, $3)) } - | T_STATIC static_var_list ';' { $$ = stmt.NewStatic($2).SetPosition(NewTokensPosition($1, $3)) } - | T_ECHO echo_expr_list ';' { $$ = stmt.NewEcho($2).SetPosition(NewTokensPosition($1, $3)) } - | T_INLINE_HTML { $$ = stmt.NewInlineHtml($1.Value).SetPosition(NewTokenPosition($1)) } - | expr ';' { $$ = stmt.NewExpression($1).SetPosition(NewNodeTokenPosition($1, $2)) } + { $$ = stmt.NewFor($3, $5, $7, $9).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $9)) } + | T_SWITCH '(' expr ')' switch_case_list { $$ = stmt.NewSwitch($1, $3, $5.nodes).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $5.endToken)) } + | T_BREAK optional_expr ';' { $$ = stmt.NewBreak($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_CONTINUE optional_expr ';' { $$ = stmt.NewContinue($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_RETURN optional_expr ';' { $$ = stmt.NewReturn($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_GLOBAL global_var_list ';' { $$ = stmt.NewGlobal($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_STATIC static_var_list ';' { $$ = stmt.NewStatic($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_ECHO echo_expr_list ';' { $$ = stmt.NewEcho($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_INLINE_HTML { $$ = stmt.NewInlineHtml($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | expr ';' { $$ = stmt.NewExpression($1).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $2)) } | T_UNSET '(' unset_variables possible_comma ')' ';' - { $$ = stmt.NewUnset($3).SetPosition(NewTokensPosition($1, $6)) } + { $$ = stmt.NewUnset($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $6)) } | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement - { $$ = stmt.NewForeach($3, nil, $5.node, $7, $5.byRef).SetPosition(NewTokenNodePosition($1, $7)) } + { $$ = stmt.NewForeach($3, nil, $5.node, $7, $5.byRef).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $7)) } | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement - { $$ = stmt.NewForeach($3, $5, $7.node, $9, $7.byRef).SetPosition(NewTokenNodePosition($1, $9)) } - | T_DECLARE '(' const_list ')' declare_statement { $$ = stmt.NewDeclare($3, $5).SetPosition(NewTokenNodePosition($1, $5)) } - | ';' { $$ = stmt.NewNop().SetPosition(NewTokenPosition($1)) } + { $$ = stmt.NewForeach($3, $5, $7.node, $9, $7.byRef).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $9)) } + | T_DECLARE '(' const_list ')' declare_statement { $$ = stmt.NewDeclare($3, $5).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $5)) } + | ';' { $$ = stmt.NewNop().SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | T_TRY '{' inner_statement_list '}' catch_list finally_statement { if $6 == nil { - $$ = stmt.NewTry($3, $5, $6).SetPosition(NewTokenNodeListPosition($1, $5)) + $$ = stmt.NewTry($3, $5, $6).SetComments($1.Comments()).SetPosition(NewTokenNodeListPosition($1, $5)) } else { - $$ = stmt.NewTry($3, $5, $6).SetPosition(NewTokenNodePosition($1, $6)) + $$ = stmt.NewTry($3, $5, $6).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $6)) } } - | T_THROW expr ';' { $$ = stmt.NewThrow($2).SetPosition(NewTokensPosition($1, $3)) } - | T_GOTO T_STRING ';' { $$ = stmt.NewGoto(node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2))).SetPosition(NewTokensPosition($1, $3)) } - | T_STRING ':' { $$ = stmt.NewLabel(node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1))).SetPosition(NewTokensPosition($1, $2)) } + | T_THROW expr ';' { $$ = stmt.NewThrow($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_GOTO T_STRING ';' + { + label := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) + $$ = stmt.NewGoto(label).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) + } + | T_STRING ':' + { + label := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewLabel(label).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $2)) + } catch_list: /* empty */ { $$ = []node.Node{} } | catch_list T_CATCH '(' catch_name_list T_VARIABLE ')' '{' inner_statement_list '}' { - identifier := node.NewIdentifier($5.Value).SetPosition(NewTokenPosition($5)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($5)) - $$ = append($1, stmt.NewCatch($4, variable, $8).SetPosition(NewTokensPosition($2, $9))) + identifier := node.NewIdentifier($5.Value).SetComments($5.Comments()).SetPosition(NewTokenPosition($5)) + variable := expr.NewVariable(identifier).SetComments($5.Comments()).SetPosition(NewTokenPosition($5)) + $$ = append($1, stmt.NewCatch($4, variable, $8).SetComments($2.Comments()).SetPosition(NewTokensPosition($2, $9))) } ; catch_name_list: @@ -473,7 +505,7 @@ catch_name_list: finally_statement: /* empty */ { $$ = nil } - | T_FINALLY '{' inner_statement_list '}' { $$ = stmt.NewFinally($3).SetPosition(NewTokensPosition($1, $4)) } + | T_FINALLY '{' inner_statement_list '}' { $$ = stmt.NewFinally($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } ; unset_variables: @@ -488,8 +520,9 @@ unset_variable: function_declaration_statement: T_FUNCTION returns_ref T_STRING backup_doc_comment '(' parameter_list ')' return_type '{' inner_statement_list '}' { - name := node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3)) + name := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) $$ = stmt.NewFunction(name, $2.value, $6, $8, $10, $4). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $11)) } ; @@ -507,14 +540,16 @@ is_variadic: class_declaration_statement: class_modifiers T_CLASS T_STRING extends_from implements_list backup_doc_comment '{' class_statement_list '}' { - name := node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3)) + name := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) $$ = stmt.NewClass(name, $1, nil, $4, $5, $8, $6). + SetComments($2.Comments()). SetPosition(NewOptionalListTokensPosition($1, $2, $9)) } | T_CLASS T_STRING extends_from implements_list backup_doc_comment '{' class_statement_list '}' { - name := node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2)) + name := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) $$ = stmt.NewClass(name, nil, nil, $3, $4, $7, $5). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $8)) } ; @@ -525,15 +560,16 @@ class_modifiers: ; class_modifier: - T_ABSTRACT { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_FINAL { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + T_ABSTRACT { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_FINAL { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } ; trait_declaration_statement: T_TRAIT T_STRING backup_doc_comment '{' class_statement_list '}' { - name := node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2)) + name := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) $$ = stmt.NewTrait(name, $5, $3). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $6)) } ; @@ -541,8 +577,9 @@ trait_declaration_statement: interface_declaration_statement: T_INTERFACE T_STRING interface_extends_list backup_doc_comment '{' class_statement_list '}' { - name := node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2)) + name := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) $$ = stmt.NewInterface(name, $3, $6, $4). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $7)) } ; @@ -565,23 +602,23 @@ implements_list: foreach_variable: variable { $$ = foreachVariable{$1, false} } | '&' variable { $$ = foreachVariable{$2, true} } - | T_LIST '(' array_pair_list ')' { $$ = foreachVariable{expr.NewList($3).SetPosition(NewTokensPosition($1, $4)), false} } - | '[' array_pair_list ']' { $$ = foreachVariable{expr.NewShortList($2).SetPosition(NewTokensPosition($1, $3)), false} } + | T_LIST '(' array_pair_list ')' { $$ = foreachVariable{expr.NewList($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)), false} } + | '[' array_pair_list ']' { $$ = foreachVariable{expr.NewShortList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)), false} } ; for_statement: statement { $$ = $1; } - | ':' inner_statement_list T_ENDFOR ';' { $$ = stmt.NewStmtList($2).SetPosition(NewTokensPosition($1, $4)) } + | ':' inner_statement_list T_ENDFOR ';' { $$ = stmt.NewStmtList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } ; foreach_statement: statement { $$ = $1; } - | ':' inner_statement_list T_ENDFOREACH ';' { $$ = stmt.NewStmtList($2).SetPosition(NewTokensPosition($1, $4)) } + | ':' inner_statement_list T_ENDFOREACH ';' { $$ = stmt.NewStmtList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } ; declare_statement: statement { $$ = $1; } - | ':' inner_statement_list T_ENDDECLARE ';' { $$ = stmt.NewStmtList($2).SetPosition(NewTokensPosition($1, $4)) } + | ':' inner_statement_list T_ENDDECLARE ';' { $$ = stmt.NewStmtList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } ; switch_case_list: @@ -595,11 +632,11 @@ case_list: /* empty */ { $$ = []node.Node{} } | case_list T_CASE expr case_separator inner_statement_list { - $$ = append($1, stmt.NewCase($3, $5).SetPosition(NewTokenNodeListPosition($2, $5))) + $$ = append($1, stmt.NewCase($3, $5).SetComments($2.Comments()).SetPosition(NewTokenNodeListPosition($2, $5))) } | case_list T_DEFAULT case_separator inner_statement_list { - $$ = append($1, stmt.NewDefault($4).SetPosition(NewTokenNodeListPosition($2, $4))) + $$ = append($1, stmt.NewDefault($4).SetComments($2.Comments()).SetPosition(NewTokenNodeListPosition($2, $4))) } ; @@ -610,14 +647,14 @@ case_separator: while_statement: statement { $$ = $1; } - | ':' inner_statement_list T_ENDWHILE ';' { $$ = stmt.NewStmtList($2).SetPosition(NewTokensPosition($1, $4)) } + | ':' inner_statement_list T_ENDWHILE ';' { $$ = stmt.NewStmtList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } ; if_stmt_without_else: - T_IF '(' expr ')' statement { $$ = stmt.NewIf($3, $5).SetPosition(NewTokenNodePosition($1, $5)) } + T_IF '(' expr ')' statement { $$ = stmt.NewIf($3, $5).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $5)) } | if_stmt_without_else T_ELSEIF '(' expr ')' statement { - _elseIf := stmt.NewElseIf($4, $6).SetPosition(NewTokenNodePosition($2, $6)) + _elseIf := stmt.NewElseIf($4, $6).SetComments($2.Comments()).SetPosition(NewTokenNodePosition($2, $6)) $$ = $1.(stmt.If).AddElseIf(_elseIf).SetPosition(NewNodesPosition($1, $6)) } ; @@ -626,7 +663,7 @@ if_stmt: if_stmt_without_else %prec T_NOELSE { $$ = $1; } | if_stmt_without_else T_ELSE statement { - _else := stmt.NewElse($3).SetPosition(NewTokenNodePosition($2, $3)) + _else := stmt.NewElse($3).SetComments($2.Comments()).SetPosition(NewTokenNodePosition($2, $3)) $$ = $1.(stmt.If).SetElse(_else).SetPosition(NewNodesPosition($1, $3)) } ; @@ -634,13 +671,13 @@ if_stmt: alt_if_stmt_without_else: T_IF '(' expr ')' ':' inner_statement_list { - stmts := stmt.NewStmtList($6).SetPosition(NewNodeListPosition($6)) - $$ = stmt.NewAltIf($3, stmts).SetPosition(NewTokenNodeListPosition($1, $6)) + stmts := stmt.NewStmtList($6).SetComments($5.Comments()).SetPosition(NewNodeListPosition($6)) + $$ = stmt.NewAltIf($3, stmts).SetComments($1.Comments()).SetPosition(NewTokenNodeListPosition($1, $6)) } | alt_if_stmt_without_else T_ELSEIF '(' expr ')' ':' inner_statement_list { - stmts := stmt.NewStmtList($7).SetPosition(NewNodeListPosition($7)) - _elseIf := stmt.NewAltElseIf($4, stmts).SetPosition(NewTokenNodeListPosition($2, $7)) + stmts := stmt.NewStmtList($7).SetComments($6.Comments()).SetPosition(NewNodeListPosition($7)) + _elseIf := stmt.NewAltElseIf($4, stmts).SetComments($2.Comments()).SetPosition(NewTokenNodeListPosition($2, $7)) $$ = $1.(stmt.AltIf).AddElseIf(_elseIf) } ; @@ -652,8 +689,8 @@ alt_if_stmt: } | alt_if_stmt_without_else T_ELSE ':' inner_statement_list T_ENDIF ';' { - stmts := stmt.NewStmtList($4).SetPosition(NewNodeListPosition($4)) - _else := stmt.NewAltElse(stmts).SetPosition(NewTokenNodeListPosition($2, $4)) + stmts := stmt.NewStmtList($4).SetComments($3.Comments()).SetPosition(NewNodeListPosition($4)) + _else := stmt.NewAltElse(stmts).SetComments($2.Comments()).SetPosition(NewTokenNodeListPosition($2, $4)) $$ = $1.(stmt.AltIf).SetElse(_else).SetPosition(NewNodeTokenPosition($1, $6)) } ; @@ -671,30 +708,30 @@ non_empty_parameter_list: parameter: optional_type is_reference is_variadic T_VARIABLE { - identifier := node.NewIdentifier($4.Value).SetPosition(NewTokenPosition($4)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($4)) + identifier := node.NewIdentifier($4.Value).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) + variable := expr.NewVariable(identifier).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) if $1 != nil { - $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetPosition(NewNodeTokenPosition($1, $4)) + $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4)) } else if $2.value == true { - $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetPosition(NewTokensPosition(*$2.token, $4)) + $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetComments($2.token.Comments()).SetPosition(NewTokensPosition(*$2.token, $4)) } else if $3.value == true { - $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetPosition(NewTokensPosition(*$3.token, $4)) + $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetComments($3.token.Comments()).SetPosition(NewTokensPosition(*$3.token, $4)) } else { - $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetPosition(NewTokenPosition($4)) + $$ = node.NewParameter($1, variable, nil, $2.value, $3.value).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) } } | optional_type is_reference is_variadic T_VARIABLE '=' expr { - identifier := node.NewIdentifier($4.Value).SetPosition(NewTokenPosition($4)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($4)) + identifier := node.NewIdentifier($4.Value).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) + variable := expr.NewVariable(identifier).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) if $1 != nil { - $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetPosition(NewNodesPosition($1, $6)) + $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $6)) } else if $2.value == true { - $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetPosition(NewTokenNodePosition(*$2.token, $6)) + $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetComments($2.token.Comments()).SetPosition(NewTokenNodePosition(*$2.token, $6)) } else if $3.value == true { - $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetPosition(NewTokenNodePosition(*$3.token, $6)) + $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetComments($3.token.Comments()).SetPosition(NewTokenNodePosition(*$3.token, $6)) } else { - $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetPosition(NewTokenNodePosition($4, $6)) + $$ = node.NewParameter($1, variable, $6, $2.value, $3.value).SetComments($4.Comments()).SetPosition(NewTokenNodePosition($4, $6)) } } ; @@ -706,12 +743,12 @@ optional_type: type_expr: type { $$ = $1; } - | '?' type { $$ = node.NewNullable($2).SetPosition(NewTokenNodePosition($1, $2)) } + | '?' type { $$ = node.NewNullable($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } ; type: - T_ARRAY { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_CALLABLE { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + T_ARRAY { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_CALLABLE { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | name { $$ = $1; } ; @@ -731,8 +768,8 @@ non_empty_argument_list: ; argument: - expr { $$ = node.NewArgument($1, false).SetPosition(NewNodePosition($1)) } - | T_ELLIPSIS expr { $$ = node.NewArgument($2, true).SetPosition(NewTokenNodePosition($1, $2)) } + expr { $$ = node.NewArgument($1, false).SetComments(*$1.Comments()).SetPosition(NewNodePosition($1)) } + | T_ELLIPSIS expr { $$ = node.NewArgument($2, true).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } ; global_var_list: @@ -752,15 +789,15 @@ static_var_list: static_var: T_VARIABLE { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = stmt.NewStaticVar(variable, nil).SetPosition(NewTokenPosition($1)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewStaticVar(variable, nil).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | T_VARIABLE '=' expr { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = stmt.NewStaticVar(variable, $3).SetPosition(NewTokenNodePosition($1, $3)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewStaticVar(variable, $3).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $3)) } ; @@ -770,13 +807,14 @@ class_statement_list: ; class_statement: - variable_modifiers property_list ';' { $$ = stmt.NewPropertyList($1, $2).SetPosition(NewNodeListTokenPosition($1, $3)) } - | method_modifiers T_CONST class_const_list ';' { $$ = stmt.NewClassConstList($1, $3).SetPosition(NewOptionalListTokensPosition($1, $2, $4)) } - | T_USE name_list trait_adaptations { $$ = stmt.NewTraitUse($2, $3.nodes).SetPosition(NewTokensPosition($1, $3.endToken)) } + variable_modifiers property_list ';' { $$ = stmt.NewPropertyList($1, $2).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewNodeListTokenPosition($1, $3)) } + | method_modifiers T_CONST class_const_list ';' { $$ = stmt.NewClassConstList($1, $3).SetComments(ListGetFirstNodeComments($1)).SetPosition(NewOptionalListTokensPosition($1, $2, $4)) } + | T_USE name_list trait_adaptations { $$ = stmt.NewTraitUse($2, $3.nodes).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3.endToken)) } | method_modifiers T_FUNCTION returns_ref identifier backup_doc_comment '(' parameter_list ')' return_type method_body { - name := node.NewIdentifier($4.Value).SetPosition(NewTokenPosition($4)) + name := node.NewIdentifier($4.Value).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) $$ = stmt.NewClassMethod(name, $1, $3.value, $7, $9, $10.nodes, $5). + SetComments(ListGetFirstNodeComments($1)). SetPosition(NewOptionalListTokensPosition($1, $2, $10.endToken)) } ; @@ -805,27 +843,56 @@ trait_adaptation: trait_precedence: absolute_trait_method_reference T_INSTEADOF name_list { - $$ = stmt.NewTraitUsePrecedence($1, name.NewName($3).SetPosition(NewNodeListPosition($3))). + name := name.NewName($3).SetComments(ListGetFirstNodeComments($3)).SetPosition(NewNodeListPosition($3)) + $$ = stmt.NewTraitUsePrecedence($1, name). + SetComments(*$1.Comments()). SetPosition(NewNodeNodeListPosition($1, $3)) } ; trait_alias: - trait_method_reference T_AS T_STRING { $$ = stmt.NewTraitUseAlias($1, nil, node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))).SetPosition(NewNodeTokenPosition($1, $3)) } + trait_method_reference T_AS T_STRING + { + alias := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) + $$ = stmt.NewTraitUseAlias($1, nil, alias). + SetComments(*$1.Comments()). + SetPosition(NewNodeTokenPosition($1, $3)) + } | trait_method_reference T_AS reserved_non_modifiers - { $$ = stmt.NewTraitUseAlias($1, nil, node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))).SetPosition(NewNodeTokenPosition($1, $3)) } + { + alias := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) + $$ = stmt.NewTraitUseAlias($1, nil, alias). + SetComments(*$1.Comments()). + SetPosition(NewNodeTokenPosition($1, $3)) + } | trait_method_reference T_AS member_modifier identifier - { $$ = stmt.NewTraitUseAlias($1, $3, node.NewIdentifier($4.Value).SetPosition(NewTokenPosition($4))).SetPosition(NewNodeTokenPosition($1, $4)) } - | trait_method_reference T_AS member_modifier { $$ = stmt.NewTraitUseAlias($1, $3, nil).SetPosition(NewNodesPosition($1, $3)) } + { + alias := node.NewIdentifier($4.Value).SetComments($4.Comments()).SetPosition(NewTokenPosition($4)) + $$ = stmt.NewTraitUseAlias($1, $3, alias). + SetComments(*$1.Comments()). + SetPosition(NewNodeTokenPosition($1, $4)) + } + | trait_method_reference T_AS member_modifier + { + $$ = stmt.NewTraitUseAlias($1, $3, nil).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) + } ; trait_method_reference: - identifier { $$ = stmt.NewTraitMethodRef(nil, node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1))).SetPosition(NewTokenPosition($1)) } + identifier + { + name := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewTraitMethodRef(nil, name).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + } | absolute_trait_method_reference { $$ = $1; } ; absolute_trait_method_reference: - name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = stmt.NewTraitMethodRef($1, node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))).SetPosition(NewNodeTokenPosition($1, $3)) } + name T_PAAMAYIM_NEKUDOTAYIM identifier + { + target := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) + $$ = stmt.NewTraitMethodRef($1, target).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $3)) + } ; method_body: @@ -835,7 +902,7 @@ method_body: variable_modifiers: non_empty_member_modifiers { $$ = $1; } - | T_VAR { $$ = []node.Node{node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1))} } + | T_VAR { $$ = []node.Node{node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1))} } ; method_modifiers: @@ -849,12 +916,12 @@ non_empty_member_modifiers: ; member_modifier: - T_PUBLIC { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_PROTECTED { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_PRIVATE { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_STATIC { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_ABSTRACT { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } - | T_FINAL { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + T_PUBLIC { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_PROTECTED { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_PRIVATE { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_STATIC { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_ABSTRACT { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_FINAL { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } ; property_list: @@ -865,15 +932,15 @@ property_list: property: T_VARIABLE backup_doc_comment { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = stmt.NewProperty(variable, nil, $2).SetPosition(NewTokenPosition($1)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewProperty(variable, nil, $2).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | T_VARIABLE '=' expr backup_doc_comment { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = stmt.NewProperty(variable, $3, $4).SetPosition(NewTokenNodePosition($1, $3)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewProperty(variable, $3, $4).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $3)) } ; @@ -885,16 +952,16 @@ class_const_list: class_const_decl: identifier '=' expr backup_doc_comment { - name := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - $$ = stmt.NewConstant(name, $3, $4).SetPosition(NewTokenNodePosition($1, $3)) + name := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewConstant(name, $3, $4).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $3)) } ; const_decl: T_STRING '=' expr backup_doc_comment { - name := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - $$ = stmt.NewConstant(name, $3, $4).SetPosition(NewTokenNodePosition($1, $3)) + name := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = stmt.NewConstant(name, $3, $4).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $3)) } ; @@ -920,9 +987,9 @@ anonymous_class: T_CLASS ctor_arguments extends_from implements_list backup_doc_comment '{' class_statement_list '}' { if $2 != nil { - $$ = stmt.NewClass(nil, nil, $2.nodes, $3, $4, $7, $5).SetPosition(NewTokensPosition($1, $8)) + $$ = stmt.NewClass(nil, nil, $2.nodes, $3, $4, $7, $5).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $8)) } else { - $$ = stmt.NewClass(nil, nil, nil, $3, $4, $7, $5).SetPosition(NewTokensPosition($1, $8)) + $$ = stmt.NewClass(nil, nil, nil, $3, $4, $7, $5).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $8)) } } ; @@ -931,9 +998,9 @@ new_expr: T_NEW class_name_reference ctor_arguments { if $3 != nil { - $$ = expr.NewNew($2, $3.nodes).SetPosition(NewTokensPosition($1, $3.endToken)) + $$ = expr.NewNew($2, $3.nodes).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3.endToken)) } else { - $$ = expr.NewNew($2, nil).SetPosition(NewTokenNodePosition($1, $2)) + $$ = expr.NewNew($2, nil).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } } | T_NEW anonymous_class { $$ = expr.NewNew($2, nil) } @@ -942,94 +1009,96 @@ new_expr: expr_without_variable: T_LIST '(' array_pair_list ')' '=' expr { - list := expr.NewList($3).SetPosition(NewTokensPosition($1, $4)) - $$ = assign_op.NewAssign(list, $6).SetPosition(NewTokenNodePosition($1, $6)) + list := expr.NewList($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) + $$ = assign_op.NewAssign(list, $6).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $6)) } | '[' array_pair_list ']' '=' expr { - shortList := expr.NewShortList($2).SetPosition(NewTokensPosition($1, $3)) - $$ = assign_op.NewAssign(shortList, $5).SetPosition(NewTokenNodePosition($1, $5)) + shortList := expr.NewShortList($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) + $$ = assign_op.NewAssign(shortList, $5).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $5)) } - | variable '=' expr { $$ = assign_op.NewAssign($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable '=' '&' expr { $$ = assign_op.NewAssignRef($1, $4).SetPosition(NewNodesPosition($1, $4)) } - | T_CLONE expr { $$ = expr.NewClone($2).SetPosition(NewTokenNodePosition($1, $2)) } - | variable T_PLUS_EQUAL expr { $$ = assign_op.NewPlus($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_MINUS_EQUAL expr { $$ = assign_op.NewMinus($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_MUL_EQUAL expr { $$ = assign_op.NewMul($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_POW_EQUAL expr { $$ = assign_op.NewPow($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_DIV_EQUAL expr { $$ = assign_op.NewDiv($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_CONCAT_EQUAL expr { $$ = assign_op.NewConcat($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_MOD_EQUAL expr { $$ = assign_op.NewMod($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_AND_EQUAL expr { $$ = assign_op.NewBitwiseAnd($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_OR_EQUAL expr { $$ = assign_op.NewBitwiseOr($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_XOR_EQUAL expr { $$ = assign_op.NewBitwiseXor($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_SL_EQUAL expr { $$ = assign_op.NewShiftLeft($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_SR_EQUAL expr { $$ = assign_op.NewShiftRight($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | variable T_INC { $$ = expr.NewPostInc($1).SetPosition(NewNodeTokenPosition($1, $2)) } - | T_INC variable { $$ = expr.NewPreInc($2).SetPosition(NewTokenNodePosition($1, $2)) } - | variable T_DEC { $$ = expr.NewPostDec($1).SetPosition(NewNodeTokenPosition($1, $2)) } - | T_DEC variable { $$ = expr.NewPreDec($2).SetPosition(NewTokenNodePosition($1, $2)) } - | expr T_BOOLEAN_OR expr { $$ = binary_op.NewBooleanOr($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_BOOLEAN_AND expr { $$ = binary_op.NewBooleanAnd($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_LOGICAL_OR expr { $$ = binary_op.NewLogicalOr($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_LOGICAL_AND expr { $$ = binary_op.NewLogicalAnd($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_LOGICAL_XOR expr { $$ = binary_op.NewLogicalXor($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '|' expr { $$ = binary_op.NewBitwiseOr($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '&' expr { $$ = binary_op.NewBitwiseAnd($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '^' expr { $$ = binary_op.NewBitwiseXor($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '.' expr { $$ = binary_op.NewConcat($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '+' expr { $$ = binary_op.NewPlus($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '-' expr { $$ = binary_op.NewMinus($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '*' expr { $$ = binary_op.NewMul($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_POW expr { $$ = binary_op.NewPow($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '/' expr { $$ = binary_op.NewDiv($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '%' expr { $$ = binary_op.NewMod($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_SL expr { $$ = binary_op.NewShiftLeft($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_SR expr { $$ = binary_op.NewShiftRight($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | '+' expr %prec T_INC { $$ = expr.NewUnaryPlus($2).SetPosition(NewTokenNodePosition($1, $2)) } - | '-' expr %prec T_INC { $$ = expr.NewUnaryMinus($2).SetPosition(NewTokenNodePosition($1, $2)) } - | '!' expr { $$ = expr.NewBooleanNot($2).SetPosition(NewTokenNodePosition($1, $2)) } - | '~' expr { $$ = expr.NewBitwiseNot($2).SetPosition(NewTokenNodePosition($1, $2)) } - | expr T_IS_IDENTICAL expr { $$ = binary_op.NewIdentical($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_IS_NOT_IDENTICAL expr { $$ = binary_op.NewNotIdentical($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_IS_EQUAL expr { $$ = binary_op.NewEqual($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_IS_NOT_EQUAL expr { $$ = binary_op.NewNotEqual($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '<' expr { $$ = binary_op.NewSmaller($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_IS_SMALLER_OR_EQUAL expr { $$ = binary_op.NewSmallerOrEqual($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr '>' expr { $$ = binary_op.NewGreater($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_IS_GREATER_OR_EQUAL expr { $$ = binary_op.NewGreaterOrEqual($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_SPACESHIP expr { $$ = binary_op.NewSpaceship($1, $3).SetPosition(NewNodesPosition($1, $3)) } - | expr T_INSTANCEOF class_name_reference { $$ = expr.NewInstanceOf($1, $3).SetPosition(NewNodesPosition($1, $3)) } + | variable '=' expr { $$ = assign_op.NewAssign($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable '=' '&' expr { $$ = assign_op.NewAssignRef($1, $4).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $4)) } + | T_CLONE expr { $$ = expr.NewClone($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | variable T_PLUS_EQUAL expr { $$ = assign_op.NewPlus($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_MINUS_EQUAL expr { $$ = assign_op.NewMinus($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_MUL_EQUAL expr { $$ = assign_op.NewMul($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_POW_EQUAL expr { $$ = assign_op.NewPow($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_DIV_EQUAL expr { $$ = assign_op.NewDiv($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_CONCAT_EQUAL expr { $$ = assign_op.NewConcat($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_MOD_EQUAL expr { $$ = assign_op.NewMod($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_AND_EQUAL expr { $$ = assign_op.NewBitwiseAnd($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_OR_EQUAL expr { $$ = assign_op.NewBitwiseOr($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_XOR_EQUAL expr { $$ = assign_op.NewBitwiseXor($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_SL_EQUAL expr { $$ = assign_op.NewShiftLeft($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_SR_EQUAL expr { $$ = assign_op.NewShiftRight($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | variable T_INC { $$ = expr.NewPostInc($1).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $2)) } + | T_INC variable { $$ = expr.NewPreInc($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | variable T_DEC { $$ = expr.NewPostDec($1).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $2)) } + | T_DEC variable { $$ = expr.NewPreDec($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | expr T_BOOLEAN_OR expr { $$ = binary_op.NewBooleanOr($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_BOOLEAN_AND expr { $$ = binary_op.NewBooleanAnd($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_LOGICAL_OR expr { $$ = binary_op.NewLogicalOr($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_LOGICAL_AND expr { $$ = binary_op.NewLogicalAnd($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_LOGICAL_XOR expr { $$ = binary_op.NewLogicalXor($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '|' expr { $$ = binary_op.NewBitwiseOr($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '&' expr { $$ = binary_op.NewBitwiseAnd($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '^' expr { $$ = binary_op.NewBitwiseXor($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '.' expr { $$ = binary_op.NewConcat($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '+' expr { $$ = binary_op.NewPlus($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '-' expr { $$ = binary_op.NewMinus($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '*' expr { $$ = binary_op.NewMul($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_POW expr { $$ = binary_op.NewPow($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '/' expr { $$ = binary_op.NewDiv($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '%' expr { $$ = binary_op.NewMod($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_SL expr { $$ = binary_op.NewShiftLeft($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_SR expr { $$ = binary_op.NewShiftRight($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | '+' expr %prec T_INC { $$ = expr.NewUnaryPlus($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | '-' expr %prec T_INC { $$ = expr.NewUnaryMinus($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | '!' expr { $$ = expr.NewBooleanNot($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | '~' expr { $$ = expr.NewBitwiseNot($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | expr T_IS_IDENTICAL expr { $$ = binary_op.NewIdentical($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_IS_NOT_IDENTICAL expr { $$ = binary_op.NewNotIdentical($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_IS_EQUAL expr { $$ = binary_op.NewEqual($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_IS_NOT_EQUAL expr { $$ = binary_op.NewNotEqual($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '<' expr { $$ = binary_op.NewSmaller($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_IS_SMALLER_OR_EQUAL expr { $$ = binary_op.NewSmallerOrEqual($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr '>' expr { $$ = binary_op.NewGreater($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_IS_GREATER_OR_EQUAL expr { $$ = binary_op.NewGreaterOrEqual($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_SPACESHIP expr { $$ = binary_op.NewSpaceship($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr T_INSTANCEOF class_name_reference { $$ = expr.NewInstanceOf($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } | '(' expr ')' { $$ = $2; } | new_expr { $$ = $1; } - | expr '?' expr ':' expr { $$ = expr.NewTernary($1, $3, $5).SetPosition(NewNodesPosition($1, $5)) } - | expr '?' ':' expr { $$ = expr.NewTernary($1, nil, $4).SetPosition(NewNodesPosition($1, $4)) } - | expr T_COALESCE expr { $$ = binary_op.NewCoalesce($1, $3).SetPosition(NewNodesPosition($1, $3)) } + | expr '?' expr ':' expr { $$ = expr.NewTernary($1, $3, $5).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $5)) } + | expr '?' ':' expr { $$ = expr.NewTernary($1, nil, $4).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $4)) } + | expr T_COALESCE expr { $$ = binary_op.NewCoalesce($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } | internal_functions_in_yacc { $$ = $1} - | T_INT_CAST expr { $$ = cast.NewCastInt($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_DOUBLE_CAST expr { $$ = cast.NewCastDouble($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_STRING_CAST expr { $$ = cast.NewCastString($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_ARRAY_CAST expr { $$ = cast.NewCastArray($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_OBJECT_CAST expr { $$ = cast.NewCastObject($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_BOOL_CAST expr { $$ = cast.NewCastBool($2.SetPosition(NewTokenNodePosition($1, $2))) } - | T_UNSET_CAST expr { $$ = cast.NewCastUnset($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_EXIT exit_expr { $$ = expr.NewExit($2, strings.EqualFold($1.Value, "die")).SetPosition(NewTokenNodePosition($1, $2)) } - | '@' expr { $$ = expr.NewErrorSuppress($2).SetPosition(NewTokenNodePosition($1, $2)) } + | T_INT_CAST expr { $$ = cast.NewCastInt($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_DOUBLE_CAST expr { $$ = cast.NewCastDouble($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_STRING_CAST expr { $$ = cast.NewCastString($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_ARRAY_CAST expr { $$ = cast.NewCastArray($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_OBJECT_CAST expr { $$ = cast.NewCastObject($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_BOOL_CAST expr { $$ = cast.NewCastBool($2.SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2))) } + | T_UNSET_CAST expr { $$ = cast.NewCastUnset($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_EXIT exit_expr { $$ = expr.NewExit($2, strings.EqualFold($1.Value, "die")).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | '@' expr { $$ = expr.NewErrorSuppress($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } | scalar { $$ = $1; } - | '`' backticks_expr '`' { $$ = expr.NewShellExec($2).SetPosition(NewTokensPosition($1, $3)) } - | T_PRINT expr { $$ = expr.NewPrint($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_YIELD { $$ = expr.NewYield(nil, nil).SetPosition(NewTokenPosition($1)) } - | T_YIELD expr { $$ = expr.NewYield(nil, $2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_YIELD expr T_DOUBLE_ARROW expr { $$ = expr.NewYield($2, $4).SetPosition(NewTokenNodePosition($1, $4)) } - | T_YIELD_FROM expr { $$ = expr.NewYieldFrom($2).SetPosition(NewTokenNodePosition($1, $2)) } + | '`' backticks_expr '`' { $$ = expr.NewShellExec($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_PRINT expr { $$ = expr.NewPrint($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_YIELD { $$ = expr.NewYield(nil, nil).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_YIELD expr { $$ = expr.NewYield(nil, $2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_YIELD expr T_DOUBLE_ARROW expr { $$ = expr.NewYield($2, $4).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $4)) } + | T_YIELD_FROM expr { $$ = expr.NewYieldFrom($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } | T_FUNCTION returns_ref backup_doc_comment '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' { $$ = expr.NewClosure($5, $7, $8, $10, false, $2.value, $3). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $11)) } | T_STATIC T_FUNCTION returns_ref backup_doc_comment '(' parameter_list ')' lexical_vars return_type '{' inner_statement_list '}' { $$ = expr.NewClosure($6, $8, $9, $11, true, $3.value, $4). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $12)) } ; @@ -1056,33 +1125,39 @@ lexical_var_list: lexical_var: T_VARIABLE { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = expr.NewClusureUse(variable, false).SetPosition(NewTokenPosition($1)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = expr.NewClusureUse(variable, false).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | '&' T_VARIABLE { - identifier := node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($2)) - $$ = expr.NewClusureUse(variable, true).SetPosition(NewTokensPosition($1, $2)) + identifier := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($2)) + $$ = expr.NewClusureUse(variable, true).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $2)) } ; function_call: - name argument_list { $$ = expr.NewFunctionCall($1, $2.nodes).SetPosition(NewNodeTokenPosition($1, $2.endToken)) } + name argument_list + { + $$ = expr.NewFunctionCall($1, $2.nodes).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $2.endToken)) + } | class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list { - $$ = expr.NewStaticCall($1, $3, $4.nodes).SetPosition(NewNodeTokenPosition($1, $4.endToken)) + $$ = expr.NewStaticCall($1, $3, $4.nodes).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4.endToken)) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM member_name argument_list { - $$ = expr.NewStaticCall($1, $3, $4.nodes).SetPosition(NewNodeTokenPosition($1, $4.endToken)) + $$ = expr.NewStaticCall($1, $3, $4.nodes).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4.endToken)) } - | callable_expr argument_list { $$ = expr.NewFunctionCall($1, $2.nodes).SetPosition(NewNodeTokenPosition($1, $2.endToken)) } + | callable_expr argument_list + { + $$ = expr.NewFunctionCall($1, $2.nodes).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $2.endToken)) + } ; class_name: - T_STATIC { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + T_STATIC { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | name { $$ = $1; } ; @@ -1108,37 +1183,44 @@ ctor_arguments: ; dereferencable_scalar: - T_ARRAY '(' array_pair_list ')' { $$ = expr.NewArray($3).SetPosition(NewTokensPosition($1, $4)) } - | '[' array_pair_list ']' { $$ = expr.NewShortArray($2).SetPosition(NewTokensPosition($1, $3)) } - | T_CONSTANT_ENCAPSED_STRING { $$ = scalar.NewString($1.Value).SetPosition(NewTokenPosition($1)) } + T_ARRAY '(' array_pair_list ')' { $$ = expr.NewArray($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } + | '[' array_pair_list ']' { $$ = expr.NewShortArray($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_CONSTANT_ENCAPSED_STRING { $$ = scalar.NewString($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } ; scalar: - T_LNUMBER { $$ = scalar.NewLnumber($1.Value).SetPosition(NewTokenPosition($1)) } - | T_DNUMBER { $$ = scalar.NewDnumber($1.Value).SetPosition(NewTokenPosition($1)) } - | T_LINE { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_FILE { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_DIR { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_TRAIT_C { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_METHOD_C { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_FUNC_C { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_NS_C { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } - | T_CLASS_C { $$ = scalar.NewMagicConstant($1.Value).SetPosition(NewTokenPosition($1)) } + T_LNUMBER { $$ = scalar.NewLnumber($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_DNUMBER { $$ = scalar.NewDnumber($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_LINE { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_FILE { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_DIR { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_TRAIT_C { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_METHOD_C { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_FUNC_C { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_NS_C { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | T_CLASS_C { $$ = scalar.NewMagicConstant($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC - { $$ = scalar.NewString($2.Value).SetPosition(NewTokensPosition($1, $3)) /* TODO: mark as Heredoc*/ } + { $$ = scalar.NewString($2.Value).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) /* TODO: mark as Heredoc*/ } | T_START_HEREDOC T_END_HEREDOC - { $$ = scalar.NewEncapsed(nil).SetPosition(NewTokensPosition($1, $2)) } - | '"' encaps_list '"' { $$ = scalar.NewEncapsed($2).SetPosition(NewTokensPosition($1, $3)) } - | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = scalar.NewEncapsed($2).SetPosition(NewTokensPosition($1, $3)) } + { $$ = scalar.NewEncapsed(nil).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $2)) } + | '"' encaps_list '"' { $$ = scalar.NewEncapsed($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } + | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = scalar.NewEncapsed($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) } | dereferencable_scalar { $$ = $1; } | constant { $$ = $1; } ; constant: - name { $$ = expr.NewConstFetch($1).SetPosition(NewNodePosition($1)) } - | class_name T_PAAMAYIM_NEKUDOTAYIM identifier { $$ = expr.NewClassConstFetch($1, node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))).SetPosition(NewNodeTokenPosition($1, $3)) } + name { $$ = expr.NewConstFetch($1).SetComments(*$1.Comments()).SetPosition(NewNodePosition($1)) } + | class_name T_PAAMAYIM_NEKUDOTAYIM identifier + { + target := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) + $$ = expr.NewClassConstFetch($1, target).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $3)) + } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM identifier - { $$ = expr.NewClassConstFetch($1, node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))).SetPosition(NewNodeTokenPosition($1, $3)) } + { + target := node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3)) + $$ = expr.NewClassConstFetch($1, target).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $3)) + } ; expr: @@ -1169,60 +1251,60 @@ callable_expr: callable_variable: simple_variable { $$ = $1; } - | dereferencable '[' optional_expr ']' { $$ = expr.NewArrayDimFetch($1, $3).SetPosition(NewNodeTokenPosition($1, $4)) } - | constant '[' optional_expr ']' { $$ = expr.NewArrayDimFetch($1, $3).SetPosition(NewNodeTokenPosition($1, $4)) } - | dereferencable '{' expr '}' { $$ = expr.NewArrayDimFetch($1, $3).SetPosition(NewNodeTokenPosition($1, $4)) } + | dereferencable '[' optional_expr ']' { $$ = expr.NewArrayDimFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4)) } + | constant '[' optional_expr ']' { $$ = expr.NewArrayDimFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4)) } + | dereferencable '{' expr '}' { $$ = expr.NewArrayDimFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4)) } | dereferencable T_OBJECT_OPERATOR property_name argument_list - { $$ = expr.NewMethodCall($1, $3, $4.nodes).SetPosition(NewNodeTokenPosition($1, $4.endToken)) } + { $$ = expr.NewMethodCall($1, $3, $4.nodes).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4.endToken)) } | function_call { $$ = $1; } ; variable: callable_variable { $$ = $1; } | static_member { $$ = $1; } - | dereferencable T_OBJECT_OPERATOR property_name { $$ = expr.NewPropertyFetch($1, $3).SetPosition(NewNodesPosition($1, $3)) } + | dereferencable T_OBJECT_OPERATOR property_name { $$ = expr.NewPropertyFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } ; simple_variable: - T_VARIABLE { $$ = expr.NewVariable(node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1))).SetPosition(NewTokenPosition($1)) } - | '$' '{' expr '}' { $$ = expr.NewVariable($3).SetPosition(NewTokensPosition($1, $4)) } - | '$' simple_variable { $$ = expr.NewVariable($2).SetPosition(NewTokenNodePosition($1, $2)) } + T_VARIABLE { $$ = expr.NewVariable(node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1))).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } + | '$' '{' expr '}' { $$ = expr.NewVariable($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } + | '$' simple_variable { $$ = expr.NewVariable($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } ; static_member: class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = expr.NewStaticPropertyFetch($1, $3).SetPosition(NewNodesPosition($1, $3)) + $$ = expr.NewStaticPropertyFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } | variable_class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = expr.NewStaticPropertyFetch($1, $3).SetPosition(NewNodesPosition($1, $3)) + $$ = expr.NewStaticPropertyFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } ; new_variable: simple_variable { $$ = $1 } - | new_variable '[' optional_expr ']' { $$ = expr.NewArrayDimFetch($1, $3).SetPosition(NewNodeTokenPosition($1, $4)) } - | new_variable '{' expr '}' { $$ = expr.NewArrayDimFetch($1, $3).SetPosition(NewNodeTokenPosition($1, $4)) } - | new_variable T_OBJECT_OPERATOR property_name { $$ = expr.NewPropertyFetch($1, $3).SetPosition(NewNodesPosition($1, $3)) } + | new_variable '[' optional_expr ']' { $$ = expr.NewArrayDimFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4)) } + | new_variable '{' expr '}' { $$ = expr.NewArrayDimFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodeTokenPosition($1, $4)) } + | new_variable T_OBJECT_OPERATOR property_name { $$ = expr.NewPropertyFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } | class_name T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = expr.NewStaticPropertyFetch($1, $3).SetPosition(NewNodesPosition($1, $3)) + $$ = expr.NewStaticPropertyFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } | new_variable T_PAAMAYIM_NEKUDOTAYIM simple_variable { - $$ = expr.NewStaticPropertyFetch($1, $3).SetPosition(NewNodesPosition($1, $3)) + $$ = expr.NewStaticPropertyFetch($1, $3).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } ; member_name: - identifier { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + identifier { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | '{' expr '}' { $$ = $2; } | simple_variable { $$ = $1 } ; property_name: - T_STRING { $$ = node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) } + T_STRING { $$ = node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } | '{' expr '}' { $$ = $2; } | simple_variable { $$ = $1 } ; @@ -1250,95 +1332,114 @@ non_empty_array_pair_list: ; array_pair: - expr T_DOUBLE_ARROW expr { $$ = expr.NewArrayItem($1, $3, false).SetPosition(NewNodesPosition($1, $3)) } - | expr { $$ = expr.NewArrayItem(nil, $1, false).SetPosition(NewNodePosition($1)) } - | expr T_DOUBLE_ARROW '&' variable { $$ = expr.NewArrayItem($1, $4, true).SetPosition(NewNodesPosition($1, $4)) } - | '&' variable { $$ = expr.NewArrayItem(nil, $2, true).SetPosition(NewTokenNodePosition($1, $2)) } + expr T_DOUBLE_ARROW expr { $$ = expr.NewArrayItem($1, $3, false).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $3)) } + | expr { $$ = expr.NewArrayItem(nil, $1, false).SetComments(*$1.Comments()).SetPosition(NewNodePosition($1)) } + | expr T_DOUBLE_ARROW '&' variable { $$ = expr.NewArrayItem($1, $4, true).SetComments(*$1.Comments()).SetPosition(NewNodesPosition($1, $4)) } + | '&' variable { $$ = expr.NewArrayItem(nil, $2, true).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } | expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')' { // TODO: Cannot use list() as standalone expression - list := expr.NewList($5).SetPosition(NewTokensPosition($3, $6)) + list := expr.NewList($5).SetComments($3.Comments()).SetPosition(NewTokensPosition($3, $6)) $$ = expr.NewArrayItem($1, list, false). + SetComments(*$1.Comments()). SetPosition(NewNodeTokenPosition($1, $6)) } | T_LIST '(' array_pair_list ')' { // TODO: Cannot use list() as standalone expression - list := expr.NewList($3).SetPosition(NewTokensPosition($1, $4)) + list := expr.NewList($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) $$ = expr.NewArrayItem(nil, list, false). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $4)) } ; encaps_list: encaps_list encaps_var { $$ = append($1, $2) } - | encaps_list T_ENCAPSED_AND_WHITESPACE { $$ = append($1, scalar.NewEncapsedStringPart($2.Value).SetPosition(NewTokenPosition($2))) } + | encaps_list T_ENCAPSED_AND_WHITESPACE { $$ = append($1, scalar.NewEncapsedStringPart($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2))) } | encaps_var { $$ = []node.Node{$1} } - | T_ENCAPSED_AND_WHITESPACE encaps_var { $$ = []node.Node{scalar.NewEncapsedStringPart($1.Value).SetPosition(NewTokenPosition($1)), $2} } + | T_ENCAPSED_AND_WHITESPACE encaps_var { $$ = []node.Node{scalar.NewEncapsedStringPart($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)), $2} } ; encaps_var: - T_VARIABLE { $$ = expr.NewVariable(node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1))).SetPosition(NewTokenPosition($1)) } + T_VARIABLE + { + name := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = expr.NewVariable(name).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + } | T_VARIABLE '[' encaps_var_offset ']' { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = expr.NewArrayDimFetch(variable, $3).SetPosition(NewTokensPosition($1, $4)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = expr.NewArrayDimFetch(variable, $3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } | T_VARIABLE T_OBJECT_OPERATOR T_STRING { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) - $$ = expr.NewPropertyFetch(variable, node.NewIdentifier($3.Value).SetPosition(NewTokenPosition($3))). + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = expr.NewPropertyFetch(variable, node.NewIdentifier($3.Value).SetComments($3.Comments()).SetPosition(NewTokenPosition($3))). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $3)) } - | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = expr.NewVariable($2).SetPosition(NewTokensPosition($1, $3)) } - | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = expr.NewVariable(node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2))).SetPosition(NewTokensPosition($1, $3)) } + | T_DOLLAR_OPEN_CURLY_BRACES expr '}' + { + $$ = expr.NewVariable($2).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) + } + | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' + { + name := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) + $$ = expr.NewVariable(name).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $3)) + } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '[' expr ']' '}' { - identifier := node.NewIdentifier($2.Value).SetPosition(NewTokenPosition($2)) - variable := expr.NewVariable(identifier).SetPosition(NewTokenPosition($2)) - $$ = expr.NewArrayDimFetch(variable, $4).SetPosition(NewTokensPosition($1, $6)) + identifier := node.NewIdentifier($2.Value).SetComments($2.Comments()).SetPosition(NewTokenPosition($2)) + variable := expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($2)) + $$ = expr.NewArrayDimFetch(variable, $4).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $6)) } | T_CURLY_OPEN variable '}' { $$ = $2; } ; encaps_var_offset: - T_STRING { $$ = scalar.NewString($1.Value).SetPosition(NewTokenPosition($1)) } + T_STRING + { + $$ = scalar.NewString($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + } | T_NUM_STRING { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi($1.Value); err == nil { - $$ = scalar.NewLnumber($1.Value).SetPosition(NewTokenPosition($1)) + $$ = scalar.NewLnumber($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } else { - $$ = scalar.NewString($1.Value).SetPosition(NewTokenPosition($1)) + $$ = scalar.NewString($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } } | '-' T_NUM_STRING { // TODO: add option to handle 64 bit integer if _, err := strconv.Atoi($2.Value); err == nil { - $$ = expr.NewUnaryMinus(scalar.NewLnumber($2.Value).SetPosition(NewTokensPosition($1, $2))). + lnumber := scalar.NewLnumber($2.Value).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $2)) + $$ = expr.NewUnaryMinus(lnumber). + SetComments($1.Comments()). SetPosition(NewTokensPosition($1, $2)) } else { $2.Value = "-"+$2.Value - $$ = scalar.NewString($2.Value).SetPosition(NewTokensPosition($1, $2)) + $$ = scalar.NewString($2.Value).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $2)) } } | T_VARIABLE { - identifier := node.NewIdentifier($1.Value).SetPosition(NewTokenPosition($1)) - $$ = expr.NewVariable(identifier).SetPosition(NewTokenPosition($1)) + identifier := node.NewIdentifier($1.Value).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) + $$ = expr.NewVariable(identifier).SetComments($1.Comments()).SetPosition(NewTokenPosition($1)) } ; internal_functions_in_yacc: - T_ISSET '(' isset_variables possible_comma ')' { $$ = expr.NewIsset($3).SetPosition(NewTokensPosition($1, $5)) } - | T_EMPTY '(' expr ')' { $$ = expr.NewEmpty($3).SetPosition(NewTokensPosition($1, $4)) } - | T_INCLUDE expr { $$ = expr.NewInclude($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_INCLUDE_ONCE expr { $$ = expr.NewIncludeOnce($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_EVAL '(' expr ')' { $$ = expr.NewEval($3).SetPosition(NewTokensPosition($1, $4)) } - | T_REQUIRE expr { $$ = expr.NewRequire($2).SetPosition(NewTokenNodePosition($1, $2)) } - | T_REQUIRE_ONCE expr { $$ = expr.NewRequireOnce($2).SetPosition(NewTokenNodePosition($1, $2)) } + T_ISSET '(' isset_variables possible_comma ')' { $$ = expr.NewIsset($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $5)) } + | T_EMPTY '(' expr ')' { $$ = expr.NewEmpty($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } + | T_INCLUDE expr { $$ = expr.NewInclude($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_INCLUDE_ONCE expr { $$ = expr.NewIncludeOnce($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_EVAL '(' expr ')' { $$ = expr.NewEval($3).SetComments($1.Comments()).SetPosition(NewTokensPosition($1, $4)) } + | T_REQUIRE expr { $$ = expr.NewRequire($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } + | T_REQUIRE_ONCE expr { $$ = expr.NewRequireOnce($2).SetComments($1.Comments()).SetPosition(NewTokenNodePosition($1, $2)) } ; isset_variables: diff --git a/parser/positions.go b/parser/positions.go index 8d3fd39..9b57196 100644 --- a/parser/positions.go +++ b/parser/positions.go @@ -1,6 +1,7 @@ package parser import ( + "github.com/z7zmey/php-parser/comment" "github.com/z7zmey/php-parser/node" "github.com/z7zmey/php-parser/token" ) @@ -180,3 +181,13 @@ func NewOptionalListTokensPosition(list []node.Node, t token.Token, endToken tok } } } + +func ListGetFirstNodeComments(list []node.Node) []comment.Comment { + if len(list) == 0 { + return nil + } + + node := list[0] + + return *node.Comments() +} diff --git a/parser/scanner.go b/parser/scanner.go index 350b3c0..3065c06 100644 --- a/parser/scanner.go +++ b/parser/scanner.go @@ -31,7 +31,8 @@ const ( var heredocLabel []byte -func (l *lexer) Lex(lval *yySymType) int { // Lex(lval *yySymType) +func (l *lexer) Lex(lval *yySymType) int { + l.comments = []comment.Comment{} c := l.Enter() yystate0: @@ -7430,7 +7431,7 @@ yystate593: yyrule1: // [ \t\n\r]+ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() goto yystate0 } yyrule2: // . @@ -7459,37 +7460,37 @@ yyrule2: // . yyrule3: // \<\?php([ \t]|{NEW_LINE}) { l.begin(PHP) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_OPEN_TAG; + lval.token = l.newToken() // return T_OPEN_TAG; goto yystate0 } yyrule4: // \<\? { l.begin(PHP) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_OPEN_TAG; + lval.token = l.newToken() // return T_OPEN_TAG; goto yystate0 } yyrule5: // \<\?= { l.begin(PHP) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ECHO goto yystate0 } yyrule6: // [ \t\n\r]+ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_WHITESPACE + lval.token = l.newToken() // return T_WHITESPACE goto yystate0 } yyrule7: // \?\>{NEW_LINE}? { l.begin(INITIAL) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(';') goto yystate0 } yyrule8: // {DNUM}|{EXPONENT_DNUM} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DNUMBER goto yystate0 } @@ -7511,10 +7512,10 @@ yyrule9: // {BNUM} } } if len(tb)-i < 64 { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LNUMBER } else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DNUMBER } goto yystate0 @@ -7523,10 +7524,10 @@ yyrule10: // {LNUM} { if len(l.TokenBytes(nil)) < 20 { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LNUMBER } else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DNUMBER } goto yystate0 @@ -7550,695 +7551,695 @@ yyrule11: // {HNUM} } length := len(tb) - i if length < 16 || (length == 16 && tb[i] <= '7') { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LNUMBER } else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DNUMBER } goto yystate0 } yyrule12: // abstract { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ABSTRACT goto yystate0 } yyrule13: // array { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ARRAY goto yystate0 } yyrule14: // as { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_AS goto yystate0 } yyrule15: // break { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_BREAK goto yystate0 } yyrule16: // callable { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CALLABLE goto yystate0 } yyrule17: // case { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CASE goto yystate0 } yyrule18: // catch { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CATCH goto yystate0 } yyrule19: // class { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CLASS goto yystate0 } yyrule20: // clone { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CLONE goto yystate0 } yyrule21: // const { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CONST goto yystate0 } yyrule22: // continue { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CONTINUE goto yystate0 } yyrule23: // declare { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DECLARE goto yystate0 } yyrule24: // default { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DEFAULT goto yystate0 } yyrule25: // do { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DO goto yystate0 } yyrule26: // echo { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ECHO goto yystate0 } yyrule27: // else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ELSE goto yystate0 } yyrule28: // elseif { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ELSEIF goto yystate0 } yyrule29: // empty { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_EMPTY goto yystate0 } yyrule30: // enddeclare { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENDDECLARE goto yystate0 } yyrule31: // endfor { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENDFOR goto yystate0 } yyrule32: // endforeach { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENDFOREACH goto yystate0 } yyrule33: // endif { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENDIF goto yystate0 } yyrule34: // endswitch { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENDSWITCH goto yystate0 } yyrule35: // endwhile { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENDWHILE goto yystate0 } yyrule36: // eval { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_EVAL goto yystate0 } yyrule37: // exit|die { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_EXIT goto yystate0 } yyrule38: // extends { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_EXTENDS goto yystate0 } yyrule39: // final { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FINAL goto yystate0 } yyrule40: // finally { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FINALLY goto yystate0 } yyrule41: // for { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FOR goto yystate0 } yyrule42: // foreach { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FOREACH goto yystate0 } yyrule43: // function|cfunction { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FUNCTION goto yystate0 } yyrule44: // global { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_GLOBAL goto yystate0 } yyrule45: // goto { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_GOTO goto yystate0 } yyrule46: // if { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IF goto yystate0 } yyrule47: // isset { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ISSET goto yystate0 } yyrule48: // implements { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IMPLEMENTS goto yystate0 } yyrule49: // instanceof { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INSTANCEOF goto yystate0 } yyrule50: // insteadof { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INSTEADOF goto yystate0 } yyrule51: // interface { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INTERFACE goto yystate0 } yyrule52: // list { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LIST goto yystate0 } yyrule53: // namespace { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_NAMESPACE goto yystate0 } yyrule54: // private { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_PRIVATE goto yystate0 } yyrule55: // public { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_PUBLIC goto yystate0 } yyrule56: // print { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_PRINT goto yystate0 } yyrule57: // protected { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_PROTECTED goto yystate0 } yyrule58: // return { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_RETURN goto yystate0 } yyrule59: // static { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_STATIC goto yystate0 } yyrule60: // switch { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_SWITCH goto yystate0 } yyrule61: // throw { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_THROW goto yystate0 } yyrule62: // trait { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_TRAIT goto yystate0 } yyrule63: // try { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_TRY goto yystate0 } yyrule64: // unset { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_UNSET goto yystate0 } yyrule65: // use { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_USE goto yystate0 } yyrule66: // var { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_VAR goto yystate0 } yyrule67: // while { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_WHILE goto yystate0 } yyrule68: // yield[ \t\n\r]+from[^a-zA-Z0-9_\x80-\xff] { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_YIELD_FROM goto yystate0 } yyrule69: // yield { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_YIELD goto yystate0 } yyrule70: // include { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INCLUDE goto yystate0 } yyrule71: // include_once { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INCLUDE_ONCE goto yystate0 } yyrule72: // require { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_REQUIRE goto yystate0 } yyrule73: // require_once { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_REQUIRE_ONCE goto yystate0 } yyrule74: // __CLASS__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CLASS_C goto yystate0 } yyrule75: // __DIR__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DIR goto yystate0 } yyrule76: // __FILE__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FILE goto yystate0 } yyrule77: // __FUNCTION__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_FUNC_C goto yystate0 } yyrule78: // __LINE__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LINE goto yystate0 } yyrule79: // __NAMESPACE__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_NS_C goto yystate0 } yyrule80: // __METHOD__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_METHOD_C goto yystate0 } yyrule81: // __TRAIT__ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_TRAIT_C goto yystate0 } yyrule82: // __halt_compiler { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_HALT_COMPILER goto yystate0 } yyrule83: // \([ \t]*array[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ARRAY_CAST goto yystate0 } yyrule84: // \([ \t]*(bool|boolean)[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_BOOL_CAST goto yystate0 } yyrule85: // \([ \t]*(real|double|float)[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DOUBLE_CAST goto yystate0 } yyrule86: // \([ \t]*(int|integer)[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INT_CAST goto yystate0 } yyrule87: // \([ \t]*object[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_OBJECT_CAST goto yystate0 } yyrule88: // \([ \t]*string[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_STRING_CAST goto yystate0 } yyrule89: // \([ \t]*unset[ \t]*\) { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_UNSET_CAST goto yystate0 } yyrule90: // new { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_NEW goto yystate0 } yyrule91: // and { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LOGICAL_AND goto yystate0 } yyrule92: // or { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LOGICAL_OR goto yystate0 } yyrule93: // xor { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_LOGICAL_XOR goto yystate0 } yyrule94: // \\ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_NS_SEPARATOR goto yystate0 } yyrule95: // \.\.\. { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ELLIPSIS goto yystate0 } yyrule96: // :: { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_PAAMAYIM_NEKUDOTAYIM // T_DOUBLE_COLON goto yystate0 } yyrule97: // && { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_BOOLEAN_AND goto yystate0 } yyrule98: // \|\| { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_BOOLEAN_OR goto yystate0 } yyrule99: // &= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_AND_EQUAL goto yystate0 } yyrule100: // \|= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_OR_EQUAL goto yystate0 } yyrule101: // \.= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CONCAT_EQUAL goto yystate0 } yyrule102: // \*= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_MUL_EQUAL goto yystate0 } yyrule103: // \*\*= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_POW_EQUAL goto yystate0 } yyrule104: // [/]= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DIV_EQUAL goto yystate0 } yyrule105: // \+= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_PLUS_EQUAL goto yystate0 } yyrule106: // -= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_MINUS_EQUAL goto yystate0 } yyrule107: // \^= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_XOR_EQUAL goto yystate0 } yyrule108: // %= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_MOD_EQUAL goto yystate0 } yyrule109: // -- { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DEC goto yystate0 } yyrule110: // \+\+ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_INC goto yystate0 } yyrule111: // => { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DOUBLE_ARROW goto yystate0 } yyrule112: // \<=\> { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_SPACESHIP goto yystate0 } yyrule113: // \!=|\<\> { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IS_NOT_EQUAL goto yystate0 } yyrule114: // \!== { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IS_NOT_IDENTICAL goto yystate0 } yyrule115: // == { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IS_EQUAL goto yystate0 } yyrule116: // === { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IS_IDENTICAL goto yystate0 } yyrule117: // \<\<= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_SL_EQUAL goto yystate0 } yyrule118: // \>\>= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_SR_EQUAL goto yystate0 } yyrule119: // \>= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IS_GREATER_OR_EQUAL goto yystate0 } yyrule120: // \<= { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_IS_SMALLER_OR_EQUAL goto yystate0 } yyrule121: // \*\* { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_POW goto yystate0 } yyrule122: // \<\< { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_SL goto yystate0 } yyrule123: // \>\> { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_SR goto yystate0 } yyrule124: // \?\? { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_COALESCE goto yystate0 } yyrule125: // (#|[/][/]).*{NEW_LINE} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) // return T_COMMENT; // TODO: handle ?> + lval.token = l.newToken() // return T_COMMENT; // TODO: handle ?> goto yystate0 } yyrule126: // ([/][*])|([/][*][*]) @@ -8274,60 +8275,60 @@ yyrule126: // ([/][*])|([/][*][*]) } yyrule127: // {OPERATORS} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule128: // \{ { l.pushState(PHP) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule129: // \} { l.popState() - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) l.phpDocComment = "" goto yystate0 } yyrule130: // \${VAR_NAME} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_VARIABLE goto yystate0 } yyrule131: // {VAR_NAME} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_STRING goto yystate0 } yyrule132: // -> { l.begin(PROPERTY) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_OBJECT_OPERATOR goto yystate0 } yyrule133: // [ \t\n\r]+ { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_WHITESPACE goto yystate0 } yyrule134: // -> { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_OBJECT_OPERATOR goto yystate0 } yyrule135: // {VAR_NAME} { l.begin(PHP) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_STRING goto yystate0 } @@ -8339,21 +8340,21 @@ yyrule136: // . } yyrule137: // [\']([^\\\']*([\\].)*)*[\'] { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CONSTANT_ENCAPSED_STRING goto yystate0 } yyrule138: // ` { l.begin(BACKQUOTE) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule139: // ` { l.begin(PHP) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8470,7 +8471,7 @@ yyrule143: // [b]?[\"] switch c { case '"': c = l.Next() - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_CONSTANT_ENCAPSED_STRING break F @@ -8499,7 +8500,7 @@ yyrule143: // [b]?[\"] yyrule144: // \" { l.popState() - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8513,7 +8514,7 @@ yyrule145: // \{\$ yyrule146: // \$\{ { l.pushState(STRING_VAR_NAME) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_DOLLAR_OPEN_CURLY_BRACES goto yystate0 } @@ -8533,7 +8534,7 @@ yyrule148: // .|[ \t\n\r] } switch c { case '"': - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENCAPSED_AND_WHITESPACE break F1 @@ -8575,7 +8576,7 @@ yyrule149: // .|[ \t\n\r] } switch c { case '`': - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENCAPSED_AND_WHITESPACE break F2 @@ -8662,7 +8663,7 @@ yyrule150: // .|[ \t\n\r] } yyrule151: // \${VAR_NAME} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_VARIABLE goto yystate0 } @@ -8675,14 +8676,14 @@ yyrule152: // ->{VAR_NAME} yyrule153: // {VAR_NAME} { l.popState() - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_STRING goto yystate0 } yyrule154: // \[ { l.pushState(STRING_VAR_INDEX) - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8694,19 +8695,19 @@ yyrule155: // .|[ \t\n\r] } yyrule156: // {LNUM}|{HNUM}|{BNUM} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_NUM_STRING goto yystate0 } yyrule157: // \${VAR_NAME} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_VARIABLE goto yystate0 } yyrule158: // {VAR_NAME} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_STRING goto yystate0 } @@ -8714,7 +8715,7 @@ yyrule159: // \] { l.popState() l.popState() - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } @@ -8722,19 +8723,19 @@ yyrule160: // [ \n\r\t\\'#] { l.popState() l.popState() - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return T_ENCAPSED_AND_WHITESPACE goto yystate0 } yyrule161: // {OPERATORS} { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } yyrule162: // . { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))) + lval.token = l.newToken() return rune2Class(rune(l.TokenBytes(nil)[0])) goto yystate0 } diff --git a/parser/scanner.l b/parser/scanner.l index d793ff2..768504a 100644 --- a/parser/scanner.l +++ b/parser/scanner.l @@ -30,8 +30,9 @@ const ( var heredocLabel []byte -func (l *lexer) Lex(lval *yySymType) int { // Lex(lval *yySymType) - c := l.Enter() +func (l *lexer) Lex(lval *yySymType) int { + l.comments = []comment.Comment{} + c := l.Enter() %} @@ -56,7 +57,7 @@ NEW_LINE (\r|\n|\r\n) %% c = l.Rule0() -[ \t\n\r]+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); +[ \t\n\r]+ lval.token = l.newToken(); . tb := []byte{} @@ -83,14 +84,14 @@ NEW_LINE (\r|\n|\r\n) lval.token = token.NewToken(l.handleNewLine(tb)); return T_INLINE_HTML -\<\?php([ \t]|{NEW_LINE}) l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_OPEN_TAG; -\<\? l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_OPEN_TAG; -\<\?= l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ECHO; +\<\?php([ \t]|{NEW_LINE}) l.begin(PHP);lval.token = l.newToken();// return T_OPEN_TAG; +\<\? l.begin(PHP);lval.token = l.newToken();// return T_OPEN_TAG; +\<\?= l.begin(PHP);lval.token = l.newToken(); return T_ECHO; -[ \t\n\r]+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_WHITESPACE -\?\>{NEW_LINE}? l.begin(INITIAL);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(';'); +[ \t\n\r]+ lval.token = l.newToken();// return T_WHITESPACE +\?\>{NEW_LINE}? l.begin(INITIAL);lval.token = l.newToken(); return rune2Class(';'); -{DNUM}|{EXPONENT_DNUM} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER +{DNUM}|{EXPONENT_DNUM} lval.token = l.newToken(); return T_DNUMBER {BNUM} tb := l.TokenBytes(nil) i:=2 @@ -104,15 +105,15 @@ NEW_LINE (\r|\n|\r\n) } } if len(tb) - i < 64 { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER + lval.token = l.newToken(); return T_LNUMBER } else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER + lval.token = l.newToken(); return T_DNUMBER } {LNUM} if len(l.TokenBytes(nil)) < 20 { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER + lval.token = l.newToken(); return T_LNUMBER } else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER + lval.token = l.newToken(); return T_DNUMBER } {HNUM} tb := l.TokenBytes(nil) @@ -128,125 +129,125 @@ NEW_LINE (\r|\n|\r\n) } length := len(tb) - i if length < 16 || (length == 16 && tb[i] <= '7') { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LNUMBER + lval.token = l.newToken(); return T_LNUMBER } else { - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DNUMBER + lval.token = l.newToken(); return T_DNUMBER } -abstract lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ABSTRACT -array lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ARRAY -as lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_AS -break lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BREAK -callable lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CALLABLE -case lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CASE -catch lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CATCH -class lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLASS -clone lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLONE -const lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONST; -continue lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONTINUE; -declare lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DECLARE; -default lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DEFAULT; -do lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DO; -echo lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ECHO; -else lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELSE; -elseif lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELSEIF; -empty lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EMPTY; -enddeclare lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDDECLARE -endfor lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDFOR -endforeach lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDFOREACH -endif lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDIF -endswitch lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDSWITCH -endwhile lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENDWHILE -eval lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EVAL -exit|die lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EXIT -extends lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_EXTENDS -final lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FINAL -finally lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FINALLY -for lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FOR -foreach lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FOREACH -function|cfunction lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FUNCTION -global lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_GLOBAL -goto lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_GOTO -if lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IF -isset lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ISSET -implements lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IMPLEMENTS -instanceof lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INSTANCEOF -insteadof lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INSTEADOF -interface lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INTERFACE -list lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LIST -namespace lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NAMESPACE -private lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PRIVATE -public lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PUBLIC -print lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PRINT -protected lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PROTECTED -return lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_RETURN -static lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STATIC -switch lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SWITCH -throw lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_THROW -trait lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRAIT -try lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRY -unset lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_UNSET -use lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_USE -var lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VAR -while lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_WHILE -yield[ \t\n\r]+from[^a-zA-Z0-9_\x80-\xff] lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_YIELD_FROM -yield lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_YIELD -include lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INCLUDE -include_once lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INCLUDE_ONCE -require lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_REQUIRE -require_once lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_REQUIRE_ONCE -__CLASS__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CLASS_C -__DIR__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DIR -__FILE__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FILE -__FUNCTION__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_FUNC_C -__LINE__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LINE -__NAMESPACE__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NS_C -__METHOD__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_METHOD_C -__TRAIT__ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_TRAIT_C -__halt_compiler lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_HALT_COMPILER -\([ \t]*array[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ARRAY_CAST -\([ \t]*(bool|boolean)[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOL_CAST -\([ \t]*(real|double|float)[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOUBLE_CAST -\([ \t]*(int|integer)[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INT_CAST -\([ \t]*object[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_CAST -\([ \t]*string[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING_CAST -\([ \t]*unset[ \t]*\) lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_UNSET_CAST -new lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NEW -and lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_AND -or lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_OR -xor lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_LOGICAL_XOR -\\ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NS_SEPARATOR -\.\.\. lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ELLIPSIS; -:: lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PAAMAYIM_NEKUDOTAYIM; // T_DOUBLE_COLON -&& lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOLEAN_AND -\|\| lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_BOOLEAN_OR -&= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_AND_EQUAL -\|= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OR_EQUAL -\.= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONCAT_EQUAL; -\*= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_MUL_EQUAL -\*\*= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_POW_EQUAL -[/]= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DIV_EQUAL; -\+= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_PLUS_EQUAL --= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_MINUS_EQUAL -\^= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_XOR_EQUAL -%= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_MOD_EQUAL --- lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DEC; -\+\+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_INC -=> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOUBLE_ARROW; -\<=\> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SPACESHIP -\!=|\<\> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_NOT_EQUAL -\!== lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_NOT_IDENTICAL -== lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_EQUAL -=== lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_IDENTICAL -\<\<= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SL_EQUAL -\>\>= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SR_EQUAL -\>= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_GREATER_OR_EQUAL -\<= lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_IS_SMALLER_OR_EQUAL -\*\* lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_POW -\<\< lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SL -\>\> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_SR -\?\? lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_COALESCE -(#|[/][/]).*{NEW_LINE} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil)));// return T_COMMENT; // TODO: handle ?> +abstract lval.token = l.newToken(); return T_ABSTRACT +array lval.token = l.newToken(); return T_ARRAY +as lval.token = l.newToken(); return T_AS +break lval.token = l.newToken(); return T_BREAK +callable lval.token = l.newToken(); return T_CALLABLE +case lval.token = l.newToken(); return T_CASE +catch lval.token = l.newToken(); return T_CATCH +class lval.token = l.newToken(); return T_CLASS +clone lval.token = l.newToken(); return T_CLONE +const lval.token = l.newToken(); return T_CONST; +continue lval.token = l.newToken(); return T_CONTINUE; +declare lval.token = l.newToken(); return T_DECLARE; +default lval.token = l.newToken(); return T_DEFAULT; +do lval.token = l.newToken(); return T_DO; +echo lval.token = l.newToken(); return T_ECHO; +else lval.token = l.newToken(); return T_ELSE; +elseif lval.token = l.newToken(); return T_ELSEIF; +empty lval.token = l.newToken(); return T_EMPTY; +enddeclare lval.token = l.newToken(); return T_ENDDECLARE +endfor lval.token = l.newToken(); return T_ENDFOR +endforeach lval.token = l.newToken(); return T_ENDFOREACH +endif lval.token = l.newToken(); return T_ENDIF +endswitch lval.token = l.newToken(); return T_ENDSWITCH +endwhile lval.token = l.newToken(); return T_ENDWHILE +eval lval.token = l.newToken(); return T_EVAL +exit|die lval.token = l.newToken(); return T_EXIT +extends lval.token = l.newToken(); return T_EXTENDS +final lval.token = l.newToken(); return T_FINAL +finally lval.token = l.newToken(); return T_FINALLY +for lval.token = l.newToken(); return T_FOR +foreach lval.token = l.newToken(); return T_FOREACH +function|cfunction lval.token = l.newToken(); return T_FUNCTION +global lval.token = l.newToken(); return T_GLOBAL +goto lval.token = l.newToken(); return T_GOTO +if lval.token = l.newToken(); return T_IF +isset lval.token = l.newToken(); return T_ISSET +implements lval.token = l.newToken(); return T_IMPLEMENTS +instanceof lval.token = l.newToken(); return T_INSTANCEOF +insteadof lval.token = l.newToken(); return T_INSTEADOF +interface lval.token = l.newToken(); return T_INTERFACE +list lval.token = l.newToken(); return T_LIST +namespace lval.token = l.newToken(); return T_NAMESPACE +private lval.token = l.newToken(); return T_PRIVATE +public lval.token = l.newToken(); return T_PUBLIC +print lval.token = l.newToken(); return T_PRINT +protected lval.token = l.newToken(); return T_PROTECTED +return lval.token = l.newToken(); return T_RETURN +static lval.token = l.newToken(); return T_STATIC +switch lval.token = l.newToken(); return T_SWITCH +throw lval.token = l.newToken(); return T_THROW +trait lval.token = l.newToken(); return T_TRAIT +try lval.token = l.newToken(); return T_TRY +unset lval.token = l.newToken(); return T_UNSET +use lval.token = l.newToken(); return T_USE +var lval.token = l.newToken(); return T_VAR +while lval.token = l.newToken(); return T_WHILE +yield[ \t\n\r]+from[^a-zA-Z0-9_\x80-\xff] lval.token = l.newToken(); return T_YIELD_FROM +yield lval.token = l.newToken(); return T_YIELD +include lval.token = l.newToken(); return T_INCLUDE +include_once lval.token = l.newToken(); return T_INCLUDE_ONCE +require lval.token = l.newToken(); return T_REQUIRE +require_once lval.token = l.newToken(); return T_REQUIRE_ONCE +__CLASS__ lval.token = l.newToken(); return T_CLASS_C +__DIR__ lval.token = l.newToken(); return T_DIR +__FILE__ lval.token = l.newToken(); return T_FILE +__FUNCTION__ lval.token = l.newToken(); return T_FUNC_C +__LINE__ lval.token = l.newToken(); return T_LINE +__NAMESPACE__ lval.token = l.newToken(); return T_NS_C +__METHOD__ lval.token = l.newToken(); return T_METHOD_C +__TRAIT__ lval.token = l.newToken(); return T_TRAIT_C +__halt_compiler lval.token = l.newToken(); return T_HALT_COMPILER +\([ \t]*array[ \t]*\) lval.token = l.newToken(); return T_ARRAY_CAST +\([ \t]*(bool|boolean)[ \t]*\) lval.token = l.newToken(); return T_BOOL_CAST +\([ \t]*(real|double|float)[ \t]*\) lval.token = l.newToken(); return T_DOUBLE_CAST +\([ \t]*(int|integer)[ \t]*\) lval.token = l.newToken(); return T_INT_CAST +\([ \t]*object[ \t]*\) lval.token = l.newToken(); return T_OBJECT_CAST +\([ \t]*string[ \t]*\) lval.token = l.newToken(); return T_STRING_CAST +\([ \t]*unset[ \t]*\) lval.token = l.newToken(); return T_UNSET_CAST +new lval.token = l.newToken(); return T_NEW +and lval.token = l.newToken(); return T_LOGICAL_AND +or lval.token = l.newToken(); return T_LOGICAL_OR +xor lval.token = l.newToken(); return T_LOGICAL_XOR +\\ lval.token = l.newToken(); return T_NS_SEPARATOR +\.\.\. lval.token = l.newToken(); return T_ELLIPSIS; +:: lval.token = l.newToken(); return T_PAAMAYIM_NEKUDOTAYIM; // T_DOUBLE_COLON +&& lval.token = l.newToken(); return T_BOOLEAN_AND +\|\| lval.token = l.newToken(); return T_BOOLEAN_OR +&= lval.token = l.newToken(); return T_AND_EQUAL +\|= lval.token = l.newToken(); return T_OR_EQUAL +\.= lval.token = l.newToken(); return T_CONCAT_EQUAL; +\*= lval.token = l.newToken(); return T_MUL_EQUAL +\*\*= lval.token = l.newToken(); return T_POW_EQUAL +[/]= lval.token = l.newToken(); return T_DIV_EQUAL; +\+= lval.token = l.newToken(); return T_PLUS_EQUAL +-= lval.token = l.newToken(); return T_MINUS_EQUAL +\^= lval.token = l.newToken(); return T_XOR_EQUAL +%= lval.token = l.newToken(); return T_MOD_EQUAL +-- lval.token = l.newToken(); return T_DEC; +\+\+ lval.token = l.newToken(); return T_INC +=> lval.token = l.newToken(); return T_DOUBLE_ARROW; +\<=\> lval.token = l.newToken(); return T_SPACESHIP +\!=|\<\> lval.token = l.newToken(); return T_IS_NOT_EQUAL +\!== lval.token = l.newToken(); return T_IS_NOT_IDENTICAL +== lval.token = l.newToken(); return T_IS_EQUAL +=== lval.token = l.newToken(); return T_IS_IDENTICAL +\<\<= lval.token = l.newToken(); return T_SL_EQUAL +\>\>= lval.token = l.newToken(); return T_SR_EQUAL +\>= lval.token = l.newToken(); return T_IS_GREATER_OR_EQUAL +\<= lval.token = l.newToken(); return T_IS_SMALLER_OR_EQUAL +\*\* lval.token = l.newToken(); return T_POW +\<\< lval.token = l.newToken(); return T_SL +\>\> lval.token = l.newToken(); return T_SR +\?\? lval.token = l.newToken(); return T_COALESCE +(#|[/][/]).*{NEW_LINE} lval.token = l.newToken();// return T_COMMENT; // TODO: handle ?> ([/][*])|([/][*][*]) tb := l.TokenBytes(nil) is_doc_comment := false @@ -279,23 +280,23 @@ NEW_LINE (\r|\n|\r\n) // return T_COMMENT } -{OPERATORS} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +{OPERATORS} lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) -\{ l.pushState(PHP); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -\} l.popState(); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])); l.phpDocComment = "" -\${VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE -{VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING +\{ l.pushState(PHP); lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) +\} l.popState(); lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])); l.phpDocComment = "" +\${VAR_NAME} lval.token = l.newToken(); return T_VARIABLE +{VAR_NAME} lval.token = l.newToken(); return T_STRING --> l.begin(PROPERTY);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_OPERATOR; -[ \t\n\r]+ lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_WHITESPACE; --> lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_OBJECT_OPERATOR; -{VAR_NAME} l.begin(PHP);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING; +-> l.begin(PROPERTY);lval.token = l.newToken(); return T_OBJECT_OPERATOR; +[ \t\n\r]+ lval.token = l.newToken(); return T_WHITESPACE; +-> lval.token = l.newToken(); return T_OBJECT_OPERATOR; +{VAR_NAME} l.begin(PHP);lval.token = l.newToken(); return T_STRING; . l.ungetN(1);l.begin(PHP) -[\']([^\\\']*([\\].)*)*[\'] lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING; +[\']([^\\\']*([\\].)*)*[\'] lval.token = l.newToken(); return T_CONSTANT_ENCAPSED_STRING; -` l.begin(BACKQUOTE); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -` l.begin(PHP); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +` l.begin(BACKQUOTE); lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) +` l.begin(PHP); lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) [b]?\<\<\<[ \t]*({VAR_NAME}|([']{VAR_NAME}['])|(["]{VAR_NAME}["])){NEW_LINE} tb := l.TokenBytes(nil) @@ -408,7 +409,7 @@ NEW_LINE (\r|\n|\r\n) switch c { case '"' : c = l.Next(); - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_CONSTANT_ENCAPSED_STRING + lval.token = l.newToken(); return T_CONSTANT_ENCAPSED_STRING break F; case '$': @@ -434,9 +435,9 @@ NEW_LINE (\r|\n|\r\n) c = l.Next() } -\" l.popState(); lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +\" l.popState(); lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) \{\$ lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))); l.pushState(PHP); return T_CURLY_OPEN -\$\{ l.pushState(STRING_VAR_NAME);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_DOLLAR_OPEN_CURLY_BRACES +\$\{ l.pushState(STRING_VAR_NAME);lval.token = l.newToken(); return T_DOLLAR_OPEN_CURLY_BRACES \$ l.ungetN(1);l.pushState(STRING_VAR) .|[ \t\n\r] F1:for { @@ -446,7 +447,7 @@ NEW_LINE (\r|\n|\r\n) switch c { case '"' : - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); + lval.token = l.newToken(); return T_ENCAPSED_AND_WHITESPACE break F1; @@ -487,7 +488,7 @@ NEW_LINE (\r|\n|\r\n) switch c { case '`' : - lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); + lval.token = l.newToken(); return T_ENCAPSED_AND_WHITESPACE break F2; @@ -572,19 +573,19 @@ NEW_LINE (\r|\n|\r\n) lval.token = token.NewToken(l.handleNewLine(tb)); return T_ENCAPSED_AND_WHITESPACE -\${VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE +\${VAR_NAME} lval.token = l.newToken(); return T_VARIABLE ->{VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.ungetN(len(l.TokenBytes(nil))-2))); return T_OBJECT_OPERATOR -{VAR_NAME} l.popState();lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING -\[ l.pushState(STRING_VAR_INDEX);lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +{VAR_NAME} l.popState();lval.token = l.newToken(); return T_STRING +\[ l.pushState(STRING_VAR_INDEX);lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) .|[ \t\n\r] l.ungetN(1);l.popState() -{LNUM}|{HNUM}|{BNUM} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_NUM_STRING -\${VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_VARIABLE -{VAR_NAME} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_STRING -\] l.popState(); l.popState();lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -[ \n\r\t\\'#] l.popState(); l.popState();lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return T_ENCAPSED_AND_WHITESPACE -{OPERATORS} lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) -. lval.token = token.NewToken(l.handleNewLine(l.TokenBytes(nil))); return rune2Class(rune(l.TokenBytes(nil)[0])) +{LNUM}|{HNUM}|{BNUM} lval.token = l.newToken(); return T_NUM_STRING +\${VAR_NAME} lval.token = l.newToken(); return T_VARIABLE +{VAR_NAME} lval.token = l.newToken(); return T_STRING +\] l.popState(); l.popState();lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) +[ \n\r\t\\'#] l.popState(); l.popState();lval.token = l.newToken(); return T_ENCAPSED_AND_WHITESPACE +{OPERATORS} lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) +. lval.token = l.newToken(); return rune2Class(rune(l.TokenBytes(nil)[0])) {VAR_NAME}[\[\}] l.popState();l.pushState(PHP);lval.token = token.NewToken(l.handleNewLine(l.ungetN(1))); return T_STRING_VARNAME . l.ungetN(1);l.popState();l.pushState(PHP) diff --git a/token/token.go b/token/token.go index 77d2c5b..3f6ef9a 100644 --- a/token/token.go +++ b/token/token.go @@ -1,9 +1,15 @@ package token +import ( + "github.com/z7zmey/php-parser/comment" +) + type TokenInterface interface { GetValue() string GetStartLine() int GetEndLine() int + Comments() []comment.Comment + SetComments(comments []comment.Comment) Token } type Token struct { @@ -12,10 +18,11 @@ type Token struct { EndLine int StartPos int EndPos int + comments []comment.Comment } func NewToken(value []byte, startLine int, endLine int, startPos int, endPos int) Token { - return Token{string(value), startLine, endLine, startPos, endPos} + return Token{string(value), startLine, endLine, startPos, endPos, nil} } func (t Token) String() string { @@ -31,3 +38,12 @@ func (t Token) GetStartLine() int { func (t Token) GetEndLine() int { return t.EndLine } + +func (t Token) Comments() []comment.Comment { + return t.comments +} + +func (t Token) SetComments(comments []comment.Comment) Token { + t.comments = comments + return t +}