opal 0.3.33 → 0.3.34
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 +1 -1
- data/Gemfile +6 -1
- data/README.md +7 -7
- data/Rakefile +29 -31
- data/bin/opal +1 -1
- data/{core/parser/browser.js → lib/assets/javascripts/opal-parser.js.erb} +9 -1
- data/lib/assets/javascripts/opal.js.erb +321 -0
- data/{core → lib/assets/javascripts/opal}/alpha.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/array.rb +14 -1
- data/{core → lib/assets/javascripts/opal}/basic_object.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/boolean.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/class.rb +3 -3
- data/{core → lib/assets/javascripts/opal}/comparable.rb +0 -0
- data/lib/assets/javascripts/opal/core.js +18 -0
- data/lib/assets/javascripts/opal/date.rb +156 -0
- data/{core → lib/assets/javascripts/opal}/enumerable.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/error.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/hash.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/json.rb +1 -1
- data/{core → lib/assets/javascripts/opal}/kernel.rb +2 -2
- data/{core → lib/assets/javascripts/opal}/nil_class.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/numeric.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/proc.rb +0 -0
- data/{core/parser → lib/assets/javascripts/opal}/racc.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/range.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/regexp.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/string.rb +0 -0
- data/{core/parser → lib/assets/javascripts/opal}/strscan.rb +0 -0
- data/{core → lib/assets/javascripts/opal}/time.rb +0 -0
- data/lib/opal.rb +25 -58
- data/lib/opal/lexer.rb +1 -1
- data/lib/opal/parser.rb +1 -1
- data/lib/opal/processor.rb +26 -0
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +1 -1
- data/spec/core/array/shuffle_spec.rb +11 -0
- data/spec/index.html +4 -6
- data/spec/spec_helper.rb +3 -1
- metadata +29 -35
- data/core/date.rb +0 -34
- data/core/erb.rb +0 -20
- data/core/load_order +0 -20
- data/core/runtime.js +0 -305
- data/core/test_runner/runner.js +0 -37
- data/lib/opal/builder.rb +0 -88
- data/lib/opal/erb.rb +0 -14
- data/lib/opal/rake_task.rb +0 -80
- data/spec/parser/erb_spec.rb +0 -32
- data/spec/test_case.html +0 -13
data/lib/opal/version.rb
CHANGED
data/opal.gemspec
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
describe "Array#shuffle" do
|
2
|
+
it "returns an array mixed up" do
|
3
|
+
ary = [1, 2, 3, 4, 5]
|
4
|
+
[1, 2, 3, 4, 5].shuffle.should_not == ary
|
5
|
+
end
|
6
|
+
|
7
|
+
it "returns an array mixed up with UTF-8 characters" do
|
8
|
+
ary = ["á", "é", "à", "ñÑ", "¥ØŁØ"]
|
9
|
+
["á", "é", "à", "ñÑ", "¥ØŁØ"].shuffle.should_not == ary
|
10
|
+
end
|
11
|
+
end
|
data/spec/index.html
CHANGED
@@ -2,11 +2,9 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>Opal corelib and runtime specs</title>
|
5
|
-
<script type="text/javascript" src="../build/opal.js"></script>
|
6
|
-
<script type="text/javascript" src="../build/opal-parser.js"></script>
|
7
|
-
<script type="text/javascript" src="../build/opal-spec.js"></script>
|
8
5
|
<script type="text/javascript" src="../build/specs.js"></script>
|
6
|
+
<script type="text/javascript" src="../build/opal-parser.js"></script>
|
9
7
|
</head>
|
10
|
-
<body>
|
11
|
-
</body>
|
12
|
-
</html>
|
8
|
+
<body>
|
9
|
+
</body>
|
10
|
+
</html>
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opal
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.34
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-02-05 00:00:00.000000000Z
|
13
13
|
dependencies: []
|
14
14
|
description: Ruby runtime and core library for javascript.
|
15
15
|
email: adam.beynon@gmail.com
|
@@ -26,40 +26,36 @@ files:
|
|
26
26
|
- README.md
|
27
27
|
- Rakefile
|
28
28
|
- bin/opal
|
29
|
-
-
|
30
|
-
-
|
31
|
-
-
|
32
|
-
-
|
33
|
-
-
|
34
|
-
-
|
35
|
-
-
|
36
|
-
-
|
37
|
-
- core
|
38
|
-
-
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
-
|
43
|
-
-
|
44
|
-
-
|
45
|
-
-
|
46
|
-
-
|
47
|
-
-
|
48
|
-
-
|
49
|
-
-
|
50
|
-
-
|
51
|
-
-
|
52
|
-
-
|
53
|
-
- core/test_runner/runner.js
|
54
|
-
- core/time.rb
|
29
|
+
- lib/assets/javascripts/opal-parser.js.erb
|
30
|
+
- lib/assets/javascripts/opal.js.erb
|
31
|
+
- lib/assets/javascripts/opal/alpha.rb
|
32
|
+
- lib/assets/javascripts/opal/array.rb
|
33
|
+
- lib/assets/javascripts/opal/basic_object.rb
|
34
|
+
- lib/assets/javascripts/opal/boolean.rb
|
35
|
+
- lib/assets/javascripts/opal/class.rb
|
36
|
+
- lib/assets/javascripts/opal/comparable.rb
|
37
|
+
- lib/assets/javascripts/opal/core.js
|
38
|
+
- lib/assets/javascripts/opal/date.rb
|
39
|
+
- lib/assets/javascripts/opal/enumerable.rb
|
40
|
+
- lib/assets/javascripts/opal/error.rb
|
41
|
+
- lib/assets/javascripts/opal/hash.rb
|
42
|
+
- lib/assets/javascripts/opal/json.rb
|
43
|
+
- lib/assets/javascripts/opal/kernel.rb
|
44
|
+
- lib/assets/javascripts/opal/nil_class.rb
|
45
|
+
- lib/assets/javascripts/opal/numeric.rb
|
46
|
+
- lib/assets/javascripts/opal/proc.rb
|
47
|
+
- lib/assets/javascripts/opal/racc.rb
|
48
|
+
- lib/assets/javascripts/opal/range.rb
|
49
|
+
- lib/assets/javascripts/opal/regexp.rb
|
50
|
+
- lib/assets/javascripts/opal/string.rb
|
51
|
+
- lib/assets/javascripts/opal/strscan.rb
|
52
|
+
- lib/assets/javascripts/opal/time.rb
|
55
53
|
- lib/opal.rb
|
56
|
-
- lib/opal/builder.rb
|
57
|
-
- lib/opal/erb.rb
|
58
54
|
- lib/opal/grammar.rb
|
59
55
|
- lib/opal/grammar.y
|
60
56
|
- lib/opal/lexer.rb
|
61
57
|
- lib/opal/parser.rb
|
62
|
-
- lib/opal/
|
58
|
+
- lib/opal/processor.rb
|
63
59
|
- lib/opal/scope.rb
|
64
60
|
- lib/opal/version.rb
|
65
61
|
- opal.gemspec
|
@@ -113,6 +109,7 @@ files:
|
|
113
109
|
- spec/core/array/rindex_spec.rb
|
114
110
|
- spec/core/array/select_spec.rb
|
115
111
|
- spec/core/array/shift_spec.rb
|
112
|
+
- spec/core/array/shuffle_spec.rb
|
116
113
|
- spec/core/array/size_spec.rb
|
117
114
|
- spec/core/array/slice_spec.rb
|
118
115
|
- spec/core/array/sort_spec.rb
|
@@ -425,10 +422,8 @@ files:
|
|
425
422
|
- spec/language/variables_spec.rb
|
426
423
|
- spec/language/while_spec.rb
|
427
424
|
- spec/language/yield_spec.rb
|
428
|
-
- spec/parser/erb_spec.rb
|
429
425
|
- spec/parser/simple_spec.rb
|
430
426
|
- spec/spec_helper.rb
|
431
|
-
- spec/test_case.html
|
432
427
|
homepage: http://opalrb.org
|
433
428
|
licenses: []
|
434
429
|
post_install_message:
|
@@ -504,6 +499,7 @@ test_files:
|
|
504
499
|
- spec/core/array/rindex_spec.rb
|
505
500
|
- spec/core/array/select_spec.rb
|
506
501
|
- spec/core/array/shift_spec.rb
|
502
|
+
- spec/core/array/shuffle_spec.rb
|
507
503
|
- spec/core/array/size_spec.rb
|
508
504
|
- spec/core/array/slice_spec.rb
|
509
505
|
- spec/core/array/sort_spec.rb
|
@@ -816,7 +812,5 @@ test_files:
|
|
816
812
|
- spec/language/variables_spec.rb
|
817
813
|
- spec/language/while_spec.rb
|
818
814
|
- spec/language/yield_spec.rb
|
819
|
-
- spec/parser/erb_spec.rb
|
820
815
|
- spec/parser/simple_spec.rb
|
821
816
|
- spec/spec_helper.rb
|
822
|
-
- spec/test_case.html
|
data/core/date.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
date_constructor = `Date`
|
2
|
-
|
3
|
-
class Date
|
4
|
-
def self.today
|
5
|
-
%x{
|
6
|
-
var date = #{new};
|
7
|
-
date._date = new date_constructor();
|
8
|
-
return date;
|
9
|
-
}
|
10
|
-
end
|
11
|
-
|
12
|
-
def initialize(year, month, day)
|
13
|
-
`#{self}._date = new date_constructor(year, month - 1, day)`
|
14
|
-
end
|
15
|
-
|
16
|
-
def day
|
17
|
-
`#{self}._date.getDate()`
|
18
|
-
end
|
19
|
-
|
20
|
-
def month
|
21
|
-
`#{self}._date.getMonth() + 1`
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_s
|
25
|
-
%x{
|
26
|
-
var d = #{self}._date;
|
27
|
-
return '' + d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
|
28
|
-
}
|
29
|
-
end
|
30
|
-
|
31
|
-
def year
|
32
|
-
`#{self}._date.getFullYear()`
|
33
|
-
end
|
34
|
-
end
|
data/core/erb.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
class ERB
|
2
|
-
@_cache = {}
|
3
|
-
def self.[](name)
|
4
|
-
@_cache[name]
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.[]=(name, instance)
|
8
|
-
@_cache[name] = instance
|
9
|
-
end
|
10
|
-
|
11
|
-
def initialize(name, &body)
|
12
|
-
@body = body
|
13
|
-
@name = name
|
14
|
-
ERB[name] = self
|
15
|
-
end
|
16
|
-
|
17
|
-
def render(ctx=self)
|
18
|
-
ctx.instance_eval(&@body)
|
19
|
-
end
|
20
|
-
end
|
data/core/load_order
DELETED
data/core/runtime.js
DELETED
@@ -1,305 +0,0 @@
|
|
1
|
-
// The Opal object that is exposed globally
|
2
|
-
var Opal = this.Opal = {};
|
3
|
-
|
4
|
-
// Very root class
|
5
|
-
function BasicObject(){}
|
6
|
-
|
7
|
-
// Core Object class
|
8
|
-
function Object(){}
|
9
|
-
|
10
|
-
// Class' class
|
11
|
-
function Class(){}
|
12
|
-
|
13
|
-
// the class of nil
|
14
|
-
function NilClass(){}
|
15
|
-
|
16
|
-
// TopScope is used for inheriting constants from the top scope
|
17
|
-
var TopScope = function(){};
|
18
|
-
|
19
|
-
// Opal just acts as the top scope
|
20
|
-
TopScope.prototype = Opal;
|
21
|
-
|
22
|
-
// To inherit scopes
|
23
|
-
Opal.alloc = TopScope;
|
24
|
-
|
25
|
-
// This is a useful reference to global object inside ruby files
|
26
|
-
Opal.global = this;
|
27
|
-
|
28
|
-
// Minify common function calls
|
29
|
-
var __hasOwn = Opal.hasOwnProperty;
|
30
|
-
var __slice = Opal.slice = Array.prototype.slice;
|
31
|
-
|
32
|
-
// Generates unique id for every ruby object
|
33
|
-
var unique_id = 0;
|
34
|
-
|
35
|
-
// Table holds all class variables
|
36
|
-
Opal.cvars = {};
|
37
|
-
|
38
|
-
// Globals table
|
39
|
-
Opal.gvars = {};
|
40
|
-
|
41
|
-
Opal.klass = function(base, superklass, id, constructor) {
|
42
|
-
var klass;
|
43
|
-
if (base._isObject) {
|
44
|
-
base = base._klass;
|
45
|
-
}
|
46
|
-
|
47
|
-
if (superklass === null) {
|
48
|
-
superklass = Object;
|
49
|
-
}
|
50
|
-
|
51
|
-
if (__hasOwn.call(base._scope, id)) {
|
52
|
-
klass = base._scope[id];
|
53
|
-
}
|
54
|
-
else {
|
55
|
-
if (!superklass._methods) {
|
56
|
-
var bridged = superklass;
|
57
|
-
superklass = Object;
|
58
|
-
klass = bridge_class(bridged);
|
59
|
-
}
|
60
|
-
else {
|
61
|
-
klass = boot_class(superklass, constructor);
|
62
|
-
}
|
63
|
-
|
64
|
-
klass._name = (base === Object ? id : base._name + '::' + id);
|
65
|
-
|
66
|
-
var const_alloc = function() {};
|
67
|
-
var const_scope = const_alloc.prototype = new base._scope.alloc();
|
68
|
-
klass._scope = const_scope;
|
69
|
-
const_scope.alloc = const_alloc;
|
70
|
-
|
71
|
-
base[id] = base._scope[id] = klass;
|
72
|
-
|
73
|
-
if (superklass.$inherited) {
|
74
|
-
superklass.$inherited(klass);
|
75
|
-
}
|
76
|
-
}
|
77
|
-
|
78
|
-
return klass;
|
79
|
-
};
|
80
|
-
|
81
|
-
// Define new module (or return existing module)
|
82
|
-
Opal.module = function(base, id, constructor) {
|
83
|
-
var klass;
|
84
|
-
if (base._isObject) {
|
85
|
-
base = base._klass;
|
86
|
-
}
|
87
|
-
|
88
|
-
if (__hasOwn.call(base._scope, id)) {
|
89
|
-
klass = base._scope[id];
|
90
|
-
}
|
91
|
-
else {
|
92
|
-
klass = boot_class(Class, constructor);
|
93
|
-
klass._name = (base === Object ? id : base._name + '::' + id);
|
94
|
-
|
95
|
-
klass.$included_in = [];
|
96
|
-
|
97
|
-
var const_alloc = function() {};
|
98
|
-
var const_scope = const_alloc.prototype = new base._scope.alloc();
|
99
|
-
klass._scope = const_scope;
|
100
|
-
const_scope.alloc = const_alloc;
|
101
|
-
|
102
|
-
base[id] = base._scope[id] = klass;
|
103
|
-
}
|
104
|
-
|
105
|
-
return klass;
|
106
|
-
}
|
107
|
-
|
108
|
-
// Utility function to raise a "no block given" error
|
109
|
-
var no_block_given = function() {
|
110
|
-
throw new Error('no block given');
|
111
|
-
};
|
112
|
-
|
113
|
-
// Boot a base class (makes instances).
|
114
|
-
var boot_defclass = function(id, constructor, superklass) {
|
115
|
-
if (superklass) {
|
116
|
-
var ctor = function() {};
|
117
|
-
ctor.prototype = superklass.prototype;
|
118
|
-
|
119
|
-
constructor.prototype = new ctor();
|
120
|
-
}
|
121
|
-
|
122
|
-
var prototype = constructor.prototype;
|
123
|
-
|
124
|
-
prototype.constructor = constructor;
|
125
|
-
prototype._isObject = true;
|
126
|
-
prototype._klass = constructor;
|
127
|
-
|
128
|
-
constructor._included_in = [];
|
129
|
-
constructor._isClass = true;
|
130
|
-
constructor._name = id;
|
131
|
-
constructor._super = superklass;
|
132
|
-
constructor._methods = [];
|
133
|
-
constructor._smethods = [];
|
134
|
-
constructor._isObject = false;
|
135
|
-
|
136
|
-
constructor._donate = __donate;
|
137
|
-
constructor._sdonate = __sdonate;
|
138
|
-
|
139
|
-
Opal[id] = constructor;
|
140
|
-
|
141
|
-
return constructor;
|
142
|
-
};
|
143
|
-
|
144
|
-
// Create generic class with given superclass.
|
145
|
-
var boot_class = function(superklass, constructor) {
|
146
|
-
var ctor = function() {};
|
147
|
-
ctor.prototype = superklass.prototype;
|
148
|
-
|
149
|
-
constructor.prototype = new ctor();
|
150
|
-
var prototype = constructor.prototype;
|
151
|
-
|
152
|
-
prototype._klass = constructor;
|
153
|
-
prototype.constructor = constructor;
|
154
|
-
|
155
|
-
constructor._included_in = [];
|
156
|
-
constructor._isClass = true;
|
157
|
-
constructor._super = superklass;
|
158
|
-
constructor._methods = [];
|
159
|
-
constructor._isObject = false;
|
160
|
-
constructor._klass = Class;
|
161
|
-
constructor._donate = __donate
|
162
|
-
constructor._sdonate = __sdonate;
|
163
|
-
|
164
|
-
constructor['$==='] = module_eqq;
|
165
|
-
constructor.$to_s = module_to_s;
|
166
|
-
|
167
|
-
var smethods;
|
168
|
-
|
169
|
-
smethods = superklass._smethods.slice();
|
170
|
-
|
171
|
-
constructor._smethods = smethods;
|
172
|
-
for (var i = 0, length = smethods.length; i < length; i++) {
|
173
|
-
var m = smethods[i];
|
174
|
-
constructor[m] = superklass[m];
|
175
|
-
}
|
176
|
-
|
177
|
-
return constructor;
|
178
|
-
};
|
179
|
-
|
180
|
-
var bridge_class = function(constructor) {
|
181
|
-
constructor.prototype._klass = constructor;
|
182
|
-
|
183
|
-
constructor._included_in = [];
|
184
|
-
constructor._isClass = true;
|
185
|
-
constructor._super = Object;
|
186
|
-
constructor._klass = Class;
|
187
|
-
constructor._methods = [];
|
188
|
-
constructor._smethods = [];
|
189
|
-
constructor._isObject = false;
|
190
|
-
|
191
|
-
constructor._donate = function(){};
|
192
|
-
constructor._sdonate = __sdonate;
|
193
|
-
|
194
|
-
constructor['$==='] = module_eqq;
|
195
|
-
constructor.$to_s = module_to_s;
|
196
|
-
|
197
|
-
var smethods = constructor._smethods = Class._methods.slice();
|
198
|
-
for (var i = 0, length = smethods.length; i < length; i++) {
|
199
|
-
var m = smethods[i];
|
200
|
-
constructor[m] = Object[m];
|
201
|
-
}
|
202
|
-
|
203
|
-
bridged_classes.push(constructor);
|
204
|
-
|
205
|
-
var table = Object.prototype, methods = Object._methods;
|
206
|
-
|
207
|
-
for (var i = 0, length = methods.length; i < length; i++) {
|
208
|
-
var m = methods[i];
|
209
|
-
constructor.prototype[m] = table[m];
|
210
|
-
}
|
211
|
-
|
212
|
-
constructor._smethods.push('$allocate');
|
213
|
-
|
214
|
-
return constructor;
|
215
|
-
};
|
216
|
-
|
217
|
-
Opal.puts = function(a) { console.log(a); };
|
218
|
-
|
219
|
-
// Initialization
|
220
|
-
// --------------
|
221
|
-
|
222
|
-
boot_defclass('BasicObject', BasicObject)
|
223
|
-
boot_defclass('Object', Object, BasicObject);
|
224
|
-
boot_defclass('Class', Class, Object);
|
225
|
-
|
226
|
-
Class.prototype = Function.prototype;
|
227
|
-
|
228
|
-
BasicObject._klass = Object._klass = Class._klass = Class;
|
229
|
-
|
230
|
-
// Implementation of Class#===
|
231
|
-
function module_eqq(object) {
|
232
|
-
if (object == null) {
|
233
|
-
return false;
|
234
|
-
}
|
235
|
-
|
236
|
-
var search = object._klass;
|
237
|
-
|
238
|
-
while (search) {
|
239
|
-
if (search === this) {
|
240
|
-
return true;
|
241
|
-
}
|
242
|
-
|
243
|
-
search = search._super;
|
244
|
-
}
|
245
|
-
|
246
|
-
return false;
|
247
|
-
}
|
248
|
-
|
249
|
-
// Implementation of Class#to_s
|
250
|
-
function module_to_s() {
|
251
|
-
return this._name;
|
252
|
-
}
|
253
|
-
|
254
|
-
// Donator for all 'normal' classes and modules
|
255
|
-
function __donate(defined, indirect) {
|
256
|
-
var methods = this._methods, included_in = this.$included_in;
|
257
|
-
|
258
|
-
// if (!indirect) {
|
259
|
-
this._methods = methods.concat(defined);
|
260
|
-
// }
|
261
|
-
|
262
|
-
if (included_in) {
|
263
|
-
for (var i = 0, length = included_in.length; i < length; i++) {
|
264
|
-
var includee = included_in[i];
|
265
|
-
var dest = includee.prototype;
|
266
|
-
|
267
|
-
for (var j = 0, jj = defined.length; j < jj; j++) {
|
268
|
-
var method = defined[j];
|
269
|
-
dest[method] = this.prototype[method];
|
270
|
-
}
|
271
|
-
|
272
|
-
if (includee.$included_in) {
|
273
|
-
includee._donate(defined, true);
|
274
|
-
}
|
275
|
-
}
|
276
|
-
|
277
|
-
}
|
278
|
-
}
|
279
|
-
|
280
|
-
// Donator for singleton (class) methods
|
281
|
-
function __sdonate(defined) {
|
282
|
-
this._smethods = this._smethods.concat(defined);
|
283
|
-
}
|
284
|
-
|
285
|
-
var bridged_classes = Object.$included_in = [];
|
286
|
-
|
287
|
-
BasicObject._scope = Object._scope = Opal;
|
288
|
-
Opal.Module = Opal.Class;
|
289
|
-
Opal.Kernel = Object;
|
290
|
-
|
291
|
-
var class_const_alloc = function(){};
|
292
|
-
var class_const_scope = new TopScope();
|
293
|
-
class_const_scope.alloc = class_const_alloc;
|
294
|
-
Class._scope = class_const_scope;
|
295
|
-
|
296
|
-
Object.prototype.toString = function() {
|
297
|
-
return this.$to_s();
|
298
|
-
};
|
299
|
-
|
300
|
-
Opal.top = new Object;
|
301
|
-
|
302
|
-
Opal.klass(Object, Object, 'NilClass', NilClass)
|
303
|
-
Opal.nil = new NilClass;
|
304
|
-
|
305
|
-
Opal.breaker = new Error('unexpected break');
|