File tree Expand file tree Collapse file tree 1 file changed +38
-37
lines changed
Expand file tree Collapse file tree 1 file changed +38
-37
lines changed Original file line number Diff line number Diff line change 11class Enumerator
22 include Enumerable
33
4- class Yielder
5- def initialize ( enumerator , block , to )
6- @enumerator = enumerator
7- @block = block
8- @to = to
9- end
10-
11- def yield ( *values )
12- %x{
13- if ($opal.$yieldX(#@to , values) === $breaker) {
14- throw $breaker;
15- }
16- }
17-
18- self
19- end
20-
21- alias << yield
22-
23- def call
24- %x{
25- try {
26- #@block (self)
27- }
28- catch (e) {
29- if (e === $breaker) {
30- return $breaker.$v;
31- }
32- else {
33- throw e;
34- }
35- }
36- }
37- end
38- end
39-
404 def initialize ( obj = nil , method = :each , *args , &block )
415 if block
426 @block = block
@@ -51,7 +15,7 @@ def each(&block)
5115 return enum_for :each unless block_given?
5216
5317 if @block
54- Yielder . new ( self , @block , block ) . call
18+ Yielder . new ( self , @block ) . each ( & block )
5519 else
5620 @object . __send__ ( @method , *@args , &block )
5721 end
@@ -70,4 +34,41 @@ def rewind
7034
7135 self
7236 end
37+
38+ class Yielder
39+ def initialize ( enumerator , block )
40+ @enumerator = enumerator
41+ @block = block
42+ end
43+
44+ def yield ( *values )
45+ %x{
46+ if ($opal.$yieldX(#@to , values) === $breaker) {
47+ throw $breaker;
48+ }
49+ }
50+
51+ self
52+ end
53+
54+ alias << yield
55+
56+ def each ( &block )
57+ @to = block
58+
59+ %x{
60+ try {
61+ #@block (self)
62+ }
63+ catch (e) {
64+ if (e === $breaker) {
65+ return $breaker.$v;
66+ }
67+ else {
68+ throw e;
69+ }
70+ }
71+ }
72+ end
73+ end
7374end
You can’t perform that action at this time.
0 commit comments