Skip to content

Commit bbb3551

Browse files
committedNov 15, 2013
Support yield from inside a block (fixes #379)
1 parent f8d7d1d commit bbb3551

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed
 

Diff for: ‎lib/opal/nodes/yield.rb

+14-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ module Opal
44
module Nodes
55
class BaseYieldNode < Base
66
def compile_call(children, level)
7-
scope.uses_block!
7+
yielding_scope = find_yielding_scope
8+
9+
yielding_scope.uses_block!
10+
block_name = yielding_scope.block_name || '$yield'
811

912
if yields_single_arg?(children)
1013
push expr(children.first)
@@ -20,8 +23,16 @@ def compile_call(children, level)
2023
end
2124
end
2225

23-
def block_name
24-
scope.block_name || '$yield'
26+
def find_yielding_scope
27+
working = scope
28+
while working
29+
if working.block_name or working.def?
30+
break
31+
end
32+
working = working.parent
33+
end
34+
35+
working
2536
end
2637

2738
def yields_single_arg?(children)

0 commit comments

Comments
 (0)