@@ -134,6 +134,17 @@ Block = (function()
134134 get = function (self , name )
135135 return self ._state [name ]
136136 end ,
137+ listen = function (self , name , fn )
138+ self ._listeners [name ] = fn
139+ end ,
140+ send = function (self , name , ...)
141+ do
142+ local fn = self ._listeners [name ]
143+ if fn then
144+ return fn (self , ... )
145+ end
146+ end
147+ end ,
137148 declare = function (self , names )
138149 local undeclared = (function ()
139150 local _accum_0 = { }
@@ -173,11 +184,15 @@ Block = (function()
173184 whitelist_names = function (self , names )
174185 self ._name_whitelist = Set (names )
175186 end ,
176- put_name = function (self , name )
187+ put_name = function (self , name , ...)
188+ value = ...
189+ if select (" #" , ... ) == 0 then
190+ value = true
191+ end
177192 if util .moon .type (name ) == NameProxy then
178193 name = name :get_name (self )
179194 end
180- self ._names [name ] = true
195+ self ._names [name ] = value
181196 end ,
182197 has_name = function (self , name , skip_exports )
183198 if not skip_exports then
@@ -415,6 +430,14 @@ Block = (function()
415430 self :stm (stm )
416431 end
417432 return nil
433+ end ,
434+ splice = function (self , fn )
435+ local lines = {
436+ " lines" ,
437+ self ._lines
438+ }
439+ self ._lines = { }
440+ return self :stms (fn (lines ))
418441 end
419442 }
420443 _base_0 .__index = _base_0
@@ -429,6 +452,7 @@ Block = (function()
429452 self ._posmap = { }
430453 self ._names = { }
431454 self ._state = { }
455+ self ._listeners = { }
432456 do
433457 local _with_0 = transform
434458 self .transform = {
@@ -439,9 +463,12 @@ Block = (function()
439463 if self .parent then
440464 self .root = self .parent .root
441465 self .indent = self .parent .indent + 1
442- return setmetatable (self ._state , {
466+ setmetatable (self ._state , {
443467 __index = self .parent ._state
444468 })
469+ return setmetatable (self ._listeners , {
470+ __index = self .parent ._listeners
471+ })
445472 else
446473 self .indent = 0
447474 end
0 commit comments