Skip to content

Commit 82fd939

Browse files
committed
Cleanup Enumerator
1 parent eef232c commit 82fd939

File tree

1 file changed

+38
-37
lines changed

1 file changed

+38
-37
lines changed

opal/core/enumerator.rb

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,6 @@
11
class 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
7374
end

0 commit comments

Comments
 (0)