opal 1.3.2 → 1.4.0.alpha1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.eslintrc.js +1 -0
- data/.github/workflows/build.yml +0 -3
- data/.rubocop.yml +5 -1
- data/UNRELEASED.md +66 -2
- data/benchmark-ips/bm_truthy.rb +30 -0
- data/bin/opal-mspec +1 -3
- data/bin/opal-repl +1 -2
- data/bin/remove-filters +1 -4
- data/docs/compiled_ruby.md +10 -6
- data/exe/opal-repl +1 -3
- data/lib/opal/ast/builder.rb +1 -1
- data/lib/opal/cli.rb +2 -2
- data/lib/opal/cli_runners/nodejs.rb +9 -2
- data/lib/opal/cli_runners/source-map-support-browser.js +80 -216
- data/lib/opal/cli_runners/source-map-support-node.js +80 -216
- data/lib/opal/cli_runners/source-map-support.js +5 -1
- data/lib/opal/cli_runners/system_runner.rb +10 -4
- data/lib/opal/compiler.rb +3 -5
- data/lib/opal/fragment.rb +5 -1
- data/lib/opal/nodes/args/extract_block_arg.rb +1 -8
- data/lib/opal/nodes/args/extract_kwoptarg.rb +1 -3
- data/lib/opal/nodes/args/extract_optarg.rb +1 -3
- data/lib/opal/nodes/args/extract_post_arg.rb +2 -5
- data/lib/opal/nodes/args/extract_post_optarg.rb +2 -7
- data/lib/opal/nodes/args/initialize_iterarg.rb +1 -3
- data/lib/opal/nodes/args/prepare_post_args.rb +5 -1
- data/lib/opal/nodes/base.rb +3 -2
- data/lib/opal/nodes/call.rb +20 -9
- data/lib/opal/nodes/call_special.rb +50 -0
- data/lib/opal/nodes/class.rb +24 -15
- data/lib/opal/nodes/constants.rb +23 -5
- data/lib/opal/nodes/def.rb +20 -23
- data/lib/opal/nodes/defined.rb +5 -5
- data/lib/opal/nodes/definitions.rb +2 -2
- data/lib/opal/nodes/defs.rb +2 -5
- data/lib/opal/nodes/helpers.rb +48 -18
- data/lib/opal/nodes/if.rb +109 -8
- data/lib/opal/nodes/iter.rb +23 -16
- data/lib/opal/nodes/literal.rb +18 -4
- data/lib/opal/nodes/logic.rb +2 -1
- data/lib/opal/nodes/masgn.rb +4 -9
- data/lib/opal/nodes/module.rb +29 -19
- data/lib/opal/nodes/node_with_args.rb +1 -7
- data/lib/opal/nodes/scope.rb +54 -15
- data/lib/opal/nodes/singleton_class.rb +5 -3
- data/lib/opal/nodes/super.rb +3 -3
- data/lib/opal/nodes/top.rb +34 -31
- data/lib/opal/nodes/variables.rb +2 -2
- data/lib/opal/nodes/x_string.rb +3 -0
- data/lib/opal/nodes.rb +0 -1
- data/lib/opal/parser/patch.rb +75 -0
- data/lib/opal/parser/with_ruby_lexer.rb +1 -1
- data/lib/opal/regexp_anchors.rb +7 -7
- data/lib/opal/requires.rb +19 -0
- data/lib/opal/rewriters/pattern_matching.rb +1 -1
- data/lib/opal/rewriters/returnable_logic.rb +102 -4
- data/lib/opal/util.rb +2 -2
- data/lib/opal/version.rb +1 -1
- data/lib/opal.rb +1 -17
- data/opal/corelib/array/pack.rb +11 -11
- data/opal/corelib/array.rb +193 -152
- data/opal/corelib/basic_object.rb +14 -14
- data/opal/corelib/binding.rb +7 -7
- data/opal/corelib/boolean.rb +12 -15
- data/opal/corelib/class.rb +23 -1
- data/opal/corelib/comparable.rb +8 -8
- data/opal/corelib/complex/base.rb +2 -2
- data/opal/corelib/complex.rb +79 -88
- data/opal/corelib/constants.rb +9 -9
- data/opal/corelib/dir.rb +4 -3
- data/opal/corelib/enumerable.rb +140 -127
- data/opal/corelib/enumerator/arithmetic_sequence.rb +177 -0
- data/opal/corelib/enumerator/chain.rb +42 -0
- data/opal/corelib/enumerator/generator.rb +35 -0
- data/opal/corelib/enumerator/lazy.rb +243 -0
- data/opal/corelib/enumerator/yielder.rb +36 -0
- data/opal/corelib/enumerator.rb +45 -300
- data/opal/corelib/error/errno.rb +47 -0
- data/opal/corelib/error.rb +62 -60
- data/opal/corelib/file.rb +26 -12
- data/opal/corelib/hash.rb +98 -107
- data/opal/corelib/helpers.rb +62 -13
- data/opal/corelib/io.rb +47 -34
- data/opal/corelib/kernel/format.rb +29 -29
- data/opal/corelib/kernel.rb +86 -83
- data/opal/corelib/main.rb +14 -12
- data/opal/corelib/marshal/read_buffer.rb +15 -15
- data/opal/corelib/marshal/write_buffer.rb +45 -44
- data/opal/corelib/marshal.rb +3 -3
- data/opal/corelib/math.rb +50 -50
- data/opal/corelib/method.rb +12 -8
- data/opal/corelib/module.rb +96 -79
- data/opal/corelib/nil.rb +9 -11
- data/opal/corelib/number.rb +113 -118
- data/opal/corelib/numeric.rb +37 -33
- data/opal/corelib/object_space.rb +11 -10
- data/opal/corelib/pack_unpack/format_string_parser.rb +3 -3
- data/opal/corelib/pattern_matching/base.rb +7 -7
- data/opal/corelib/pattern_matching.rb +1 -1
- data/opal/corelib/proc.rb +15 -16
- data/opal/corelib/process/base.rb +2 -2
- data/opal/corelib/process/status.rb +21 -0
- data/opal/corelib/process.rb +5 -5
- data/opal/corelib/random/formatter.rb +11 -11
- data/opal/corelib/random/math_random.js.rb +1 -1
- data/opal/corelib/random/mersenne_twister.rb +3 -3
- data/opal/corelib/random/seedrandom.js.rb +3 -3
- data/opal/corelib/random.rb +17 -17
- data/opal/corelib/range.rb +51 -35
- data/opal/corelib/rational/base.rb +4 -4
- data/opal/corelib/rational.rb +61 -62
- data/opal/corelib/regexp.rb +47 -38
- data/opal/corelib/runtime.js +245 -139
- data/opal/corelib/string/encoding.rb +21 -21
- data/opal/corelib/string/unpack.rb +19 -14
- data/opal/corelib/string.rb +135 -128
- data/opal/corelib/struct.rb +59 -46
- data/opal/corelib/time.rb +47 -57
- data/opal/corelib/trace_point.rb +2 -2
- data/opal/corelib/unsupported.rb +31 -120
- data/opal/corelib/variables.rb +3 -3
- data/opal/opal/base.rb +9 -8
- data/opal/opal/full.rb +8 -8
- data/opal/opal/mini.rb +17 -17
- data/opal/opal.rb +17 -18
- data/opal.gemspec +1 -1
- data/spec/filters/bugs/array.rb +4 -24
- data/spec/filters/bugs/bigdecimal.rb +0 -23
- data/spec/filters/bugs/binding.rb +0 -1
- data/spec/filters/bugs/boolean.rb +3 -0
- data/spec/filters/bugs/class.rb +2 -0
- data/spec/filters/bugs/date.rb +0 -5
- data/spec/filters/bugs/encoding.rb +8 -50
- data/spec/filters/bugs/enumerable.rb +4 -1
- data/spec/filters/bugs/enumerator.rb +3 -36
- data/spec/filters/bugs/exception.rb +0 -2
- data/spec/filters/bugs/file.rb +0 -2
- data/spec/filters/bugs/float.rb +0 -3
- data/spec/filters/bugs/hash.rb +5 -3
- data/spec/filters/bugs/integer.rb +2 -3
- data/spec/filters/bugs/kernel.rb +2 -31
- data/spec/filters/bugs/language.rb +29 -49
- data/spec/filters/bugs/main.rb +0 -2
- data/spec/filters/bugs/marshal.rb +2 -3
- data/spec/filters/bugs/matrix.rb +0 -36
- data/spec/filters/bugs/module.rb +7 -61
- data/spec/filters/bugs/numeric.rb +0 -7
- data/spec/filters/bugs/objectspace.rb +1 -1
- data/spec/filters/bugs/pack_unpack.rb +0 -4
- data/spec/filters/bugs/proc.rb +0 -9
- data/spec/filters/bugs/random.rb +0 -5
- data/spec/filters/bugs/range.rb +1 -6
- data/spec/filters/bugs/regexp.rb +0 -3
- data/spec/filters/bugs/set.rb +8 -1
- data/spec/filters/bugs/string.rb +9 -34
- data/spec/filters/bugs/stringscanner.rb +8 -7
- data/spec/filters/bugs/struct.rb +2 -3
- data/spec/filters/bugs/symbol.rb +0 -1
- data/spec/filters/bugs/time.rb +0 -8
- data/spec/filters/bugs/unboundmethod.rb +0 -8
- data/spec/filters/bugs/warnings.rb +1 -7
- data/spec/filters/unsupported/freeze.rb +24 -0
- data/spec/filters/unsupported/integer.rb +1 -0
- data/spec/filters/unsupported/kernel.rb +12 -0
- data/spec/filters/unsupported/privacy.rb +3 -0
- data/spec/filters/unsupported/string.rb +2 -0
- data/spec/lib/builder_spec.rb +2 -2
- data/spec/lib/cli_spec.rb +1 -1
- data/spec/lib/compiler_spec.rb +37 -37
- data/spec/lib/simple_server_spec.rb +2 -2
- data/spec/lib/source_map/file_spec.rb +1 -1
- data/spec/opal/compiler/irb_spec.rb +2 -2
- data/spec/opal/core/kernel/puts_spec.rb +90 -0
- data/spec/opal/core/language/super_spec.rb +24 -0
- data/spec/ruby_specs +4 -2
- data/spec/support/rewriters_helper.rb +1 -1
- data/stdlib/bigdecimal.rb +7 -11
- data/stdlib/buffer/view.rb +2 -2
- data/stdlib/buffer.rb +2 -2
- data/stdlib/date.rb +5 -6
- data/stdlib/erb.rb +1 -0
- data/stdlib/js.rb +2 -1
- data/stdlib/native.rb +7 -8
- data/stdlib/nodejs/argf.rb +4 -4
- data/stdlib/nodejs/base.rb +29 -0
- data/stdlib/nodejs/dir.rb +1 -1
- data/stdlib/nodejs/env.rb +6 -9
- data/stdlib/nodejs/file.rb +23 -17
- data/stdlib/nodejs/fileutils.rb +3 -3
- data/stdlib/nodejs/io.rb +2 -20
- data/stdlib/nodejs/irb.rb +0 -0
- data/stdlib/nodejs/kernel.rb +2 -37
- data/stdlib/nodejs.rb +1 -3
- data/stdlib/opal/miniracer.rb +2 -0
- data/stdlib/opal/platform.rb +6 -13
- data/stdlib/opal/replutils.rb +16 -5
- data/stdlib/opal-parser.rb +2 -2
- data/stdlib/optparse/ac.rb +54 -0
- data/stdlib/optparse/date.rb +14 -0
- data/stdlib/optparse/kwargs.rb +22 -0
- data/stdlib/optparse/shellwords.rb +7 -0
- data/stdlib/optparse/time.rb +15 -0
- data/stdlib/optparse/uri.rb +7 -0
- data/stdlib/optparse/version.rb +69 -0
- data/stdlib/optparse.rb +2279 -0
- data/stdlib/pathname.rb +5 -6
- data/stdlib/pp.rb +18 -2
- data/stdlib/promise/v2.rb +18 -22
- data/stdlib/promise.rb +15 -21
- data/stdlib/set.rb +32 -32
- data/stdlib/shellwords.rb +240 -0
- data/stdlib/stringio.rb +3 -6
- data/stdlib/strscan.rb +5 -8
- data/stdlib/template.rb +2 -2
- data/stdlib/thread.rb +7 -9
- data/tasks/performance.rake +5 -2
- data/tasks/testing/mspec_special_calls.rb +0 -12
- data/tasks/testing.rake +55 -37
- data/test/nodejs/test_file.rb +11 -0
- metadata +55 -10
- data/lib/opal/nodes/case.rb +0 -114
data/opal/corelib/enumerable.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
# helpers:
|
1
|
+
# helpers: truthy, coerce_to, yield1, yieldX
|
2
2
|
|
3
|
-
module Enumerable
|
3
|
+
module ::Enumerable
|
4
4
|
%x{
|
5
5
|
function comparableForPattern(value) {
|
6
6
|
if (value.length === 0) {
|
@@ -30,7 +30,7 @@ module Enumerable
|
|
30
30
|
end
|
31
31
|
else
|
32
32
|
each do |*value|
|
33
|
-
unless Opal.destructure(value)
|
33
|
+
unless ::Opal.destructure(value)
|
34
34
|
return false
|
35
35
|
end
|
36
36
|
end
|
@@ -54,7 +54,7 @@ module Enumerable
|
|
54
54
|
end
|
55
55
|
else
|
56
56
|
each do |*value|
|
57
|
-
if Opal.destructure(value)
|
57
|
+
if ::Opal.destructure(value)
|
58
58
|
return true
|
59
59
|
end
|
60
60
|
end
|
@@ -77,7 +77,7 @@ module Enumerable
|
|
77
77
|
}
|
78
78
|
|
79
79
|
self.$each.$$p = function(value) {
|
80
|
-
var key =
|
80
|
+
var key = $yield1(block, value);
|
81
81
|
|
82
82
|
if (key === nil) {
|
83
83
|
releaseAccumulate();
|
@@ -103,7 +103,7 @@ module Enumerable
|
|
103
103
|
end
|
104
104
|
|
105
105
|
def chunk_while(&block)
|
106
|
-
raise ArgumentError, 'no block given' unless block_given?
|
106
|
+
::Kernel.raise ::ArgumentError, 'no block given' unless block_given?
|
107
107
|
|
108
108
|
slice_when { |before, after| !(yield before, after) }
|
109
109
|
end
|
@@ -115,7 +115,7 @@ module Enumerable
|
|
115
115
|
var result = [];
|
116
116
|
|
117
117
|
self.$each.$$p = function() {
|
118
|
-
var value =
|
118
|
+
var value = $yieldX(block, arguments);
|
119
119
|
|
120
120
|
result.push(value);
|
121
121
|
};
|
@@ -131,6 +131,10 @@ module Enumerable
|
|
131
131
|
map { |item| yield item }.flatten(1)
|
132
132
|
end
|
133
133
|
|
134
|
+
def compact
|
135
|
+
to_a.compact
|
136
|
+
end
|
137
|
+
|
134
138
|
def count(object = undefined, &block)
|
135
139
|
result = 0
|
136
140
|
|
@@ -141,15 +145,15 @@ module Enumerable
|
|
141
145
|
}
|
142
146
|
|
143
147
|
if `object != null`
|
144
|
-
block = proc do |*args|
|
145
|
-
Opal.destructure(args) == object
|
148
|
+
block = ::Kernel.proc do |*args|
|
149
|
+
::Opal.destructure(args) == object
|
146
150
|
end
|
147
151
|
elsif block.nil?
|
148
|
-
block = proc { true }
|
152
|
+
block = ::Kernel.proc { true }
|
149
153
|
end
|
150
154
|
|
151
155
|
each do |*args|
|
152
|
-
`result++` if
|
156
|
+
`result++` if `$yieldX(block, args)`
|
153
157
|
end
|
154
158
|
|
155
159
|
result
|
@@ -159,16 +163,16 @@ module Enumerable
|
|
159
163
|
unless block_given?
|
160
164
|
return enum_for(:cycle, n) do
|
161
165
|
if n.nil?
|
162
|
-
respond_to?(:size) ? Float::INFINITY : nil
|
166
|
+
respond_to?(:size) ? ::Float::INFINITY : nil
|
163
167
|
else
|
164
|
-
n = Opal.coerce_to!(n, Integer, :to_int)
|
168
|
+
n = ::Opal.coerce_to!(n, ::Integer, :to_int)
|
165
169
|
n > 0 ? enumerator_size * n : 0
|
166
170
|
end
|
167
171
|
end
|
168
172
|
end
|
169
173
|
|
170
174
|
unless n.nil?
|
171
|
-
n = Opal.coerce_to! n, Integer, :to_int
|
175
|
+
n = ::Opal.coerce_to! n, ::Integer, :to_int
|
172
176
|
|
173
177
|
return if `n <= 0`
|
174
178
|
end
|
@@ -177,8 +181,8 @@ module Enumerable
|
|
177
181
|
var all = [], i, length, value;
|
178
182
|
|
179
183
|
self.$each.$$p = function() {
|
180
|
-
var param = #{Opal.destructure(`arguments`)},
|
181
|
-
value =
|
184
|
+
var param = #{::Opal.destructure(`arguments`)},
|
185
|
+
value = $yield1(block, param);
|
182
186
|
|
183
187
|
all.push(param);
|
184
188
|
}
|
@@ -192,14 +196,14 @@ module Enumerable
|
|
192
196
|
if (n === nil) {
|
193
197
|
while (true) {
|
194
198
|
for (i = 0, length = all.length; i < length; i++) {
|
195
|
-
value =
|
199
|
+
value = $yield1(block, all[i]);
|
196
200
|
}
|
197
201
|
}
|
198
202
|
}
|
199
203
|
else {
|
200
204
|
while (n > 1) {
|
201
205
|
for (i = 0, length = all.length; i < length; i++) {
|
202
|
-
value =
|
206
|
+
value = $yield1(block, all[i]);
|
203
207
|
}
|
204
208
|
|
205
209
|
n--;
|
@@ -212,7 +216,7 @@ module Enumerable
|
|
212
216
|
return enum_for :detect, ifnone unless block_given?
|
213
217
|
|
214
218
|
each do |*args|
|
215
|
-
value = Opal.destructure(args)
|
219
|
+
value = ::Opal.destructure(args)
|
216
220
|
if yield(value)
|
217
221
|
return value
|
218
222
|
end
|
@@ -232,10 +236,10 @@ module Enumerable
|
|
232
236
|
end
|
233
237
|
|
234
238
|
def drop(number)
|
235
|
-
number = `$coerce_to(number, #{Integer}, 'to_int')`
|
239
|
+
number = `$coerce_to(number, #{::Integer}, 'to_int')`
|
236
240
|
|
237
241
|
if `number < 0`
|
238
|
-
raise ArgumentError, 'attempt to drop negative size'
|
242
|
+
::Kernel.raise ::ArgumentError, 'attempt to drop negative size'
|
239
243
|
end
|
240
244
|
|
241
245
|
%x{
|
@@ -244,7 +248,7 @@ module Enumerable
|
|
244
248
|
|
245
249
|
self.$each.$$p = function() {
|
246
250
|
if (number <= current) {
|
247
|
-
result.push(#{Opal.destructure(`arguments`)});
|
251
|
+
result.push(#{::Opal.destructure(`arguments`)});
|
248
252
|
}
|
249
253
|
|
250
254
|
current++;
|
@@ -264,12 +268,12 @@ module Enumerable
|
|
264
268
|
dropping = true;
|
265
269
|
|
266
270
|
self.$each.$$p = function() {
|
267
|
-
var param = #{Opal.destructure(`arguments`)};
|
271
|
+
var param = #{::Opal.destructure(`arguments`)};
|
268
272
|
|
269
273
|
if (dropping) {
|
270
|
-
var value =
|
274
|
+
var value = $yield1(block, param);
|
271
275
|
|
272
|
-
if (
|
276
|
+
if (!$truthy(value)) {
|
273
277
|
dropping = false;
|
274
278
|
result.push(param);
|
275
279
|
}
|
@@ -287,13 +291,13 @@ module Enumerable
|
|
287
291
|
|
288
292
|
def each_cons(n, &block)
|
289
293
|
if `arguments.length != 1`
|
290
|
-
raise ArgumentError, "wrong number of arguments (#{`arguments.length`} for 1)"
|
294
|
+
::Kernel.raise ::ArgumentError, "wrong number of arguments (#{`arguments.length`} for 1)"
|
291
295
|
end
|
292
296
|
|
293
|
-
n = Opal.try_convert n, Integer, :to_int
|
297
|
+
n = ::Opal.try_convert n, ::Integer, :to_int
|
294
298
|
|
295
299
|
if `n <= 0`
|
296
|
-
raise ArgumentError, 'invalid size'
|
300
|
+
::Kernel.raise ::ArgumentError, 'invalid size'
|
297
301
|
end
|
298
302
|
|
299
303
|
unless block_given?
|
@@ -313,19 +317,19 @@ module Enumerable
|
|
313
317
|
var buffer = [];
|
314
318
|
|
315
319
|
self.$each.$$p = function() {
|
316
|
-
var element = #{Opal.destructure(`arguments`)};
|
320
|
+
var element = #{::Opal.destructure(`arguments`)};
|
317
321
|
buffer.push(element);
|
318
322
|
if (buffer.length > n) {
|
319
323
|
buffer.shift();
|
320
324
|
}
|
321
325
|
if (buffer.length == n) {
|
322
|
-
|
326
|
+
$yield1(block, buffer.slice(0, n));
|
323
327
|
}
|
324
328
|
}
|
325
329
|
|
326
330
|
self.$each();
|
327
331
|
|
328
|
-
return
|
332
|
+
return self;
|
329
333
|
}
|
330
334
|
end
|
331
335
|
|
@@ -336,9 +340,9 @@ module Enumerable
|
|
336
340
|
|
337
341
|
%x{
|
338
342
|
self.$each.$$p = function() {
|
339
|
-
var item = #{Opal.destructure(`arguments`)};
|
343
|
+
var item = #{::Opal.destructure(`arguments`)};
|
340
344
|
|
341
|
-
|
345
|
+
$yield1(block, item);
|
342
346
|
}
|
343
347
|
|
344
348
|
self.$each.apply(self, data);
|
@@ -348,10 +352,10 @@ module Enumerable
|
|
348
352
|
end
|
349
353
|
|
350
354
|
def each_slice(n, &block)
|
351
|
-
n = `$coerce_to(#{n}, #{Integer}, 'to_int')`
|
355
|
+
n = `$coerce_to(#{n}, #{::Integer}, 'to_int')`
|
352
356
|
|
353
357
|
if `n <= 0`
|
354
|
-
raise ArgumentError, 'invalid slice size'
|
358
|
+
::Kernel.raise ::ArgumentError, 'invalid slice size'
|
355
359
|
end
|
356
360
|
|
357
361
|
return enum_for(:each_slice, n) { respond_to?(:size) ? (size / n).ceil : nil } unless block_given?
|
@@ -360,12 +364,12 @@ module Enumerable
|
|
360
364
|
var slice = []
|
361
365
|
|
362
366
|
self.$each.$$p = function() {
|
363
|
-
var param = #{Opal.destructure(`arguments`)};
|
367
|
+
var param = #{::Opal.destructure(`arguments`)};
|
364
368
|
|
365
369
|
slice.push(param);
|
366
370
|
|
367
371
|
if (slice.length === n) {
|
368
|
-
|
372
|
+
$yield1(block, slice);
|
369
373
|
slice = [];
|
370
374
|
}
|
371
375
|
};
|
@@ -374,11 +378,11 @@ module Enumerable
|
|
374
378
|
|
375
379
|
// our "last" group, if smaller than n then won't have been yielded
|
376
380
|
if (slice.length > 0) {
|
377
|
-
|
381
|
+
$yield1(block, slice);
|
378
382
|
}
|
379
383
|
}
|
380
384
|
|
381
|
-
|
385
|
+
self
|
382
386
|
end
|
383
387
|
|
384
388
|
def each_with_index(*args, &block)
|
@@ -388,7 +392,7 @@ module Enumerable
|
|
388
392
|
var index = 0;
|
389
393
|
|
390
394
|
self.$each.$$p = function() {
|
391
|
-
var param = #{Opal.destructure(`arguments`)};
|
395
|
+
var param = #{::Opal.destructure(`arguments`)};
|
392
396
|
|
393
397
|
block(param, index);
|
394
398
|
|
@@ -406,7 +410,7 @@ module Enumerable
|
|
406
410
|
|
407
411
|
%x{
|
408
412
|
self.$each.$$p = function() {
|
409
|
-
var param = #{Opal.destructure(`arguments`)};
|
413
|
+
var param = #{::Opal.destructure(`arguments`)};
|
410
414
|
|
411
415
|
block(param, object);
|
412
416
|
};
|
@@ -422,7 +426,7 @@ module Enumerable
|
|
422
426
|
var result = [];
|
423
427
|
|
424
428
|
self.$each.$$p = function() {
|
425
|
-
result.push(#{Opal.destructure(`arguments`)});
|
429
|
+
result.push(#{::Opal.destructure(`arguments`)});
|
426
430
|
};
|
427
431
|
|
428
432
|
self.$each.apply(self, args);
|
@@ -437,8 +441,6 @@ module Enumerable
|
|
437
441
|
map(&block).select(&:itself)
|
438
442
|
end
|
439
443
|
|
440
|
-
alias find detect
|
441
|
-
|
442
444
|
def find_all(&block)
|
443
445
|
return enum_for(:find_all) { enumerator_size } unless block_given?
|
444
446
|
|
@@ -446,8 +448,8 @@ module Enumerable
|
|
446
448
|
var result = [];
|
447
449
|
|
448
450
|
self.$each.$$p = function() {
|
449
|
-
var param = #{Opal.destructure(`arguments`)},
|
450
|
-
value =
|
451
|
+
var param = #{::Opal.destructure(`arguments`)},
|
452
|
+
value = $yield1(block, param);
|
451
453
|
|
452
454
|
if ($truthy(value)) {
|
453
455
|
result.push(param);
|
@@ -460,8 +462,6 @@ module Enumerable
|
|
460
462
|
}
|
461
463
|
end
|
462
464
|
|
463
|
-
alias filter find_all
|
464
|
-
|
465
465
|
def find_index(object = undefined, &block)
|
466
466
|
return enum_for :find_index if `object === undefined && block === nil`
|
467
467
|
|
@@ -475,7 +475,7 @@ module Enumerable
|
|
475
475
|
|
476
476
|
if `object != null`
|
477
477
|
each do |*value|
|
478
|
-
if Opal.destructure(value) == object
|
478
|
+
if ::Opal.destructure(value) == object
|
479
479
|
return index
|
480
480
|
end
|
481
481
|
|
@@ -501,10 +501,10 @@ module Enumerable
|
|
501
501
|
end
|
502
502
|
else
|
503
503
|
result = []
|
504
|
-
number = `$coerce_to(number, #{Integer}, 'to_int')`
|
504
|
+
number = `$coerce_to(number, #{::Integer}, 'to_int')`
|
505
505
|
|
506
506
|
if `number < 0`
|
507
|
-
raise ArgumentError, 'attempt to take negative size'
|
507
|
+
::Kernel.raise ::ArgumentError, 'attempt to take negative size'
|
508
508
|
end
|
509
509
|
|
510
510
|
if `number == 0`
|
@@ -514,7 +514,7 @@ module Enumerable
|
|
514
514
|
current = 0
|
515
515
|
|
516
516
|
each do |*args|
|
517
|
-
`result.push(#{Opal.destructure(args)})`
|
517
|
+
`result.push(#{::Opal.destructure(args)})`
|
518
518
|
|
519
519
|
if `number <= ++current`
|
520
520
|
return result
|
@@ -525,8 +525,6 @@ module Enumerable
|
|
525
525
|
end
|
526
526
|
end
|
527
527
|
|
528
|
-
alias flat_map collect_concat
|
529
|
-
|
530
528
|
def grep(pattern, &block)
|
531
529
|
result = []
|
532
530
|
|
@@ -574,8 +572,8 @@ module Enumerable
|
|
574
572
|
var result;
|
575
573
|
|
576
574
|
self.$each.$$p = function() {
|
577
|
-
var param = #{Opal.destructure(`arguments`)},
|
578
|
-
value =
|
575
|
+
var param = #{::Opal.destructure(`arguments`)},
|
576
|
+
value = $yield1(block, param);
|
579
577
|
|
580
578
|
#{(hash[`value`] ||= []) << `param`};
|
581
579
|
}
|
@@ -592,7 +590,7 @@ module Enumerable
|
|
592
590
|
|
593
591
|
def include?(obj)
|
594
592
|
each do |*args|
|
595
|
-
if Opal.destructure(args) == obj
|
593
|
+
if ::Opal.destructure(args) == obj
|
596
594
|
return true
|
597
595
|
end
|
598
596
|
end
|
@@ -606,22 +604,22 @@ module Enumerable
|
|
606
604
|
|
607
605
|
if (block !== nil && sym === undefined) {
|
608
606
|
self.$each.$$p = function() {
|
609
|
-
var value = #{Opal.destructure(`arguments`)};
|
607
|
+
var value = #{::Opal.destructure(`arguments`)};
|
610
608
|
|
611
609
|
if (result === undefined) {
|
612
610
|
result = value;
|
613
611
|
return;
|
614
612
|
}
|
615
613
|
|
616
|
-
value =
|
614
|
+
value = $yieldX(block, [result, value]);
|
617
615
|
|
618
616
|
result = value;
|
619
617
|
};
|
620
618
|
}
|
621
619
|
else {
|
622
620
|
if (sym === undefined) {
|
623
|
-
if (!#{Symbol === object}) {
|
624
|
-
#{raise TypeError, "#{object.inspect} is not a Symbol"};
|
621
|
+
if (!#{::Symbol === object}) {
|
622
|
+
#{::Kernel.raise ::TypeError, "#{object.inspect} is not a Symbol"};
|
625
623
|
}
|
626
624
|
|
627
625
|
sym = object;
|
@@ -629,7 +627,7 @@ module Enumerable
|
|
629
627
|
}
|
630
628
|
|
631
629
|
self.$each.$$p = function() {
|
632
|
-
var value = #{Opal.destructure(`arguments`)};
|
630
|
+
var value = #{::Opal.destructure(`arguments`)};
|
633
631
|
|
634
632
|
if (result === undefined) {
|
635
633
|
result = value;
|
@@ -647,7 +645,7 @@ module Enumerable
|
|
647
645
|
end
|
648
646
|
|
649
647
|
def lazy
|
650
|
-
Enumerator::Lazy.new(self, enumerator_size) do |enum, *args|
|
648
|
+
::Enumerator::Lazy.new(self, enumerator_size) do |enum, *args|
|
651
649
|
enum.yield(*args)
|
652
650
|
end
|
653
651
|
end
|
@@ -656,15 +654,13 @@ module Enumerable
|
|
656
654
|
respond_to?(:size) ? size : nil
|
657
655
|
end
|
658
656
|
|
659
|
-
alias map collect
|
660
|
-
|
661
657
|
def max(n = undefined, &block)
|
662
658
|
%x{
|
663
659
|
if (n === undefined || n === nil) {
|
664
660
|
var result, value;
|
665
661
|
|
666
662
|
self.$each.$$p = function() {
|
667
|
-
var item = #{Opal.destructure(`arguments`)};
|
663
|
+
var item = #{::Opal.destructure(`arguments`)};
|
668
664
|
|
669
665
|
if (result === undefined) {
|
670
666
|
result = item;
|
@@ -672,13 +668,13 @@ module Enumerable
|
|
672
668
|
}
|
673
669
|
|
674
670
|
if (block !== nil) {
|
675
|
-
value =
|
671
|
+
value = $yieldX(block, [item, result]);
|
676
672
|
} else {
|
677
673
|
value = #{`item` <=> `result`};
|
678
674
|
}
|
679
675
|
|
680
676
|
if (value === nil) {
|
681
|
-
#{raise ArgumentError, 'comparison failed'};
|
677
|
+
#{::Kernel.raise ::ArgumentError, 'comparison failed'};
|
682
678
|
}
|
683
679
|
|
684
680
|
if (value > 0) {
|
@@ -695,7 +691,7 @@ module Enumerable
|
|
695
691
|
}
|
696
692
|
}
|
697
693
|
|
698
|
-
n = $coerce_to(n, #{Integer}, 'to_int');
|
694
|
+
n = $coerce_to(n, #{::Integer}, 'to_int');
|
699
695
|
}
|
700
696
|
|
701
697
|
sort(&block).reverse.first(n)
|
@@ -713,8 +709,8 @@ module Enumerable
|
|
713
709
|
by;
|
714
710
|
|
715
711
|
self.$each.$$p = function() {
|
716
|
-
var param = #{Opal.destructure(`arguments`)},
|
717
|
-
value =
|
712
|
+
var param = #{::Opal.destructure(`arguments`)},
|
713
|
+
value = $yield1(block, param);
|
718
714
|
|
719
715
|
if (result === undefined) {
|
720
716
|
result = param;
|
@@ -734,8 +730,6 @@ module Enumerable
|
|
734
730
|
}
|
735
731
|
end
|
736
732
|
|
737
|
-
alias member? include?
|
738
|
-
|
739
733
|
def min(n = nil, &block)
|
740
734
|
unless n.nil?
|
741
735
|
if block_given?
|
@@ -750,7 +744,7 @@ module Enumerable
|
|
750
744
|
|
751
745
|
if (block !== nil) {
|
752
746
|
self.$each.$$p = function() {
|
753
|
-
var param = #{Opal.destructure(`arguments`)};
|
747
|
+
var param = #{::Opal.destructure(`arguments`)};
|
754
748
|
|
755
749
|
if (result === undefined) {
|
756
750
|
result = param;
|
@@ -760,7 +754,7 @@ module Enumerable
|
|
760
754
|
var value = block(param, result);
|
761
755
|
|
762
756
|
if (value === nil) {
|
763
|
-
#{raise ArgumentError, 'comparison failed'};
|
757
|
+
#{::Kernel.raise ::ArgumentError, 'comparison failed'};
|
764
758
|
}
|
765
759
|
|
766
760
|
if (value < 0) {
|
@@ -770,14 +764,14 @@ module Enumerable
|
|
770
764
|
}
|
771
765
|
else {
|
772
766
|
self.$each.$$p = function() {
|
773
|
-
var param = #{Opal.destructure(`arguments`)};
|
767
|
+
var param = #{::Opal.destructure(`arguments`)};
|
774
768
|
|
775
769
|
if (result === undefined) {
|
776
770
|
result = param;
|
777
771
|
return;
|
778
772
|
}
|
779
773
|
|
780
|
-
if (#{Opal.compare(`param`, `result`)} < 0) {
|
774
|
+
if (#{::Opal.compare(`param`, `result`)} < 0) {
|
781
775
|
result = param;
|
782
776
|
}
|
783
777
|
};
|
@@ -801,8 +795,8 @@ module Enumerable
|
|
801
795
|
by;
|
802
796
|
|
803
797
|
self.$each.$$p = function() {
|
804
|
-
var param = #{Opal.destructure(`arguments`)},
|
805
|
-
value =
|
798
|
+
var param = #{::Opal.destructure(`arguments`)},
|
799
|
+
value = $yield1(block, param);
|
806
800
|
|
807
801
|
if (result === undefined) {
|
808
802
|
result = param;
|
@@ -823,13 +817,13 @@ module Enumerable
|
|
823
817
|
end
|
824
818
|
|
825
819
|
def minmax(&block)
|
826
|
-
block ||= proc { |a, b| a <=> b }
|
820
|
+
block ||= ::Kernel.proc { |a, b| a <=> b }
|
827
821
|
|
828
822
|
%x{
|
829
823
|
var min = nil, max = nil, first_time = true;
|
830
824
|
|
831
825
|
self.$each.$$p = function() {
|
832
|
-
var element = #{Opal.destructure(`arguments`)};
|
826
|
+
var element = #{::Opal.destructure(`arguments`)};
|
833
827
|
if (first_time) {
|
834
828
|
min = max = element;
|
835
829
|
first_time = false;
|
@@ -837,7 +831,7 @@ module Enumerable
|
|
837
831
|
var min_cmp = #{block.call(`min`, `element`)};
|
838
832
|
|
839
833
|
if (min_cmp === nil) {
|
840
|
-
#{raise ArgumentError, 'comparison failed'}
|
834
|
+
#{::Kernel.raise ::ArgumentError, 'comparison failed'}
|
841
835
|
} else if (min_cmp > 0) {
|
842
836
|
min = element;
|
843
837
|
}
|
@@ -845,7 +839,7 @@ module Enumerable
|
|
845
839
|
var max_cmp = #{block.call(`max`, `element`)};
|
846
840
|
|
847
841
|
if (max_cmp === nil) {
|
848
|
-
#{raise ArgumentError, 'comparison failed'}
|
842
|
+
#{::Kernel.raise ::ArgumentError, 'comparison failed'}
|
849
843
|
} else if (max_cmp < 0) {
|
850
844
|
max = element;
|
851
845
|
}
|
@@ -868,8 +862,8 @@ module Enumerable
|
|
868
862
|
max_by;
|
869
863
|
|
870
864
|
self.$each.$$p = function() {
|
871
|
-
var param = #{Opal.destructure(`arguments`)},
|
872
|
-
value =
|
865
|
+
var param = #{::Opal.destructure(`arguments`)},
|
866
|
+
value = $yield1(block, param);
|
873
867
|
|
874
868
|
if ((min_by === undefined) || #{`value` <=> `min_by`} < 0) {
|
875
869
|
min_result = param;
|
@@ -903,7 +897,7 @@ module Enumerable
|
|
903
897
|
end
|
904
898
|
else
|
905
899
|
each do |*value|
|
906
|
-
item = Opal.destructure(value)
|
900
|
+
item = ::Opal.destructure(value)
|
907
901
|
|
908
902
|
return false if item
|
909
903
|
end
|
@@ -933,7 +927,7 @@ module Enumerable
|
|
933
927
|
end
|
934
928
|
else
|
935
929
|
each do |*value|
|
936
|
-
next unless Opal.destructure(value)
|
930
|
+
next unless ::Opal.destructure(value)
|
937
931
|
count += 1
|
938
932
|
|
939
933
|
return false if count > 1
|
@@ -950,8 +944,8 @@ module Enumerable
|
|
950
944
|
var truthy = [], falsy = [], result;
|
951
945
|
|
952
946
|
self.$each.$$p = function() {
|
953
|
-
var param = #{Opal.destructure(`arguments`)},
|
954
|
-
value =
|
947
|
+
var param = #{::Opal.destructure(`arguments`)},
|
948
|
+
value = $yield1(block, param);
|
955
949
|
|
956
950
|
if ($truthy(value)) {
|
957
951
|
truthy.push(param);
|
@@ -967,8 +961,6 @@ module Enumerable
|
|
967
961
|
}
|
968
962
|
end
|
969
963
|
|
970
|
-
alias reduce inject
|
971
|
-
|
972
964
|
def reject(&block)
|
973
965
|
return enum_for(:reject) { enumerator_size } unless block_given?
|
974
966
|
|
@@ -976,10 +968,10 @@ module Enumerable
|
|
976
968
|
var result = [];
|
977
969
|
|
978
970
|
self.$each.$$p = function() {
|
979
|
-
var param = #{Opal.destructure(`arguments`)},
|
980
|
-
value =
|
971
|
+
var param = #{::Opal.destructure(`arguments`)},
|
972
|
+
value = $yield1(block, param);
|
981
973
|
|
982
|
-
if (
|
974
|
+
if (!$truthy(value)) {
|
983
975
|
result.push(param);
|
984
976
|
}
|
985
977
|
};
|
@@ -1003,33 +995,31 @@ module Enumerable
|
|
1003
995
|
self.$each();
|
1004
996
|
|
1005
997
|
for (var i = result.length - 1; i >= 0; i--) {
|
1006
|
-
|
998
|
+
$yieldX(block, result[i]);
|
1007
999
|
}
|
1008
1000
|
|
1009
1001
|
return result;
|
1010
1002
|
}
|
1011
1003
|
end
|
1012
1004
|
|
1013
|
-
alias select find_all
|
1014
|
-
|
1015
1005
|
def slice_before(pattern = undefined, &block)
|
1016
1006
|
if `pattern === undefined && block === nil`
|
1017
|
-
raise ArgumentError, 'both pattern and block are given'
|
1007
|
+
::Kernel.raise ::ArgumentError, 'both pattern and block are given'
|
1018
1008
|
end
|
1019
1009
|
|
1020
1010
|
if `pattern !== undefined && block !== nil || arguments.length > 1`
|
1021
|
-
raise ArgumentError, "wrong number of arguments (#{`arguments.length`} expected 1)"
|
1011
|
+
::Kernel.raise ::ArgumentError, "wrong number of arguments (#{`arguments.length`} expected 1)"
|
1022
1012
|
end
|
1023
1013
|
|
1024
|
-
Enumerator.new do |e|
|
1014
|
+
::Enumerator.new do |e|
|
1025
1015
|
%x{
|
1026
1016
|
var slice = [];
|
1027
1017
|
|
1028
1018
|
if (block !== nil) {
|
1029
1019
|
if (pattern === undefined) {
|
1030
1020
|
self.$each.$$p = function() {
|
1031
|
-
var param = #{Opal.destructure(`arguments`)},
|
1032
|
-
value =
|
1021
|
+
var param = #{::Opal.destructure(`arguments`)},
|
1022
|
+
value = $yield1(block, param);
|
1033
1023
|
|
1034
1024
|
if ($truthy(value) && slice.length > 0) {
|
1035
1025
|
#{e << `slice`};
|
@@ -1041,7 +1031,7 @@ module Enumerable
|
|
1041
1031
|
}
|
1042
1032
|
else {
|
1043
1033
|
self.$each.$$p = function() {
|
1044
|
-
var param = #{Opal.destructure(`arguments`)},
|
1034
|
+
var param = #{::Opal.destructure(`arguments`)},
|
1045
1035
|
value = block(param, #{pattern.dup});
|
1046
1036
|
|
1047
1037
|
if ($truthy(value) && slice.length > 0) {
|
@@ -1055,7 +1045,7 @@ module Enumerable
|
|
1055
1045
|
}
|
1056
1046
|
else {
|
1057
1047
|
self.$each.$$p = function() {
|
1058
|
-
var param = #{Opal.destructure(`arguments`)},
|
1048
|
+
var param = #{::Opal.destructure(`arguments`)},
|
1059
1049
|
value = #{pattern === `param`};
|
1060
1050
|
|
1061
1051
|
if ($truthy(value) && slice.length > 0) {
|
@@ -1078,24 +1068,24 @@ module Enumerable
|
|
1078
1068
|
|
1079
1069
|
def slice_after(pattern = undefined, &block)
|
1080
1070
|
if `pattern === undefined && block === nil`
|
1081
|
-
raise ArgumentError, 'both pattern and block are given'
|
1071
|
+
::Kernel.raise ::ArgumentError, 'both pattern and block are given'
|
1082
1072
|
end
|
1083
1073
|
|
1084
1074
|
if `pattern !== undefined && block !== nil || arguments.length > 1`
|
1085
|
-
raise ArgumentError, "wrong number of arguments (#{`arguments.length`} expected 1)"
|
1075
|
+
::Kernel.raise ::ArgumentError, "wrong number of arguments (#{`arguments.length`} expected 1)"
|
1086
1076
|
end
|
1087
1077
|
|
1088
1078
|
if `pattern !== undefined`
|
1089
|
-
block = proc { |e| pattern === e }
|
1079
|
+
block = ::Kernel.proc { |e| pattern === e }
|
1090
1080
|
end
|
1091
1081
|
|
1092
|
-
Enumerator.new do |yielder|
|
1082
|
+
::Enumerator.new do |yielder|
|
1093
1083
|
%x{
|
1094
1084
|
var accumulate;
|
1095
1085
|
|
1096
1086
|
self.$each.$$p = function() {
|
1097
|
-
var element = #{Opal.destructure(`arguments`)},
|
1098
|
-
end_chunk =
|
1087
|
+
var element = #{::Opal.destructure(`arguments`)},
|
1088
|
+
end_chunk = $yield1(block, element);
|
1099
1089
|
|
1100
1090
|
if (accumulate == null) {
|
1101
1091
|
accumulate = [];
|
@@ -1120,17 +1110,17 @@ module Enumerable
|
|
1120
1110
|
end
|
1121
1111
|
|
1122
1112
|
def slice_when(&block)
|
1123
|
-
raise ArgumentError, 'wrong number of arguments (0 for 1)' unless block_given?
|
1113
|
+
::Kernel.raise ::ArgumentError, 'wrong number of arguments (0 for 1)' unless block_given?
|
1124
1114
|
|
1125
|
-
Enumerator.new do |yielder|
|
1115
|
+
::Enumerator.new do |yielder|
|
1126
1116
|
%x{
|
1127
1117
|
var slice = nil, last_after = nil;
|
1128
1118
|
|
1129
1119
|
self.$each_cons.$$p = function() {
|
1130
|
-
var params = #{Opal.destructure(`arguments`)},
|
1120
|
+
var params = #{::Opal.destructure(`arguments`)},
|
1131
1121
|
before = params[0],
|
1132
1122
|
after = params[1],
|
1133
|
-
match =
|
1123
|
+
match = $yieldX(block, [before, after]);
|
1134
1124
|
|
1135
1125
|
last_after = after;
|
1136
1126
|
|
@@ -1167,23 +1157,33 @@ module Enumerable
|
|
1167
1157
|
return enum_for(:sort_by) { enumerator_size } unless block_given?
|
1168
1158
|
|
1169
1159
|
dup = map do
|
1170
|
-
arg = Opal.destructure(`arguments`)
|
1160
|
+
arg = ::Opal.destructure(`arguments`)
|
1171
1161
|
[yield(arg), arg]
|
1172
1162
|
end
|
1173
1163
|
dup.sort! { |a, b| `a[0]` <=> `b[0]` }
|
1174
1164
|
dup.map! { |i| `i[1]` }
|
1175
1165
|
end
|
1176
1166
|
|
1167
|
+
# This method implements the Kahan summation algorithm if it is possible to apply one.
|
1177
1168
|
def sum(initial = 0)
|
1178
1169
|
result = initial
|
1170
|
+
compensation = 0
|
1179
1171
|
|
1180
1172
|
each do |*args|
|
1181
1173
|
item = if block_given?
|
1182
1174
|
yield(*args)
|
1183
1175
|
else
|
1184
|
-
Opal.destructure(args)
|
1176
|
+
::Opal.destructure(args)
|
1185
1177
|
end
|
1186
|
-
|
1178
|
+
|
1179
|
+
if ![::Float::INFINITY, -::Float::INFINITY].include?(item) && item.respond_to?(:-)
|
1180
|
+
y = item - compensation
|
1181
|
+
t = result + y
|
1182
|
+
compensation = (t - result) - y
|
1183
|
+
result = t
|
1184
|
+
else
|
1185
|
+
result += item
|
1186
|
+
end
|
1187
1187
|
end
|
1188
1188
|
|
1189
1189
|
result
|
@@ -1199,7 +1199,7 @@ module Enumerable
|
|
1199
1199
|
result = []
|
1200
1200
|
|
1201
1201
|
each do |*args|
|
1202
|
-
value = Opal.destructure(args)
|
1202
|
+
value = ::Opal.destructure(args)
|
1203
1203
|
|
1204
1204
|
unless yield(value)
|
1205
1205
|
return result
|
@@ -1213,7 +1213,7 @@ module Enumerable
|
|
1213
1213
|
hash = {}
|
1214
1214
|
|
1215
1215
|
each do |*args|
|
1216
|
-
value = Opal.destructure(args)
|
1216
|
+
value = ::Opal.destructure(args)
|
1217
1217
|
|
1218
1218
|
produced = if block_given?
|
1219
1219
|
yield(value)
|
@@ -1229,12 +1229,16 @@ module Enumerable
|
|
1229
1229
|
hash.values
|
1230
1230
|
end
|
1231
1231
|
|
1232
|
-
def tally
|
1233
|
-
group_by(&:itself).transform_values(&:count)
|
1232
|
+
def tally(hash = undefined)
|
1233
|
+
out = group_by(&:itself).transform_values(&:count)
|
1234
|
+
if hash
|
1235
|
+
out.each { |k, v| hash[k] = hash.fetch(k, 0) + v }
|
1236
|
+
hash
|
1237
|
+
else
|
1238
|
+
out
|
1239
|
+
end
|
1234
1240
|
end
|
1235
1241
|
|
1236
|
-
alias to_a entries
|
1237
|
-
|
1238
1242
|
def to_h(*args, &block)
|
1239
1243
|
return map(&block).to_h(*args) if block_given?
|
1240
1244
|
|
@@ -1242,13 +1246,13 @@ module Enumerable
|
|
1242
1246
|
var hash = #{{}};
|
1243
1247
|
|
1244
1248
|
self.$each.$$p = function() {
|
1245
|
-
var param = #{Opal.destructure(`arguments`)};
|
1246
|
-
var ary = #{Opal.coerce_to?(`param`, Array, :to_ary)}, key, val;
|
1249
|
+
var param = #{::Opal.destructure(`arguments`)};
|
1250
|
+
var ary = #{::Opal.coerce_to?(`param`, ::Array, :to_ary)}, key, val;
|
1247
1251
|
if (!ary.$$is_array) {
|
1248
|
-
#{raise TypeError, "wrong element type #{`ary`.class} (expected array)"}
|
1252
|
+
#{::Kernel.raise ::TypeError, "wrong element type #{`ary`.class} (expected array)"}
|
1249
1253
|
}
|
1250
1254
|
if (ary.length !== 2) {
|
1251
|
-
#{raise ArgumentError, "wrong array length (expected 2, was #{`ary`.length})"}
|
1255
|
+
#{::Kernel.raise ::ArgumentError, "wrong array length (expected 2, was #{`ary`.length})"}
|
1252
1256
|
}
|
1253
1257
|
key = ary[0];
|
1254
1258
|
val = ary[1];
|
@@ -1265,4 +1269,13 @@ module Enumerable
|
|
1265
1269
|
def zip(*others, &block)
|
1266
1270
|
to_a.zip(*others)
|
1267
1271
|
end
|
1272
|
+
|
1273
|
+
alias find detect
|
1274
|
+
alias filter find_all
|
1275
|
+
alias flat_map collect_concat
|
1276
|
+
alias map collect
|
1277
|
+
alias member? include?
|
1278
|
+
alias reduce inject
|
1279
|
+
alias select find_all
|
1280
|
+
alias to_a entries
|
1268
1281
|
end
|