opal 0.3.44 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.travis.yml +0 -1
- data/CHANGELOG.md +52 -0
- data/README.md +3 -3
- data/Rakefile +32 -8
- data/bin/opal +69 -16
- data/config.ru +1 -1
- data/examples/native/app/app.rb +28 -9
- data/examples/rack/app/app.rb +1 -1
- data/lib/opal.rb +0 -1
- data/lib/opal/cli.rb +106 -0
- data/lib/opal/lexer.rb +4 -2
- data/lib/opal/parser.rb +603 -360
- data/lib/opal/processor.rb +20 -8
- data/lib/opal/server.rb +47 -0
- data/lib/opal/source_map.rb +63 -0
- data/lib/opal/sprockets_parser.rb +77 -0
- data/lib/opal/sprockets_source_map_header.rb +21 -0
- data/lib/opal/target_scope.rb +14 -7
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +2 -0
- data/opal/opal-browser/script_loader.rb +7 -7
- data/opal/opal-parser.js.erb +2 -2
- data/opal/opal-source-maps.js.erb +2 -0
- data/opal/opal.rb +3 -4
- data/opal/opal/array.rb +31 -28
- data/opal/opal/boolean.rb +4 -0
- data/opal/opal/class.rb +14 -5
- data/opal/opal/enumerable.rb +68 -8
- data/opal/opal/error.rb +1 -1
- data/opal/opal/hash.rb +15 -18
- data/opal/opal/kernel.rb +24 -10
- data/opal/opal/native.rb +31 -0
- data/opal/opal/nil_class.rb +7 -2
- data/opal/opal/numeric.rb +10 -1
- data/opal/opal/proc.rb +4 -0
- data/opal/opal/range.rb +1 -1
- data/opal/opal/regexp.rb +13 -3
- data/opal/opal/runtime.js +134 -51
- data/opal/opal/string.rb +45 -22
- data/opal/opal/time.rb +25 -7
- data/opal/source_map.rb +63 -0
- data/opal/source_map/generator.rb +251 -0
- data/opal/source_map/parser.rb +102 -0
- data/opal/source_map/vlq.rb +122 -0
- data/opal/strscan.rb +30 -12
- data/spec/opal/class/_inherited_spec.rb +1 -1
- data/spec/{rubyspec/core → opal}/class/bridge_class_spec.rb +5 -3
- data/spec/{rubyspec/core → opal}/class/extend_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/class/instance_methods_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/class/last_value_spec.rb +0 -1
- data/spec/{rubyspec/core → opal}/json/parse_spec.rb +0 -0
- data/spec/{rubyspec/core/kernel/block_given.rb → opal/kernel/block_given_spec.rb} +0 -0
- data/spec/{rubyspec/core → opal}/kernel/class_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/extend_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/format_spec.rb +0 -0
- data/spec/opal/kernel/freeze_spec.rb +15 -0
- data/spec/{rubyspec/core → opal}/kernel/match_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/method_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/methods_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/nil_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/p_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/printf_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/proc_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/rand_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/respond_to_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/sprintf_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/kernel/to_json_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/module/alias_method_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/module/ancestors_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/module/append_features_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/module/constants_spec.rb +0 -0
- data/spec/{rubyspec/core → opal}/module/module_function_spec.rb +0 -1
- data/spec/opal/native_spec.rb +85 -3
- data/spec/opal/numeric/equal_spec.rb +9 -0
- data/spec/opal/parser/irb_spec.rb +43 -0
- data/spec/{rubyspec/core → opal}/proc/proc_tricks_spec.rb +0 -0
- data/spec/opal/runtime/block_send_spec.rb +28 -0
- data/spec/{rubyspec/core/runtime → opal/runtime2}/call_spec.rb +0 -0
- data/spec/{rubyspec/core/runtime → opal/runtime2}/class_hierarchy_spec.rb +0 -0
- data/spec/{rubyspec/core/runtime → opal/runtime2}/def_spec.rb +0 -0
- data/spec/{rubyspec/core/runtime → opal/runtime2}/defined_spec.rb +0 -0
- data/spec/{rubyspec/core/runtime → opal/runtime2}/super_spec.rb +0 -0
- data/spec/opal/source_map_spec.rb +19 -0
- data/spec/opal/string/freeze_spec.rb +15 -0
- data/spec/{rubyspec/core → opal}/string/to_json_spec.rb +0 -0
- data/spec/ospec/runner.rb +3 -0
- data/spec/parser/str_spec.rb +4 -0
- data/spec/rubyspec/core/enumerable/fixtures/classes.rb +2 -2
- data/spec/rubyspec/core/enumerable/none_spec.rb +68 -0
- data/spec/rubyspec/core/enumerable/sort_by_spec.rb +31 -0
- data/spec/rubyspec/core/hash/size_spec.rb +1 -1
- data/spec/rubyspec/core/hash/to_native_spec.rb +3 -3
- data/spec/rubyspec/core/string/fixtures/classes.rb +49 -0
- data/spec/rubyspec/core/string/index_spec.rb +405 -0
- data/spec/rubyspec/filters/bugs/language/class.rb +0 -2
- data/spec/rubyspec/filters/bugs/language/module.rb +3 -0
- data/spec/rubyspec/language/array_spec.rb +1 -1
- data/spec/rubyspec/language/block_spec.rb +1 -1
- data/spec/rubyspec/language/module_spec.rb +5 -5
- data/spec/rubyspec/language/predefined_spec.rb +1 -2
- data/spec/rubyspec/library/stringscanner/element_reference_spec.rb +29 -0
- data/spec/rubyspec/spec_helper.rb +31 -0
- metadata +130 -76
- data/lib/opal/erb.rb +0 -41
- data/opal/erb.rb +0 -19
- data/spec/opal/erb/erb_spec.rb +0 -31
- data/spec/simple_erb_template.opalerb +0 -1
- data/spec/templates/foo/bar.opalerb +0 -1
- data/spec/templates/prefixed.opalerb +0 -1
data/opal/opal/boolean.rb
CHANGED
data/opal/opal/class.rb
CHANGED
|
@@ -19,6 +19,11 @@ class Class
|
|
|
19
19
|
}
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
def self.bridge_class(name, constructor)
|
|
23
|
+
`__opal.bridge(name, constructor)`
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
|
|
22
27
|
def allocate
|
|
23
28
|
%x{
|
|
24
29
|
var obj = new #{self};
|
|
@@ -32,6 +37,10 @@ class Class
|
|
|
32
37
|
self
|
|
33
38
|
end
|
|
34
39
|
|
|
40
|
+
def alias_native(mid, jsid)
|
|
41
|
+
`#{self}.prototype['$' + mid] = #{self}.prototype[jsid]`
|
|
42
|
+
end
|
|
43
|
+
|
|
35
44
|
def ancestors
|
|
36
45
|
%x{
|
|
37
46
|
var parent = #{self},
|
|
@@ -62,11 +71,11 @@ class Class
|
|
|
62
71
|
|
|
63
72
|
klass.$included_modules.push(module);
|
|
64
73
|
|
|
65
|
-
if (!module
|
|
66
|
-
module
|
|
74
|
+
if (!module._included_in) {
|
|
75
|
+
module._included_in = [];
|
|
67
76
|
}
|
|
68
77
|
|
|
69
|
-
module
|
|
78
|
+
module._included_in.push(klass);
|
|
70
79
|
|
|
71
80
|
var donator = module.prototype,
|
|
72
81
|
prototype = klass.prototype,
|
|
@@ -81,7 +90,7 @@ class Class
|
|
|
81
90
|
prototype._smethods.push.apply(prototype._smethods, methods);
|
|
82
91
|
}
|
|
83
92
|
|
|
84
|
-
if (klass
|
|
93
|
+
if (klass._included_in) {
|
|
85
94
|
__opal.donate(klass, methods.slice(), true);
|
|
86
95
|
}
|
|
87
96
|
}
|
|
@@ -255,7 +264,7 @@ class Class
|
|
|
255
264
|
#{self}.prototype[jsid] = block;
|
|
256
265
|
__opal.donate(#{self}, [jsid]);
|
|
257
266
|
|
|
258
|
-
return
|
|
267
|
+
return null;
|
|
259
268
|
}
|
|
260
269
|
end
|
|
261
270
|
|
data/opal/opal/enumerable.rb
CHANGED
|
@@ -10,11 +10,11 @@ module Enumerable
|
|
|
10
10
|
for(var i = 0; i < arguments.length; i ++) {
|
|
11
11
|
args[i] = arguments[i];
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
|
|
14
14
|
if ((value = block.apply(#{self}, args)) === __breaker) {
|
|
15
15
|
return __breaker.$v;
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
|
|
18
18
|
if (value === false || value === nil) {
|
|
19
19
|
result = false;
|
|
20
20
|
__breaker.$v = nil;
|
|
@@ -25,7 +25,7 @@ module Enumerable
|
|
|
25
25
|
}
|
|
26
26
|
else {
|
|
27
27
|
proc = function(obj) {
|
|
28
|
-
if ((obj === false || obj === nil) && arguments.length < 2) {
|
|
28
|
+
if ((obj === false || obj === nil) && arguments.length < 2) {
|
|
29
29
|
result = false;
|
|
30
30
|
__breaker.$v = nil;
|
|
31
31
|
|
|
@@ -41,7 +41,7 @@ module Enumerable
|
|
|
41
41
|
}
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
def any?(&block)
|
|
44
|
+
def any?(&block)
|
|
45
45
|
%x{
|
|
46
46
|
var result = false, proc;
|
|
47
47
|
|
|
@@ -52,7 +52,7 @@ module Enumerable
|
|
|
52
52
|
for(var i = 0; i < arguments.length; i ++) {
|
|
53
53
|
args[i] = arguments[i];
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
|
|
56
56
|
if ((value = block.apply(#{self}, args)) === __breaker) {
|
|
57
57
|
return __breaker.$v;
|
|
58
58
|
}
|
|
@@ -70,7 +70,7 @@ module Enumerable
|
|
|
70
70
|
if ((obj !== false && obj !== nil) || arguments.length >= 2) {
|
|
71
71
|
result = true;
|
|
72
72
|
__breaker.$v = nil;
|
|
73
|
-
|
|
73
|
+
|
|
74
74
|
return __breaker;
|
|
75
75
|
}
|
|
76
76
|
}
|
|
@@ -90,7 +90,7 @@ module Enumerable
|
|
|
90
90
|
var proc = function() {
|
|
91
91
|
var obj = __slice.call(arguments), value;
|
|
92
92
|
|
|
93
|
-
if ((value = block.apply(
|
|
93
|
+
if ((value = block.apply(nil, obj)) === __breaker) {
|
|
94
94
|
return __breaker.$v;
|
|
95
95
|
}
|
|
96
96
|
|
|
@@ -111,7 +111,7 @@ module Enumerable
|
|
|
111
111
|
var proc = function() {
|
|
112
112
|
var obj = __slice.call(arguments), value;
|
|
113
113
|
|
|
114
|
-
if ((value = block.apply(
|
|
114
|
+
if ((value = block.apply(nil, [result].concat(obj))) === __breaker) {
|
|
115
115
|
result = __breaker.$v;
|
|
116
116
|
__breaker.$v = nil;
|
|
117
117
|
|
|
@@ -532,6 +532,66 @@ module Enumerable
|
|
|
532
532
|
}
|
|
533
533
|
end
|
|
534
534
|
|
|
535
|
+
def none?(&block)
|
|
536
|
+
%x{
|
|
537
|
+
var result = true, proc;
|
|
538
|
+
|
|
539
|
+
if (block !== nil) {
|
|
540
|
+
proc = function(obj) {
|
|
541
|
+
var value;
|
|
542
|
+
var args = [];
|
|
543
|
+
for(var i = 0; i < arguments.length; i ++) {
|
|
544
|
+
args[i] = arguments[i];
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
if ((value = block.apply(#{self}, args)) === __breaker) {
|
|
548
|
+
return __breaker.$v;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
if (value !== false && value !== nil) {
|
|
552
|
+
result = false;
|
|
553
|
+
__breaker.$v = nil;
|
|
554
|
+
|
|
555
|
+
return __breaker;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
else {
|
|
560
|
+
proc = function(obj) {
|
|
561
|
+
if (arguments.length == 1 && (obj !== false && obj !== nil)) {
|
|
562
|
+
result = false;
|
|
563
|
+
__breaker.$v = nil;
|
|
564
|
+
|
|
565
|
+
return __breaker;
|
|
566
|
+
}
|
|
567
|
+
else {
|
|
568
|
+
for (var i = 0, length = arguments.length; i < length; i++) {
|
|
569
|
+
if (arguments[i] !== false && arguments[i] !== nil) {
|
|
570
|
+
result = false;
|
|
571
|
+
__breaker.$v = nil;
|
|
572
|
+
|
|
573
|
+
return __breaker;
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
#{self}.$each._p = proc;
|
|
581
|
+
#{self}.$each();
|
|
582
|
+
|
|
583
|
+
return result;
|
|
584
|
+
}
|
|
585
|
+
end
|
|
586
|
+
|
|
587
|
+
def sort_by &block
|
|
588
|
+
map { |*f|
|
|
589
|
+
# FIXME: this should probably belongs to somewhere more
|
|
590
|
+
f = `#{f}.length === 1 ? #{f}[0] : #{f}`
|
|
591
|
+
`[#{block.call(f)}, #{f}]`
|
|
592
|
+
}.sort.map { |f| `#{f}[1]` }
|
|
593
|
+
end
|
|
594
|
+
|
|
535
595
|
alias select find_all
|
|
536
596
|
|
|
537
597
|
alias take first
|
data/opal/opal/error.rb
CHANGED
data/opal/opal/hash.rb
CHANGED
|
@@ -48,28 +48,25 @@ class Hash
|
|
|
48
48
|
`__hash()`
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def self.from_native(obj)
|
|
52
|
-
%x{
|
|
53
|
-
var hash = __hash(), map = hash.map, keys = hash.keys;
|
|
54
|
-
|
|
55
|
-
for (var key in obj) {
|
|
56
|
-
keys.push(key);
|
|
57
|
-
map[key] = obj[key];
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
return hash;
|
|
61
|
-
}
|
|
62
|
-
end
|
|
63
|
-
|
|
64
51
|
def self.new(defaults = undefined, &block)
|
|
65
52
|
%x{
|
|
66
53
|
var hash = __hash();
|
|
67
54
|
|
|
68
55
|
if (defaults != null) {
|
|
69
|
-
|
|
56
|
+
if (defaults.constructor == Object) {
|
|
57
|
+
var map = hash.map, keys = hash.keys;
|
|
58
|
+
|
|
59
|
+
for (var key in defaults) {
|
|
60
|
+
keys.push(key);
|
|
61
|
+
map[key] = defaults[key];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
hash.none = defaults;
|
|
66
|
+
}
|
|
70
67
|
}
|
|
71
68
|
else if (block !== nil) {
|
|
72
|
-
|
|
69
|
+
hash.proc = block;
|
|
73
70
|
}
|
|
74
71
|
|
|
75
72
|
return hash;
|
|
@@ -697,15 +694,15 @@ class Hash
|
|
|
697
694
|
}
|
|
698
695
|
end
|
|
699
696
|
|
|
700
|
-
def
|
|
697
|
+
def to_n
|
|
701
698
|
%x{
|
|
702
699
|
var result = {}, keys = #{self}.keys, map = #{self}.map, bucket, value;
|
|
703
700
|
|
|
704
701
|
for (var i = 0, length = keys.length; i < length; i++) {
|
|
705
702
|
var key = keys[i], obj = map[key];
|
|
706
703
|
|
|
707
|
-
if (obj.$
|
|
708
|
-
result[key] = #{`obj`.
|
|
704
|
+
if (obj.$to_n) {
|
|
705
|
+
result[key] = #{`obj`.to_n};
|
|
709
706
|
}
|
|
710
707
|
else {
|
|
711
708
|
result[key] = obj;
|
data/opal/opal/kernel.rb
CHANGED
|
@@ -36,7 +36,7 @@ module Kernel
|
|
|
36
36
|
#{ raise NameError };
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
func.
|
|
39
|
+
func.constructor = #{Method};
|
|
40
40
|
return func;
|
|
41
41
|
}
|
|
42
42
|
end
|
|
@@ -60,7 +60,10 @@ module Kernel
|
|
|
60
60
|
|
|
61
61
|
def Array(object)
|
|
62
62
|
%x{
|
|
63
|
-
if (object
|
|
63
|
+
if (object === nil) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
else if (object.$to_ary) {
|
|
64
67
|
return #{object.to_ary};
|
|
65
68
|
}
|
|
66
69
|
else if (object.$to_a) {
|
|
@@ -72,7 +75,7 @@ module Kernel
|
|
|
72
75
|
end
|
|
73
76
|
|
|
74
77
|
def class
|
|
75
|
-
`#{self}.
|
|
78
|
+
`#{self}.constructor`
|
|
76
79
|
end
|
|
77
80
|
|
|
78
81
|
def define_singleton_method(name, &body)
|
|
@@ -252,7 +255,7 @@ module Kernel
|
|
|
252
255
|
end
|
|
253
256
|
|
|
254
257
|
def instance_of?(klass)
|
|
255
|
-
`#{self}.
|
|
258
|
+
`#{self}.constructor === klass`
|
|
256
259
|
end
|
|
257
260
|
|
|
258
261
|
def instance_variable_defined?(name)
|
|
@@ -287,7 +290,7 @@ module Kernel
|
|
|
287
290
|
|
|
288
291
|
def is_a?(klass)
|
|
289
292
|
%x{
|
|
290
|
-
var search = #{self}.
|
|
293
|
+
var search = #{self}.constructor;
|
|
291
294
|
|
|
292
295
|
while (search) {
|
|
293
296
|
if (search === klass) {
|
|
@@ -392,7 +395,7 @@ module Kernel
|
|
|
392
395
|
}
|
|
393
396
|
|
|
394
397
|
var meta = new __opal.Class;
|
|
395
|
-
meta.
|
|
398
|
+
meta.constructor = __opal.Class;
|
|
396
399
|
#{self}._singleton = meta;
|
|
397
400
|
meta.prototype = #{self};
|
|
398
401
|
meta._isSingleton = true;
|
|
@@ -401,7 +404,7 @@ module Kernel
|
|
|
401
404
|
}
|
|
402
405
|
|
|
403
406
|
if (typeof(#{self}) === 'function') {
|
|
404
|
-
return #{self}.
|
|
407
|
+
return #{self}.constructor;
|
|
405
408
|
}
|
|
406
409
|
|
|
407
410
|
if (#{self}._singleton) {
|
|
@@ -409,7 +412,7 @@ module Kernel
|
|
|
409
412
|
}
|
|
410
413
|
|
|
411
414
|
else {
|
|
412
|
-
var orig_class = #{self}.
|
|
415
|
+
var orig_class = #{self}.constructor,
|
|
413
416
|
class_id = "#<Class:#<" + orig_class._name + ":" + orig_class._id + ">>";
|
|
414
417
|
|
|
415
418
|
var Singleton = function () {};
|
|
@@ -418,7 +421,7 @@ module Kernel
|
|
|
418
421
|
|
|
419
422
|
meta.prototype = #{self};
|
|
420
423
|
#{self}._singleton = meta;
|
|
421
|
-
meta.
|
|
424
|
+
meta.constructor = orig_class.constructor;
|
|
422
425
|
|
|
423
426
|
return meta;
|
|
424
427
|
}
|
|
@@ -445,6 +448,17 @@ module Kernel
|
|
|
445
448
|
end
|
|
446
449
|
|
|
447
450
|
def to_s
|
|
448
|
-
`return "#<" + #{self}.
|
|
451
|
+
`return "#<" + #{self}.constructor._name + ":" + #{self}._id + ">";`
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
alias to_str to_s
|
|
455
|
+
|
|
456
|
+
def freeze
|
|
457
|
+
@___frozen___ = true
|
|
458
|
+
self
|
|
459
|
+
end
|
|
460
|
+
|
|
461
|
+
def frozen?
|
|
462
|
+
@___frozen___ || false
|
|
449
463
|
end
|
|
450
464
|
end
|
data/opal/opal/native.rb
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Native
|
|
2
|
+
def self.try_convert(value)
|
|
3
|
+
%x{
|
|
4
|
+
if (value == null) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
if (value.$to_n) {
|
|
9
|
+
return value.$to_n()
|
|
10
|
+
}
|
|
11
|
+
else if (!value.$object_id) {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def initialize(native)
|
|
21
|
+
if (native = Native.try_convert(native)).nil?
|
|
22
|
+
raise ArgumentError, "the passed value isn't a native"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
@native = native
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def to_n
|
|
29
|
+
@native
|
|
30
|
+
end
|
|
31
|
+
end
|
data/opal/opal/nil_class.rb
CHANGED
data/opal/opal/numeric.rb
CHANGED
|
@@ -76,7 +76,7 @@ class Numeric
|
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
def ==(other)
|
|
79
|
-
|
|
79
|
+
`!!(other._isNumber) && #{self} == Number(other)`
|
|
80
80
|
end
|
|
81
81
|
|
|
82
82
|
def <=>(other)
|
|
@@ -189,6 +189,10 @@ class Numeric
|
|
|
189
189
|
`#{self}.toString()`
|
|
190
190
|
end
|
|
191
191
|
|
|
192
|
+
def to_n
|
|
193
|
+
self
|
|
194
|
+
end
|
|
195
|
+
|
|
192
196
|
def upto(finish, &block)
|
|
193
197
|
return enum_for :upto, finish unless block_given?
|
|
194
198
|
|
|
@@ -206,6 +210,11 @@ class Numeric
|
|
|
206
210
|
def zero?
|
|
207
211
|
`#{self} == 0`
|
|
208
212
|
end
|
|
213
|
+
|
|
214
|
+
def size
|
|
215
|
+
# Just a stub, JS is 32bit for bitwise ops though
|
|
216
|
+
4
|
|
217
|
+
end
|
|
209
218
|
end
|
|
210
219
|
|
|
211
220
|
Fixnum = Numeric
|