opal 0.9.4 → 0.10.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitattributes +1 -0
- data/.gitignore +2 -3
- data/.gitmodules +5 -2
- data/.jshintrc +1 -8
- data/.rspec +1 -1
- data/.travis.yml +15 -23
- data/CHANGELOG.md +511 -326
- data/CODE_OF_CONDUCT.md +13 -15
- data/CONTRIBUTING.md +26 -216
- data/Gemfile +20 -12
- data/Guardfile +2 -2
- data/HACKING.md +230 -0
- data/README.md +6 -7
- data/bin/opal-mspec +1 -1
- data/config.ru +2 -2
- data/docs/faq.md +1 -1
- data/docs/source_maps.md +1 -1
- data/lib/opal.rb +1 -0
- data/lib/opal/builder.rb +1 -1
- data/lib/opal/cli.rb +30 -28
- data/lib/opal/cli_options.rb +3 -0
- data/lib/opal/cli_runners.rb +14 -1
- data/lib/opal/cli_runners/{apple_script.rb → applescript.rb} +3 -3
- data/lib/opal/cli_runners/nashorn.rb +2 -2
- data/lib/opal/cli_runners/nodejs.rb +2 -2
- data/lib/opal/cli_runners/phantom.js +24 -0
- data/lib/opal/cli_runners/phantomjs.rb +10 -10
- data/lib/opal/cli_runners/server.rb +3 -3
- data/lib/opal/compiler.rb +43 -4
- data/lib/opal/config.rb +3 -1
- data/lib/opal/errors.rb +13 -0
- data/lib/opal/fragment.rb +0 -13
- data/lib/opal/nodes.rb +10 -0
- data/lib/opal/nodes/args/initialize_kwargs.rb +28 -0
- data/lib/opal/nodes/args/kwarg.rb +29 -0
- data/lib/opal/nodes/args/kwoptarg.rb +29 -0
- data/lib/opal/nodes/args/kwrestarg.rb +39 -0
- data/lib/opal/nodes/args/mlhsarg.rb +79 -0
- data/lib/opal/nodes/args/normarg.rb +26 -0
- data/lib/opal/nodes/args/optarg.rb +27 -0
- data/lib/opal/nodes/args/post_args.rb +200 -0
- data/lib/opal/nodes/args/post_kwargs.rb +31 -0
- data/lib/opal/nodes/args/restarg.rb +33 -0
- data/lib/opal/nodes/base.rb +12 -0
- data/lib/opal/nodes/call.rb +92 -33
- data/lib/opal/nodes/def.rb +26 -169
- data/lib/opal/nodes/hash.rb +10 -4
- data/lib/opal/nodes/helpers.rb +6 -3
- data/lib/opal/nodes/inline_args.rb +61 -0
- data/lib/opal/nodes/iter.rb +73 -82
- data/lib/opal/nodes/logic.rb +12 -2
- data/lib/opal/nodes/masgn.rb +1 -2
- data/lib/opal/nodes/node_with_args.rb +141 -0
- data/lib/opal/nodes/rescue.rb +121 -43
- data/lib/opal/nodes/scope.rb +24 -5
- data/lib/opal/nodes/super.rb +122 -54
- data/lib/opal/nodes/top.rb +0 -12
- data/lib/opal/nodes/yield.rb +2 -13
- data/lib/opal/parser.rb +67 -39
- data/lib/opal/parser/grammar.rb +3319 -2961
- data/lib/opal/parser/grammar.y +234 -46
- data/lib/opal/parser/lexer.rb +105 -17
- data/lib/opal/parser/sexp.rb +4 -0
- data/lib/opal/paths.rb +4 -0
- data/lib/opal/regexp_anchors.rb +19 -1
- data/lib/opal/sprockets.rb +21 -18
- data/lib/opal/sprockets/environment.rb +0 -8
- data/lib/opal/sprockets/processor.rb +13 -16
- data/lib/opal/sprockets/server.rb +6 -12
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -0
- data/opal/corelib/array.rb +209 -131
- data/opal/corelib/basic_object.rb +7 -3
- data/opal/corelib/class.rb +11 -17
- data/opal/corelib/constants.rb +2 -2
- data/opal/corelib/enumerable.rb +178 -355
- data/opal/corelib/enumerator.rb +3 -46
- data/opal/corelib/error.rb +2 -2
- data/opal/corelib/file.rb +13 -1
- data/opal/corelib/hash.rb +26 -56
- data/opal/corelib/helpers.rb +10 -0
- data/opal/corelib/kernel.rb +6 -3
- data/opal/corelib/module.rb +62 -31
- data/opal/corelib/number.rb +7 -16
- data/opal/corelib/proc.rb +24 -9
- data/opal/corelib/range.rb +4 -13
- data/opal/corelib/runtime.js +515 -378
- data/opal/corelib/string.rb +21 -49
- data/opal/corelib/struct.rb +50 -35
- data/opal/corelib/unsupported.rb +18 -30
- data/opal/opal.rb +0 -1
- data/opal/opal/mini.rb +1 -0
- data/spec/README.md +6 -4
- data/spec/filters/bugs/array.rb +0 -42
- data/spec/filters/bugs/basicobject.rb +0 -2
- data/spec/filters/bugs/bigdecimal.rb +160 -0
- data/spec/filters/bugs/class.rb +0 -5
- data/spec/filters/bugs/date.rb +1 -48
- data/spec/filters/bugs/enumerable.rb +4 -12
- data/spec/filters/bugs/enumerator.rb +0 -1
- data/spec/filters/bugs/exception.rb +4 -3
- data/spec/filters/bugs/float.rb +4 -2
- data/spec/filters/bugs/kernel.rb +25 -10
- data/spec/filters/bugs/language.rb +119 -68
- data/spec/filters/bugs/method.rb +135 -0
- data/spec/filters/bugs/module.rb +13 -28
- data/spec/filters/bugs/proc.rb +18 -8
- data/spec/filters/bugs/range.rb +0 -3
- data/spec/filters/bugs/rational.rb +4 -0
- data/spec/filters/bugs/regexp.rb +68 -36
- data/spec/filters/bugs/string.rb +1 -1
- data/spec/filters/bugs/struct.rb +0 -12
- data/spec/filters/bugs/time.rb +1 -0
- data/spec/filters/bugs/unboundmethod.rb +2 -1
- data/spec/filters/unsupported/freeze.rb +3 -1
- data/spec/filters/unsupported/language.rb +0 -7
- data/spec/filters/unsupported/privacy.rb +7 -6
- data/spec/filters/unsupported/string.rb +10 -0
- data/spec/filters/unsupported/struct.rb +3 -0
- data/spec/filters/unsupported/symbol.rb +9 -0
- data/spec/filters/unsupported/taint.rb +0 -3
- data/spec/filters/unsupported/thread.rb +1 -0
- data/spec/lib/cli_runners/phantomjs_spec.rb +39 -0
- data/spec/lib/cli_spec.rb +42 -1
- data/spec/lib/compiler/call_spec.rb +700 -0
- data/spec/lib/compiler_spec.rb +46 -28
- data/spec/lib/config_spec.rb +13 -0
- data/spec/lib/parser/call_spec.rb +18 -0
- data/spec/lib/parser/def_spec.rb +29 -0
- data/spec/lib/parser/iter_spec.rb +15 -15
- data/spec/lib/parser/lambda_spec.rb +153 -12
- data/spec/lib/parser/string_spec.rb +5 -0
- data/spec/lib/parser/undef_spec.rb +1 -1
- data/spec/lib/parser/variables_spec.rb +24 -0
- data/spec/lib/paths_spec.rb +12 -5
- data/spec/lib/spec_helper.rb +5 -0
- data/spec/lib/sprockets/processor_spec.rb +6 -5
- data/spec/lib/sprockets_spec.rb +8 -0
- data/spec/mspec-opal/formatters.rb +188 -0
- data/spec/mspec-opal/runner.rb +193 -0
- data/spec/opal/core/enumerator/with_index_spec.rb +6 -0
- data/spec/opal/core/kernel/define_singleton_method_spec.rb +1 -1
- data/spec/opal/core/kernel/instance_variables_spec.rb +14 -0
- data/spec/opal/core/kernel/loop_spec.rb +1 -1
- data/spec/opal/core/kernel/raise_spec.rb +1 -1
- data/spec/opal/core/language/heredoc_spec.rb +42 -0
- data/spec/opal/core/language/rescue_spec.rb +18 -0
- data/spec/opal/core/language_spec.rb +22 -0
- data/spec/opal/core/module/const_defined_spec.rb +1 -2
- data/spec/opal/core/module/name_spec.rb +6 -0
- data/spec/opal/core/runtime/bridged_classes_spec.rb +14 -2
- data/spec/opal/core/runtime/rescue_spec.rb +12 -2
- data/spec/opal/core/runtime/super_spec.rb +1 -0
- data/spec/opal/core/string_spec.rb +21 -0
- data/spec/opal/stdlib/js_spec.rb +1 -1
- data/spec/opal/stdlib/native/hash_spec.rb +7 -0
- data/spec/opal/stdlib/promise/always_spec.rb +24 -5
- data/spec/opal/stdlib/promise/rescue_spec.rb +15 -6
- data/spec/opal/stdlib/promise/then_spec.rb +13 -5
- data/spec/opal/stdlib/promise/trace_spec.rb +5 -6
- data/spec/opal/stdlib/strscan/scan_spec.rb +1 -1
- data/spec/ruby_specs +122 -0
- data/spec/spec_helper.rb +3 -15
- data/stdlib/base64.rb +51 -121
- data/stdlib/bigdecimal.rb +231 -0
- data/stdlib/bigdecimal/bignumber.js.rb +11 -0
- data/stdlib/bigdecimal/kernel.rb +5 -0
- data/stdlib/date.rb +252 -10
- data/stdlib/native.rb +38 -38
- data/stdlib/nodejs/dir.rb +8 -6
- data/stdlib/nodejs/file.rb +28 -3
- data/stdlib/nodejs/node_modules/.bin/js-yaml +1 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esparse +1 -0
- data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esvalidate +1 -0
- data/stdlib/nodejs/require.rb +1 -1
- data/stdlib/nodejs/yaml.rb +3 -2
- data/stdlib/opal-parser.rb +7 -2
- data/stdlib/pathname.rb +23 -1
- data/stdlib/phantomjs.rb +10 -0
- data/stdlib/promise.rb +38 -23
- data/tasks/building.rake +3 -3
- data/tasks/testing.rake +27 -14
- data/tasks/testing/mspec_special_calls.rb +1 -1
- data/tasks/testing/sprockets-phantomjs.js +4 -0
- data/test/opal/test_keyword.rb +110 -110
- data/test/opal/unsupported_and_bugs.rb +30 -0
- data/vendored-minitest/minitest/assertions.rb +1 -1
- metadata +65 -15
- data/.spectator +0 -2
- data/.spectator-mspec +0 -3
- data/opal/corelib/array/inheritance.rb +0 -127
- data/spec/rubyspecs +0 -139
@@ -52,9 +52,13 @@ class BasicObject
|
|
52
52
|
|
53
53
|
string, file, _lineno = *args
|
54
54
|
compiled = Opal.compile string, file: (file || '(eval)'), eval: true
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
block = Kernel.lambda do
|
56
|
+
%x{
|
57
|
+
return (function(self) {
|
58
|
+
return eval(compiled);
|
59
|
+
})(self)
|
60
|
+
}
|
61
|
+
end
|
58
62
|
elsif args.size > 0
|
59
63
|
Kernel.raise ArgumentError, "wrong number of arguments (#{args.size} for 0)"
|
60
64
|
end
|
data/opal/corelib/class.rb
CHANGED
@@ -1,29 +1,23 @@
|
|
1
1
|
require 'corelib/module'
|
2
2
|
|
3
3
|
class Class
|
4
|
-
def self.new(
|
4
|
+
def self.new(superclass = Object, &block)
|
5
5
|
%x{
|
6
|
-
if (!
|
7
|
-
|
6
|
+
if (!superclass.$$is_class) {
|
7
|
+
throw Opal.TypeError.$new("superclass must be a Class");
|
8
8
|
}
|
9
9
|
|
10
|
-
|
11
|
-
var klass
|
12
|
-
klass.$$name = nil;
|
13
|
-
klass.$$parent = sup;
|
14
|
-
klass.$$is_class = true;
|
10
|
+
var alloc = Opal.boot_class_alloc(null, function(){}, superclass)
|
11
|
+
var klass = Opal.setup_class_object(null, alloc, superclass.$$name, superclass.constructor);
|
15
12
|
|
16
|
-
|
17
|
-
|
13
|
+
klass.$$super = superclass;
|
14
|
+
klass.$$parent = superclass;
|
18
15
|
|
19
|
-
|
16
|
+
// inherit scope from parent
|
17
|
+
Opal.create_scope(superclass.$$scope, klass);
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
block.$$s = null;
|
24
|
-
block.call(klass);
|
25
|
-
block.$$s = block_self;
|
26
|
-
}
|
19
|
+
superclass.$inherited(klass);
|
20
|
+
Opal.module_initialize(klass, block);
|
27
21
|
|
28
22
|
return klass;
|
29
23
|
}
|
data/opal/corelib/constants.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
RUBY_PLATFORM = 'opal'
|
2
2
|
RUBY_ENGINE = 'opal'
|
3
3
|
RUBY_VERSION = '2.2.3'
|
4
|
-
RUBY_ENGINE_VERSION = '0.
|
5
|
-
RUBY_RELEASE_DATE = '
|
4
|
+
RUBY_ENGINE_VERSION = '0.10.0.beta1'
|
5
|
+
RUBY_RELEASE_DATE = '2015-12-20'
|
6
6
|
RUBY_PATCHLEVEL = 0
|
7
7
|
RUBY_REVISION = 0
|
8
8
|
RUBY_COPYRIGHT = 'opal - Copyright (C) 2013-2015 Adam Beynon'
|
data/opal/corelib/enumerable.rb
CHANGED
@@ -1,70 +1,54 @@
|
|
1
1
|
module Enumerable
|
2
2
|
def all?(&block)
|
3
|
-
|
4
|
-
var result = true;
|
3
|
+
result = true
|
5
4
|
|
6
|
-
|
7
|
-
self.$each.$$p = function() {
|
8
|
-
var value = Opal.yieldX(block, arguments);
|
5
|
+
if block_given?
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
7
|
+
each do |*value|
|
8
|
+
unless yield(*value)
|
9
|
+
result = false
|
10
|
+
break
|
11
|
+
end
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
result = false;
|
17
|
-
return $breaker;
|
18
|
-
}
|
19
|
-
};
|
20
|
-
}
|
21
|
-
else {
|
22
|
-
self.$each.$$p = function(obj) {
|
23
|
-
if (arguments.length == 1 && #{Opal.falsy?(`obj`)}) {
|
24
|
-
result = false;
|
25
|
-
return $breaker;
|
26
|
-
}
|
27
|
-
};
|
28
|
-
}
|
14
|
+
else
|
29
15
|
|
30
|
-
|
16
|
+
each do |*value|
|
17
|
+
unless Opal.destructure(value)
|
18
|
+
result = false
|
19
|
+
break
|
20
|
+
end
|
21
|
+
end
|
31
22
|
|
32
|
-
|
33
|
-
|
23
|
+
end
|
24
|
+
|
25
|
+
result
|
34
26
|
end
|
35
27
|
|
36
28
|
def any?(&block)
|
37
|
-
|
38
|
-
var result = false;
|
29
|
+
result = false
|
39
30
|
|
40
|
-
|
41
|
-
self.$each.$$p = function() {
|
42
|
-
var value = Opal.yieldX(block, arguments);
|
31
|
+
if block_given?
|
43
32
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
33
|
+
each do |*value|
|
34
|
+
if yield(*value)
|
35
|
+
result = true
|
36
|
+
break
|
37
|
+
end
|
38
|
+
end
|
48
39
|
|
49
|
-
|
50
|
-
result = true;
|
51
|
-
return $breaker;
|
52
|
-
}
|
53
|
-
};
|
54
|
-
}
|
55
|
-
else {
|
56
|
-
self.$each.$$p = function(obj) {
|
57
|
-
if (arguments.length != 1 || #{Opal.truthy?(`obj`)}) {
|
58
|
-
result = true;
|
59
|
-
return $breaker;
|
60
|
-
}
|
61
|
-
}
|
62
|
-
}
|
40
|
+
else
|
63
41
|
|
64
|
-
|
42
|
+
each do |*value|
|
43
|
+
if Opal.destructure(value)
|
44
|
+
result = true
|
45
|
+
break
|
46
|
+
end
|
47
|
+
end
|
65
48
|
|
66
|
-
|
67
|
-
|
49
|
+
end
|
50
|
+
|
51
|
+
result
|
68
52
|
end
|
69
53
|
|
70
54
|
def chunk(state = undefined, &original_block)
|
@@ -89,10 +73,6 @@ module Enumerable
|
|
89
73
|
self.$each.$$p = function(value) {
|
90
74
|
var key = Opal.yield1(block, value);
|
91
75
|
|
92
|
-
if (key === $breaker) {
|
93
|
-
return $breaker;
|
94
|
-
}
|
95
|
-
|
96
76
|
if (key === nil) {
|
97
77
|
releaseAccumulate();
|
98
78
|
accumulate = [];
|
@@ -125,11 +105,6 @@ module Enumerable
|
|
125
105
|
self.$each.$$p = function() {
|
126
106
|
var value = Opal.yieldX(block, arguments);
|
127
107
|
|
128
|
-
if (value === $breaker) {
|
129
|
-
result = $breaker.$v;
|
130
|
-
return $breaker;
|
131
|
-
}
|
132
|
-
|
133
108
|
result.push(value);
|
134
109
|
};
|
135
110
|
|
@@ -160,11 +135,6 @@ module Enumerable
|
|
160
135
|
self.$each.$$p = function() {
|
161
136
|
var value = Opal.yieldX(block, arguments);
|
162
137
|
|
163
|
-
if (value === $breaker) {
|
164
|
-
result = $breaker.$v;
|
165
|
-
return $breaker;
|
166
|
-
}
|
167
|
-
|
168
138
|
if (#{Opal.truthy?(`value`)}) {
|
169
139
|
result++;
|
170
140
|
}
|
@@ -200,11 +170,6 @@ module Enumerable
|
|
200
170
|
var param = #{Opal.destructure(`arguments`)},
|
201
171
|
value = Opal.yield1(block, param);
|
202
172
|
|
203
|
-
if (value === $breaker) {
|
204
|
-
result = $breaker.$v;
|
205
|
-
return $breaker;
|
206
|
-
}
|
207
|
-
|
208
173
|
all.push(param);
|
209
174
|
}
|
210
175
|
|
@@ -222,10 +187,6 @@ module Enumerable
|
|
222
187
|
while (true) {
|
223
188
|
for (i = 0, length = all.length; i < length; i++) {
|
224
189
|
value = Opal.yield1(block, all[i]);
|
225
|
-
|
226
|
-
if (value === $breaker) {
|
227
|
-
return $breaker.$v;
|
228
|
-
}
|
229
190
|
}
|
230
191
|
}
|
231
192
|
}
|
@@ -233,10 +194,6 @@ module Enumerable
|
|
233
194
|
while (n > 1) {
|
234
195
|
for (i = 0, length = all.length; i < length; i++) {
|
235
196
|
value = Opal.yield1(block, all[i]);
|
236
|
-
|
237
|
-
if (value === $breaker) {
|
238
|
-
return $breaker.$v;
|
239
|
-
}
|
240
197
|
}
|
241
198
|
|
242
199
|
n--;
|
@@ -247,27 +204,17 @@ module Enumerable
|
|
247
204
|
|
248
205
|
def detect(ifnone = undefined, &block)
|
249
206
|
return enum_for :detect, ifnone unless block_given?
|
207
|
+
result = `undefined`
|
250
208
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
if (value === $breaker) {
|
259
|
-
result = $breaker.$v;
|
260
|
-
return $breaker;
|
261
|
-
}
|
262
|
-
|
263
|
-
if (#{Opal.truthy?(`value`)}) {
|
264
|
-
result = params;
|
265
|
-
return $breaker;
|
266
|
-
}
|
267
|
-
};
|
268
|
-
|
269
|
-
self.$each();
|
209
|
+
each do |*args|
|
210
|
+
value = Opal.destructure(args)
|
211
|
+
if yield(value)
|
212
|
+
result = value
|
213
|
+
break
|
214
|
+
end
|
215
|
+
end
|
270
216
|
|
217
|
+
%x{
|
271
218
|
if (result === undefined && ifnone !== undefined) {
|
272
219
|
if (typeof(ifnone) === 'function') {
|
273
220
|
result = ifnone();
|
@@ -319,11 +266,6 @@ module Enumerable
|
|
319
266
|
if (dropping) {
|
320
267
|
var value = Opal.yield1(block, param);
|
321
268
|
|
322
|
-
if (value === $breaker) {
|
323
|
-
result = $breaker.$v;
|
324
|
-
return $breaker;
|
325
|
-
}
|
326
|
-
|
327
269
|
if (#{Opal.falsy?(`value`)}) {
|
328
270
|
dropping = false;
|
329
271
|
result.push(param);
|
@@ -374,12 +316,7 @@ module Enumerable
|
|
374
316
|
buffer.shift();
|
375
317
|
}
|
376
318
|
if (buffer.length == n) {
|
377
|
-
|
378
|
-
|
379
|
-
if (value == $breaker) {
|
380
|
-
result = $breaker.$v;
|
381
|
-
return $breaker;
|
382
|
-
}
|
319
|
+
Opal.yield1(block, buffer.slice(0, n));
|
383
320
|
}
|
384
321
|
}
|
385
322
|
|
@@ -389,8 +326,22 @@ module Enumerable
|
|
389
326
|
}
|
390
327
|
end
|
391
328
|
|
392
|
-
def each_entry(&block)
|
393
|
-
|
329
|
+
def each_entry(*data, &block)
|
330
|
+
unless block_given?
|
331
|
+
return to_enum(:each_entry, *data) { enumerator_size }
|
332
|
+
end
|
333
|
+
|
334
|
+
%x{
|
335
|
+
self.$each.$$p = function() {
|
336
|
+
var item = #{Opal.destructure(`arguments`)};
|
337
|
+
|
338
|
+
Opal.yield1(block, item);
|
339
|
+
}
|
340
|
+
|
341
|
+
self.$each.apply(self, data);
|
342
|
+
|
343
|
+
return self;
|
344
|
+
}
|
394
345
|
end
|
395
346
|
|
396
347
|
def each_slice(n, &block)
|
@@ -412,11 +363,7 @@ module Enumerable
|
|
412
363
|
slice.push(param);
|
413
364
|
|
414
365
|
if (slice.length === n) {
|
415
|
-
|
416
|
-
result = $breaker.$v;
|
417
|
-
return $breaker;
|
418
|
-
}
|
419
|
-
|
366
|
+
Opal.yield1(block, slice);
|
420
367
|
slice = [];
|
421
368
|
}
|
422
369
|
};
|
@@ -429,9 +376,7 @@ module Enumerable
|
|
429
376
|
|
430
377
|
// our "last" group, if smaller than n then won't have been yielded
|
431
378
|
if (slice.length > 0) {
|
432
|
-
|
433
|
-
return $breaker.$v;
|
434
|
-
}
|
379
|
+
Opal.yield1(block, slice);
|
435
380
|
}
|
436
381
|
}
|
437
382
|
|
@@ -446,13 +391,9 @@ module Enumerable
|
|
446
391
|
index = 0;
|
447
392
|
|
448
393
|
self.$each.$$p = function() {
|
449
|
-
var param = #{Opal.destructure(`arguments`)}
|
450
|
-
value = block(param, index);
|
394
|
+
var param = #{Opal.destructure(`arguments`)};
|
451
395
|
|
452
|
-
|
453
|
-
result = $breaker.$v;
|
454
|
-
return $breaker;
|
455
|
-
}
|
396
|
+
block(param, index);
|
456
397
|
|
457
398
|
index++;
|
458
399
|
};
|
@@ -474,13 +415,9 @@ module Enumerable
|
|
474
415
|
var result;
|
475
416
|
|
476
417
|
self.$each.$$p = function() {
|
477
|
-
var param = #{Opal.destructure(`arguments`)}
|
478
|
-
value = block(param, object);
|
418
|
+
var param = #{Opal.destructure(`arguments`)};
|
479
419
|
|
480
|
-
|
481
|
-
result = $breaker.$v;
|
482
|
-
return $breaker;
|
483
|
-
}
|
420
|
+
block(param, object);
|
484
421
|
};
|
485
422
|
|
486
423
|
self.$each();
|
@@ -519,11 +456,6 @@ module Enumerable
|
|
519
456
|
var param = #{Opal.destructure(`arguments`)},
|
520
457
|
value = Opal.yield1(block, param);
|
521
458
|
|
522
|
-
if (value === $breaker) {
|
523
|
-
result = $breaker.$v;
|
524
|
-
return $breaker;
|
525
|
-
}
|
526
|
-
|
527
459
|
if (#{Opal.truthy?(`value`)}) {
|
528
460
|
result.push(param);
|
529
461
|
}
|
@@ -538,59 +470,39 @@ module Enumerable
|
|
538
470
|
def find_index(object = undefined, &block)
|
539
471
|
return enum_for :find_index if `object === undefined && block === nil`
|
540
472
|
|
541
|
-
|
542
|
-
|
543
|
-
index = 0;
|
544
|
-
|
545
|
-
if (object != null) {
|
546
|
-
self.$each.$$p = function() {
|
547
|
-
var param = #{Opal.destructure(`arguments`)};
|
548
|
-
|
549
|
-
if (#{`param` == `object`}) {
|
550
|
-
result = index;
|
551
|
-
return $breaker;
|
552
|
-
}
|
553
|
-
|
554
|
-
index += 1;
|
555
|
-
};
|
556
|
-
}
|
557
|
-
else if (block !== nil) {
|
558
|
-
self.$each.$$p = function() {
|
559
|
-
var value = Opal.yieldX(block, arguments);
|
560
|
-
|
561
|
-
if (value === $breaker) {
|
562
|
-
result = $breaker.$v;
|
563
|
-
return $breaker;
|
564
|
-
}
|
473
|
+
result = nil
|
474
|
+
index = 0
|
565
475
|
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
476
|
+
if `object != null`
|
477
|
+
each do |*value|
|
478
|
+
if Opal.destructure(value) == object
|
479
|
+
result = index
|
480
|
+
break
|
481
|
+
end
|
570
482
|
|
571
|
-
|
572
|
-
|
573
|
-
|
483
|
+
`index += 1`
|
484
|
+
end
|
485
|
+
else
|
486
|
+
each do |*value|
|
487
|
+
if yield(*value)
|
488
|
+
result = index
|
489
|
+
break
|
490
|
+
end
|
574
491
|
|
575
|
-
|
492
|
+
`index += 1`
|
493
|
+
end
|
494
|
+
end
|
576
495
|
|
577
|
-
|
578
|
-
}
|
496
|
+
result
|
579
497
|
end
|
580
498
|
|
581
499
|
def first(number = undefined)
|
582
500
|
if `number === undefined`
|
583
501
|
result = nil
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
return $breaker;
|
590
|
-
};
|
591
|
-
|
592
|
-
self.$each();
|
593
|
-
}
|
502
|
+
each do |value|
|
503
|
+
result = value
|
504
|
+
break
|
505
|
+
end
|
594
506
|
else
|
595
507
|
result = []
|
596
508
|
number = Opal.coerce_to number, Integer, :to_int
|
@@ -603,20 +515,15 @@ module Enumerable
|
|
603
515
|
return []
|
604
516
|
end
|
605
517
|
|
606
|
-
|
607
|
-
var current = 0;
|
608
|
-
number = #{Opal.coerce_to number, Integer, :to_int};
|
518
|
+
current = 0
|
609
519
|
|
610
|
-
|
611
|
-
|
520
|
+
each do |*args|
|
521
|
+
`result.push(#{Opal.destructure(args)})`
|
612
522
|
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
self.$each();
|
619
|
-
}
|
523
|
+
if `number <= ++current`
|
524
|
+
break
|
525
|
+
end
|
526
|
+
end
|
620
527
|
end
|
621
528
|
|
622
529
|
result
|
@@ -636,11 +543,6 @@ module Enumerable
|
|
636
543
|
if (#{Opal.truthy?(`value`)}) {
|
637
544
|
value = Opal.yield1(block, param);
|
638
545
|
|
639
|
-
if (value === $breaker) {
|
640
|
-
result = $breaker.$v;
|
641
|
-
return $breaker;
|
642
|
-
}
|
643
|
-
|
644
546
|
result.push(value);
|
645
547
|
}
|
646
548
|
};
|
@@ -674,11 +576,6 @@ module Enumerable
|
|
674
576
|
var param = #{Opal.destructure(`arguments`)},
|
675
577
|
value = Opal.yield1(block, param);
|
676
578
|
|
677
|
-
if (value === $breaker) {
|
678
|
-
result = $breaker.$v;
|
679
|
-
return $breaker;
|
680
|
-
}
|
681
|
-
|
682
579
|
#{(hash[`value`] ||= []) << `param`};
|
683
580
|
}
|
684
581
|
|
@@ -693,22 +590,15 @@ module Enumerable
|
|
693
590
|
end
|
694
591
|
|
695
592
|
def include?(obj)
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
result = true;
|
704
|
-
return $breaker;
|
705
|
-
}
|
706
|
-
}
|
707
|
-
|
708
|
-
self.$each();
|
593
|
+
result = false
|
594
|
+
each do |*args|
|
595
|
+
if Opal.destructure(args) == obj
|
596
|
+
result = true
|
597
|
+
break
|
598
|
+
end
|
599
|
+
end
|
709
600
|
|
710
|
-
|
711
|
-
}
|
601
|
+
result
|
712
602
|
end
|
713
603
|
|
714
604
|
def inject(object = undefined, sym = undefined, &block)
|
@@ -726,11 +616,6 @@ module Enumerable
|
|
726
616
|
|
727
617
|
value = Opal.yieldX(block, [result, value]);
|
728
618
|
|
729
|
-
if (value === $breaker) {
|
730
|
-
result = $breaker.$v;
|
731
|
-
return $breaker;
|
732
|
-
}
|
733
|
-
|
734
619
|
result = value;
|
735
620
|
};
|
736
621
|
}
|
@@ -774,24 +659,23 @@ module Enumerable
|
|
774
659
|
|
775
660
|
alias map collect
|
776
661
|
|
777
|
-
def max(&block)
|
662
|
+
def max(n = undefined, &block)
|
778
663
|
%x{
|
779
|
-
|
664
|
+
if (n === undefined || n === nil) {
|
665
|
+
var result, value;
|
780
666
|
|
781
|
-
if (block !== nil) {
|
782
667
|
self.$each.$$p = function() {
|
783
|
-
var
|
668
|
+
var item = #{Opal.destructure(`arguments`)};
|
784
669
|
|
785
670
|
if (result === undefined) {
|
786
|
-
result =
|
671
|
+
result = item;
|
787
672
|
return;
|
788
673
|
}
|
789
674
|
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
return $breaker;
|
675
|
+
if (block !== nil) {
|
676
|
+
value = Opal.yieldX(block, [item, result]);
|
677
|
+
} else {
|
678
|
+
value = #{`item` <=> `result`};
|
795
679
|
}
|
796
680
|
|
797
681
|
if (value === nil) {
|
@@ -799,29 +683,23 @@ module Enumerable
|
|
799
683
|
}
|
800
684
|
|
801
685
|
if (value > 0) {
|
802
|
-
result =
|
686
|
+
result = item;
|
803
687
|
}
|
804
|
-
}
|
805
|
-
}
|
806
|
-
else {
|
807
|
-
self.$each.$$p = function() {
|
808
|
-
var param = #{Opal.destructure(`arguments`)};
|
688
|
+
}
|
809
689
|
|
810
|
-
|
811
|
-
result = param;
|
812
|
-
return;
|
813
|
-
}
|
690
|
+
self.$each();
|
814
691
|
|
815
|
-
|
816
|
-
|
817
|
-
|
818
|
-
|
692
|
+
if (result === undefined) {
|
693
|
+
return nil;
|
694
|
+
} else {
|
695
|
+
return result;
|
696
|
+
}
|
819
697
|
}
|
698
|
+
}
|
820
699
|
|
821
|
-
|
700
|
+
n = Opal.coerce_to(n, Integer, :to_int)
|
822
701
|
|
823
|
-
|
824
|
-
}
|
702
|
+
sort(&block).reverse.first(n)
|
825
703
|
end
|
826
704
|
|
827
705
|
def max_by(&block)
|
@@ -841,11 +719,6 @@ module Enumerable
|
|
841
719
|
return;
|
842
720
|
}
|
843
721
|
|
844
|
-
if (value === $breaker) {
|
845
|
-
result = $breaker.$v;
|
846
|
-
return $breaker;
|
847
|
-
}
|
848
|
-
|
849
722
|
if (#{`value` <=> `by`} > 0) {
|
850
723
|
result = param
|
851
724
|
by = value;
|
@@ -875,11 +748,6 @@ module Enumerable
|
|
875
748
|
|
876
749
|
var value = block(param, result);
|
877
750
|
|
878
|
-
if (value === $breaker) {
|
879
|
-
result = $breaker.$v;
|
880
|
-
return $breaker;
|
881
|
-
}
|
882
|
-
|
883
751
|
if (value === nil) {
|
884
752
|
#{raise ArgumentError, "comparison failed"};
|
885
753
|
}
|
@@ -927,11 +795,6 @@ module Enumerable
|
|
927
795
|
return;
|
928
796
|
}
|
929
797
|
|
930
|
-
if (value === $breaker) {
|
931
|
-
result = $breaker.$v;
|
932
|
-
return $breaker;
|
933
|
-
}
|
934
|
-
|
935
798
|
if (#{`value` <=> `by`} < 0) {
|
936
799
|
result = param
|
937
800
|
by = value;
|
@@ -985,83 +848,63 @@ module Enumerable
|
|
985
848
|
end
|
986
849
|
|
987
850
|
def none?(&block)
|
988
|
-
|
989
|
-
var result = true;
|
851
|
+
result = true
|
990
852
|
|
991
|
-
|
992
|
-
self.$each.$$p = function() {
|
993
|
-
var value = Opal.yieldX(block, arguments);
|
853
|
+
if block_given?
|
994
854
|
|
995
|
-
|
996
|
-
|
997
|
-
|
998
|
-
|
855
|
+
each do |*value|
|
856
|
+
if yield(*value)
|
857
|
+
result = false
|
858
|
+
break
|
859
|
+
end
|
860
|
+
end
|
999
861
|
|
1000
|
-
|
1001
|
-
result = false;
|
1002
|
-
return $breaker;
|
1003
|
-
}
|
1004
|
-
}
|
1005
|
-
}
|
1006
|
-
else {
|
1007
|
-
self.$each.$$p = function() {
|
1008
|
-
var value = #{Opal.destructure(`arguments`)};
|
862
|
+
else
|
1009
863
|
|
1010
|
-
|
1011
|
-
|
1012
|
-
|
1013
|
-
|
1014
|
-
|
1015
|
-
|
864
|
+
each do |*value|
|
865
|
+
if Opal.destructure(value)
|
866
|
+
result = false
|
867
|
+
break
|
868
|
+
end
|
869
|
+
end
|
1016
870
|
|
1017
|
-
|
871
|
+
end
|
1018
872
|
|
1019
|
-
|
1020
|
-
}
|
873
|
+
result
|
1021
874
|
end
|
1022
875
|
|
1023
876
|
def one?(&block)
|
1024
|
-
|
1025
|
-
var result = false;
|
877
|
+
result = false
|
1026
878
|
|
1027
|
-
|
1028
|
-
self.$each.$$p = function() {
|
1029
|
-
var value = Opal.yieldX(block, arguments);
|
879
|
+
if block_given?
|
1030
880
|
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
881
|
+
each do |*value|
|
882
|
+
if yield(*value)
|
883
|
+
if result
|
884
|
+
result = false
|
885
|
+
break
|
886
|
+
end
|
1035
887
|
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
return $breaker;
|
1040
|
-
}
|
888
|
+
result = true
|
889
|
+
end
|
890
|
+
end
|
1041
891
|
|
1042
|
-
|
1043
|
-
}
|
1044
|
-
}
|
1045
|
-
}
|
1046
|
-
else {
|
1047
|
-
self.$each.$$p = function() {
|
1048
|
-
var value = #{Opal.destructure(`arguments`)};
|
892
|
+
else
|
1049
893
|
|
1050
|
-
|
1051
|
-
|
1052
|
-
|
1053
|
-
|
1054
|
-
|
894
|
+
each do |*value|
|
895
|
+
if Opal.destructure(value)
|
896
|
+
if result
|
897
|
+
result = false
|
898
|
+
break
|
899
|
+
end
|
1055
900
|
|
1056
|
-
|
1057
|
-
|
1058
|
-
|
1059
|
-
}
|
901
|
+
result = true
|
902
|
+
end
|
903
|
+
end
|
1060
904
|
|
1061
|
-
|
905
|
+
end
|
1062
906
|
|
1063
|
-
|
1064
|
-
}
|
907
|
+
result
|
1065
908
|
end
|
1066
909
|
|
1067
910
|
def partition(&block)
|
@@ -1074,11 +917,6 @@ module Enumerable
|
|
1074
917
|
var param = #{Opal.destructure(`arguments`)},
|
1075
918
|
value = Opal.yield1(block, param);
|
1076
919
|
|
1077
|
-
if (value === $breaker) {
|
1078
|
-
result = $breaker.$v;
|
1079
|
-
return $breaker;
|
1080
|
-
}
|
1081
|
-
|
1082
920
|
if (#{Opal.truthy?(`value`)}) {
|
1083
921
|
truthy.push(param);
|
1084
922
|
}
|
@@ -1105,11 +943,6 @@ module Enumerable
|
|
1105
943
|
var param = #{Opal.destructure(`arguments`)},
|
1106
944
|
value = Opal.yield1(block, param);
|
1107
945
|
|
1108
|
-
if (value === $breaker) {
|
1109
|
-
result = $breaker.$v;
|
1110
|
-
return $breaker;
|
1111
|
-
}
|
1112
|
-
|
1113
946
|
if (#{Opal.falsy?(`value`)}) {
|
1114
947
|
result.push(param);
|
1115
948
|
}
|
@@ -1206,7 +1039,7 @@ module Enumerable
|
|
1206
1039
|
def sort(&block)
|
1207
1040
|
ary = to_a
|
1208
1041
|
block = -> a,b {a <=> b} unless block_given?
|
1209
|
-
return
|
1042
|
+
return ary.sort(&block)
|
1210
1043
|
end
|
1211
1044
|
|
1212
1045
|
def sort_by(&block)
|
@@ -1214,7 +1047,7 @@ module Enumerable
|
|
1214
1047
|
|
1215
1048
|
dup = map {
|
1216
1049
|
arg = Opal.destructure(`arguments`)
|
1217
|
-
[
|
1050
|
+
[yield(arg), arg]
|
1218
1051
|
}
|
1219
1052
|
dup.sort! { |a, b| `a[0]` <=> `b[0]` }
|
1220
1053
|
dup.map! { |i| `i[1]` }
|
@@ -1227,29 +1060,19 @@ module Enumerable
|
|
1227
1060
|
def take_while(&block)
|
1228
1061
|
return enum_for :take_while unless block
|
1229
1062
|
|
1230
|
-
|
1231
|
-
var result = [];
|
1063
|
+
result = []
|
1232
1064
|
|
1233
|
-
|
1234
|
-
|
1235
|
-
value = Opal.yield1(block, param);
|
1065
|
+
each do |*args|
|
1066
|
+
value = Opal.destructure(args)
|
1236
1067
|
|
1237
|
-
|
1238
|
-
|
1239
|
-
|
1240
|
-
}
|
1241
|
-
|
1242
|
-
if (#{Opal.falsy?(`value`)}) {
|
1243
|
-
return $breaker;
|
1244
|
-
}
|
1245
|
-
|
1246
|
-
result.push(param);
|
1247
|
-
};
|
1068
|
+
unless yield(value)
|
1069
|
+
break
|
1070
|
+
end
|
1248
1071
|
|
1249
|
-
|
1072
|
+
`result.push(value)`
|
1073
|
+
end
|
1250
1074
|
|
1251
|
-
|
1252
|
-
}
|
1075
|
+
result
|
1253
1076
|
end
|
1254
1077
|
|
1255
1078
|
alias to_a entries
|