@@ -2,7 +2,8 @@ module Unparser
22
33 # Emitter base class
44 class Emitter
5- include Adamantium ::Flat , AbstractType , Equalizer . new ( :node , :buffer ) , Constants
5+ include Adamantium ::Flat , AbstractType , Constants
6+ include Equalizer . new ( :node , :buffer , :parent )
67
78 # Registry for node emitters
89 REGISTRY = { }
@@ -62,8 +63,8 @@ def self.emit(*arguments)
6263 #
6364 # @api private
6465 #
65- def initialize ( node , buffer )
66- @node , @buffer = node , buffer
66+ def initialize ( node , buffer , parent )
67+ @node , @buffer , @parent = node , buffer , parent
6768 dispatch
6869 end
6970
@@ -78,15 +79,29 @@ def initialize(node, buffer)
7879 #
7980 # @api private
8081 #
81- def self . visit ( node , buffer )
82+ def self . visit ( node , buffer , parent = Root )
8283 type = node . type
8384 emitter = REGISTRY . fetch ( type ) do
8485 raise ArgumentError , "No emitter for node: #{ type . inspect } "
8586 end
86- emitter . emit ( node , buffer )
87+ emitter . emit ( node , buffer , parent )
8788 self
8889 end
8990
91+ # Test if node needs begin
92+ #
93+ # @return [true]
94+ # if if node needs begin
95+ #
96+ # @return [false]
97+ # otherwise
98+ #
99+ # @api private
100+ #
101+ def needs_begin?
102+ false
103+ end
104+
90105 # Return node
91106 #
92107 # @return [Parser::AST::Node] node
@@ -106,6 +121,15 @@ def self.visit(node, buffer)
106121 attr_reader :buffer
107122 protected :buffer
108123
124+ # Return parent emitter
125+ #
126+ # @return [Parent]
127+ #
128+ # @api private
129+ #
130+ attr_reader :parent
131+ protected :parent
132+
109133 # Emit contents of block within parentheses
110134 #
111135 # @return [undefined]
@@ -137,7 +161,7 @@ def emit_source_map
137161 # @api private
138162 #
139163 def visit ( node )
140- self . class . visit ( node , buffer )
164+ self . class . visit ( node , buffer , self )
141165 end
142166
143167 # Emit delimited body
0 commit comments