From 9ea1f05f9032631dc176d24ff1c2f6d8da1bee33 Mon Sep 17 00:00:00 2001 From: z7zmey Date: Thu, 5 Apr 2018 13:47:36 +0300 Subject: [PATCH] add Heredoc node --- node/scalar/node_heredoc.go | 44 +++++ node/scalar/t_heredoc_test.go | 144 +++++++++++++++ node/scalar/t_string_test.go | 85 +-------- node/scalar/t_visitor_test.go | 5 + php5/php5.go | 322 +++++++++++++++++----------------- php5/php5.y | 12 +- php5/php5_test.go | 163 ++++++++++------- php7/php7.go | 176 ++++++++++--------- php7/php7.y | 12 +- php7/php7_test.go | 163 ++++++++++------- scanner/scanner.go | 4 +- scanner/scanner.l | 5 +- 12 files changed, 676 insertions(+), 459 deletions(-) create mode 100644 node/scalar/node_heredoc.go create mode 100644 node/scalar/t_heredoc_test.go diff --git a/node/scalar/node_heredoc.go b/node/scalar/node_heredoc.go new file mode 100644 index 0000000..1395134 --- /dev/null +++ b/node/scalar/node_heredoc.go @@ -0,0 +1,44 @@ +package scalar + +import ( + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/walker" +) + +// Heredoc node +type Heredoc struct { + Label string + Parts []node.Node +} + +// NewHeredoc node constructor +func NewHeredoc(Label string, Parts []node.Node) *Heredoc { + return &Heredoc{ + Label, + Parts, + } +} + +// Attributes returns node attributes as map +func (n *Heredoc) Attributes() map[string]interface{} { + return map[string]interface{}{ + "Label": n.Label, + } +} + +// Walk traverses nodes +// Walk is invoked recursively until v.EnterNode returns true +func (n *Heredoc) Walk(v walker.Visitor) { + if v.EnterNode(n) == false { + return + } + + if n.Parts != nil { + vv := v.GetChildrenVisitor("Parts") + for _, nn := range n.Parts { + if nn != nil { + nn.Walk(vv) + } + } + } +} diff --git a/node/scalar/t_heredoc_test.go b/node/scalar/t_heredoc_test.go new file mode 100644 index 0000000..7c8cb61 --- /dev/null +++ b/node/scalar/t_heredoc_test.go @@ -0,0 +1,144 @@ +package scalar_test + +import ( + "bytes" + "testing" + + "github.com/z7zmey/php-parser/node/expr" + + "github.com/z7zmey/php-parser/node" + "github.com/z7zmey/php-parser/node/scalar" + "github.com/z7zmey/php-parser/node/stmt" + "github.com/z7zmey/php-parser/php7" + "github.com/z7zmey/php-parser/php5" +) + +func TestHeredocSimpleLabel(t *testing.T) { + src := `.|[ \t\n\r]