opal 0.3.20 → 0.3.21
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/.gitignore +2 -7
- data/.rspec +2 -0
- data/.travis.yml +11 -0
- data/Gemfile +8 -2
- data/LICENSE +2 -3
- data/README.md +106 -239
- data/Rakefile +58 -16
- data/bin/opal +1 -0
- data/core/array.rb +180 -160
- data/core/basic_object.rb +8 -4
- data/core/boolean.rb +6 -6
- data/core/class.rb +9 -15
- data/core/dir.rb +89 -0
- data/core/enumerable.rb +83 -86
- data/core/error.rb +9 -4
- data/core/file.rb +85 -0
- data/core/hash.rb +67 -67
- data/core/kernel.rb +38 -42
- data/core/module.rb +57 -54
- data/core/numeric.rb +41 -41
- data/core/proc.rb +1 -5
- data/core/range.rb +11 -11
- data/core/regexp.rb +27 -22
- data/core/runtime.js +152 -221
- data/core/string.rb +86 -73
- data/core/time.rb +22 -18
- data/docs/post.html +9 -0
- data/docs/pre.html +32 -0
- data/lib/opal.rb +43 -3
- data/lib/opal/builder.rb +9 -26
- data/lib/opal/grammar.rb +1 -1
- data/lib/opal/grammar.y +1 -1
- data/lib/opal/lexer.rb +21 -15
- data/lib/opal/parser.rb +100 -111
- data/lib/opal/rake_task.rb +66 -0
- data/lib/opal/scope.rb +13 -5
- data/lib/opal/version.rb +1 -1
- data/opal.gemspec +2 -0
- data/spec/browser_spec.rb +28 -0
- data/spec/builder/lib_name_for_spec.rb +1 -6
- data/spec/grammar/alias_spec.rb +1 -1
- data/spec/grammar/and_spec.rb +1 -1
- data/spec/grammar/array_spec.rb +1 -1
- data/spec/grammar/attrasgn_spec.rb +1 -1
- data/spec/grammar/begin_spec.rb +1 -1
- data/spec/grammar/block_spec.rb +1 -1
- data/spec/grammar/break_spec.rb +1 -1
- data/spec/grammar/call_spec.rb +1 -1
- data/spec/grammar/class_spec.rb +1 -1
- data/spec/grammar/const_spec.rb +1 -1
- data/spec/grammar/cvar_spec.rb +1 -1
- data/spec/grammar/def_spec.rb +1 -1
- data/spec/grammar/false_spec.rb +1 -1
- data/spec/grammar/file_spec.rb +1 -1
- data/spec/grammar/gvar_spec.rb +1 -1
- data/spec/grammar/hash_spec.rb +1 -1
- data/spec/grammar/iasgn_spec.rb +1 -1
- data/spec/grammar/if_spec.rb +1 -1
- data/spec/grammar/iter_spec.rb +1 -1
- data/spec/grammar/ivar_spec.rb +1 -1
- data/spec/grammar/lambda_spec.rb +1 -1
- data/spec/grammar/lasgn_spec.rb +1 -1
- data/spec/grammar/line_spec.rb +1 -1
- data/spec/grammar/lvar_spec.rb +1 -1
- data/spec/grammar/masgn_spec.rb +1 -1
- data/spec/grammar/module_spec.rb +1 -1
- data/spec/grammar/nil_spec.rb +1 -1
- data/spec/grammar/not_spec.rb +1 -1
- data/spec/grammar/op_asgn1_spec.rb +1 -1
- data/spec/grammar/op_asgn2_spec.rb +1 -1
- data/spec/grammar/or_spec.rb +1 -1
- data/spec/grammar/return_spec.rb +1 -1
- data/spec/grammar/sclass_spec.rb +1 -1
- data/spec/grammar/self_spec.rb +1 -1
- data/spec/grammar/str_spec.rb +1 -1
- data/spec/grammar/super_spec.rb +1 -1
- data/spec/grammar/true_spec.rb +1 -1
- data/spec/grammar/undef_spec.rb +1 -1
- data/spec/grammar/unless_spec.rb +1 -1
- data/spec/grammar/while_spec.rb +1 -1
- data/spec/grammar/xstr_spec.rb +1 -1
- data/spec/grammar/yield_spec.rb +1 -1
- data/spec/spec_helper.rb +6 -1
- data/test/core/array/minus_spec.rb +13 -0
- data/test/core/enumerable/drop_while_spec.rb +0 -5
- data/test/core/range/case_compare_spec.rb +0 -1
- data/test/index.html +1 -1
- data/test/index.min.html +12 -0
- data/test/language/alias_spec.rb +0 -4
- data/test/language/fixtures/next.rb +62 -0
- data/test/language/metaclass_spec.rb +4 -4
- data/test/language/next_spec.rb +0 -63
- data/test/language/send_spec.rb +0 -5
- data/test/language/singleton_class_spec.rb +4 -0
- data/test/opal/array/subclassing_spec.rb +1 -1
- data/test/opal/class/bridge_class_spec.rb +2 -2
- data/test/opal/runtime/class_hierarchy_spec.rb +1 -2
- data/test/opal/runtime/method_missing_spec.rb +17 -0
- data/test/spec_helper.rb +4 -1
- metadata +32 -28
- data/docs/CNAME +0 -1
- data/docs/Rakefile +0 -55
- data/docs/css/styles.css +0 -50
- data/docs/css/syntax.css +0 -63
- data/docs/layout/post.html +0 -3
- data/docs/layout/pre.html +0 -11
- data/examples/dependencies/.gitignore +0 -1
- data/examples/dependencies/Gemfile +0 -6
- data/examples/dependencies/README.md +0 -41
- data/examples/dependencies/Rakefile +0 -10
- data/examples/dependencies/app.rb +0 -19
- data/examples/dependencies/build/.gitkeep +0 -0
- data/examples/dependencies/index.html +0 -13
- data/examples/hello_world/.gitignore +0 -1
- data/examples/hello_world/Gemfile +0 -3
- data/examples/hello_world/README.md +0 -27
- data/examples/hello_world/Rakefile +0 -23
- data/examples/hello_world/app.rb +0 -7
- data/examples/hello_world/index.html +0 -12
- data/lib/opal/builder_task.rb +0 -91
- data/spec/builder/build_order_spec.rb +0 -20
- data/test/opal/runtime/_methods_spec.rb +0 -48
data/core/error.rb
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
class Exception < `Error`
|
|
2
2
|
attr_reader :message
|
|
3
3
|
|
|
4
|
-
def
|
|
5
|
-
|
|
4
|
+
def self.new(message = '')
|
|
5
|
+
%x{
|
|
6
|
+
var err = new Error(message);
|
|
7
|
+
err.$m = #{self}.$m_tbl;
|
|
8
|
+
err.$k = #{self};
|
|
9
|
+
return err;
|
|
10
|
+
}
|
|
6
11
|
end
|
|
7
12
|
|
|
8
13
|
def backtrace
|
|
9
14
|
%x{
|
|
10
|
-
var backtrace =
|
|
15
|
+
var backtrace = #{self}.stack;
|
|
11
16
|
|
|
12
17
|
if (typeof(backtrace) === 'string') {
|
|
13
18
|
return backtrace.split("\\n");
|
|
@@ -21,7 +26,7 @@ class Exception < `Error`
|
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
def inspect
|
|
24
|
-
"#<#{self.class}: '
|
|
29
|
+
"#<#{self.class.name}: '#@message'>"
|
|
25
30
|
end
|
|
26
31
|
|
|
27
32
|
alias to_s message
|
data/core/file.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
class File
|
|
2
|
+
# Regexp to split path into dirname, basename and extname
|
|
3
|
+
PATH_RE = /^(.+\/(?!$)|\/)?((?:.+?)?(\.[^.]*)?)$/
|
|
4
|
+
|
|
5
|
+
def self.expand_path(path, base = undefined)
|
|
6
|
+
%x{
|
|
7
|
+
if (!base) {
|
|
8
|
+
base = '';
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
path = #{ join(base, path) };
|
|
12
|
+
|
|
13
|
+
var parts = path.split('/'), result = [], path;
|
|
14
|
+
|
|
15
|
+
for (var i = 0, ii = parts.length; i < ii; i++) {
|
|
16
|
+
part = parts[i];
|
|
17
|
+
|
|
18
|
+
if (part === '..') {
|
|
19
|
+
result.pop();
|
|
20
|
+
}
|
|
21
|
+
else if (part === '.' || part === '') {
|
|
22
|
+
// ignore?
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
result.push(part);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return result.join('/');
|
|
30
|
+
}
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.join(*paths)
|
|
34
|
+
%x{
|
|
35
|
+
var result = [];
|
|
36
|
+
|
|
37
|
+
for (var i = 0, length = paths.length; i < length; i++) {
|
|
38
|
+
var part = paths[i];
|
|
39
|
+
|
|
40
|
+
if (part != '') {
|
|
41
|
+
result.push(part);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return result.join('/');
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.dirname(path)
|
|
50
|
+
%x{
|
|
51
|
+
var dirname = #{PATH_RE}.exec(path)[1];
|
|
52
|
+
|
|
53
|
+
if (!dirname) {
|
|
54
|
+
return '.';
|
|
55
|
+
}
|
|
56
|
+
else if (dirname === '/') {
|
|
57
|
+
return dirname;
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
return dirname.substring(0, dirname.length - 1);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def self.extname(path)
|
|
66
|
+
%x{
|
|
67
|
+
var extname = #{PATH_RE}.exec(path)[3];
|
|
68
|
+
|
|
69
|
+
if (!extname || extname === '.') {
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
return extname;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def self.basename(path, suffix)
|
|
79
|
+
""
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def self.exist?(path)
|
|
83
|
+
`!!factories[#{ expand_path path }]`
|
|
84
|
+
end
|
|
85
|
+
end
|
data/core/hash.rb
CHANGED
|
@@ -45,7 +45,7 @@ class Hash
|
|
|
45
45
|
|
|
46
46
|
def ==(other)
|
|
47
47
|
%x{
|
|
48
|
-
if (
|
|
48
|
+
if (#{self} === other) {
|
|
49
49
|
return true;
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -53,7 +53,7 @@ class Hash
|
|
|
53
53
|
return false;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
var map =
|
|
56
|
+
var map = #{self}.map,
|
|
57
57
|
map2 = other.map;
|
|
58
58
|
|
|
59
59
|
for (var assoc in map) {
|
|
@@ -77,17 +77,17 @@ class Hash
|
|
|
77
77
|
%x{
|
|
78
78
|
var bucket;
|
|
79
79
|
|
|
80
|
-
if (bucket =
|
|
80
|
+
if (bucket = #{self}.map[key]) {
|
|
81
81
|
return bucket[1];
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
return
|
|
84
|
+
return #{self}.none;
|
|
85
85
|
}
|
|
86
86
|
end
|
|
87
87
|
|
|
88
88
|
def []=(key, value)
|
|
89
89
|
%x{
|
|
90
|
-
|
|
90
|
+
#{self}.map[key] = [key, value];
|
|
91
91
|
|
|
92
92
|
return value;
|
|
93
93
|
}
|
|
@@ -95,8 +95,8 @@ class Hash
|
|
|
95
95
|
|
|
96
96
|
def assoc(object)
|
|
97
97
|
%x{
|
|
98
|
-
for (var assoc in
|
|
99
|
-
var bucket =
|
|
98
|
+
for (var assoc in #{self}.map) {
|
|
99
|
+
var bucket = #{self}.map[assoc];
|
|
100
100
|
|
|
101
101
|
if (#{`bucket[0]` == `object`}) {
|
|
102
102
|
return [bucket[0], bucket[1]];
|
|
@@ -109,16 +109,16 @@ class Hash
|
|
|
109
109
|
|
|
110
110
|
def clear
|
|
111
111
|
%x{
|
|
112
|
-
|
|
112
|
+
#{self}.map = {};
|
|
113
113
|
|
|
114
|
-
return
|
|
114
|
+
return #{self};
|
|
115
115
|
}
|
|
116
116
|
end
|
|
117
117
|
|
|
118
118
|
def clone
|
|
119
119
|
%x{
|
|
120
120
|
var result = __hash(),
|
|
121
|
-
map =
|
|
121
|
+
map = #{self}.map,
|
|
122
122
|
map2 = result.map;
|
|
123
123
|
|
|
124
124
|
for (var assoc in map) {
|
|
@@ -130,24 +130,24 @@ class Hash
|
|
|
130
130
|
end
|
|
131
131
|
|
|
132
132
|
def default
|
|
133
|
-
|
|
133
|
+
`#{self}.none`
|
|
134
134
|
end
|
|
135
135
|
|
|
136
136
|
def default=(object)
|
|
137
|
-
|
|
137
|
+
`#{self}.none = object`
|
|
138
138
|
end
|
|
139
139
|
|
|
140
140
|
def default_proc
|
|
141
|
-
|
|
141
|
+
`#{self}.proc`
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
def default_proc=(proc)
|
|
145
|
-
|
|
145
|
+
`#{self}.proc = proc`
|
|
146
146
|
end
|
|
147
147
|
|
|
148
148
|
def delete(key)
|
|
149
149
|
%x{
|
|
150
|
-
var map =
|
|
150
|
+
var map = #{self}.map, result;
|
|
151
151
|
|
|
152
152
|
if (result = map[key]) {
|
|
153
153
|
result = bucket[1];
|
|
@@ -163,13 +163,13 @@ class Hash
|
|
|
163
163
|
return enum_for :delete_if unless block_given?
|
|
164
164
|
|
|
165
165
|
%x{
|
|
166
|
-
var map =
|
|
166
|
+
var map = #{self}.map;
|
|
167
167
|
|
|
168
168
|
for (var assoc in map) {
|
|
169
169
|
var bucket = map[assoc],
|
|
170
170
|
value;
|
|
171
171
|
|
|
172
|
-
if ((value = block
|
|
172
|
+
if ((value = block(__context, bucket[0], bucket[1])) === __breaker) {
|
|
173
173
|
return __breaker.$v;
|
|
174
174
|
}
|
|
175
175
|
|
|
@@ -178,7 +178,7 @@ class Hash
|
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
|
|
181
|
-
return
|
|
181
|
+
return #{self};
|
|
182
182
|
}
|
|
183
183
|
end
|
|
184
184
|
|
|
@@ -188,17 +188,17 @@ class Hash
|
|
|
188
188
|
return enum_for :each unless block_given?
|
|
189
189
|
|
|
190
190
|
%x{
|
|
191
|
-
var map =
|
|
191
|
+
var map = #{self}.map;
|
|
192
192
|
|
|
193
193
|
for (var assoc in map) {
|
|
194
194
|
var bucket = map[assoc];
|
|
195
195
|
|
|
196
|
-
if (block
|
|
196
|
+
if (block(__context, bucket[0], bucket[1]) === __breaker) {
|
|
197
197
|
return __breaker.$v;
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
-
return
|
|
201
|
+
return #{self};
|
|
202
202
|
}
|
|
203
203
|
end
|
|
204
204
|
|
|
@@ -206,17 +206,17 @@ class Hash
|
|
|
206
206
|
return enum_for :each_key unless block_given?
|
|
207
207
|
|
|
208
208
|
%x{
|
|
209
|
-
var map =
|
|
209
|
+
var map = #{self}.map;
|
|
210
210
|
|
|
211
211
|
for (var assoc in map) {
|
|
212
212
|
var bucket = map[assoc];
|
|
213
213
|
|
|
214
|
-
if (block
|
|
214
|
+
if (block(__context, bucket[0]) === __breaker) {
|
|
215
215
|
return __breaker.$v;
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
|
|
219
|
-
return
|
|
219
|
+
return #{self};
|
|
220
220
|
}
|
|
221
221
|
end
|
|
222
222
|
|
|
@@ -226,23 +226,23 @@ class Hash
|
|
|
226
226
|
return enum_for :each_value unless block_given?
|
|
227
227
|
|
|
228
228
|
%x{
|
|
229
|
-
var map =
|
|
229
|
+
var map = #{self}.map;
|
|
230
230
|
|
|
231
231
|
for (var assoc in map) {
|
|
232
232
|
var bucket = map[assoc];
|
|
233
233
|
|
|
234
|
-
if (block
|
|
234
|
+
if (block(__context, bucket[1]) === __breaker) {
|
|
235
235
|
return __breaker.$v;
|
|
236
236
|
}
|
|
237
237
|
}
|
|
238
238
|
|
|
239
|
-
return
|
|
239
|
+
return #{self};
|
|
240
240
|
}
|
|
241
241
|
end
|
|
242
242
|
|
|
243
243
|
def empty?
|
|
244
244
|
%x{
|
|
245
|
-
for (var assoc in
|
|
245
|
+
for (var assoc in #{self}.map) {
|
|
246
246
|
return false;
|
|
247
247
|
}
|
|
248
248
|
|
|
@@ -254,7 +254,7 @@ class Hash
|
|
|
254
254
|
|
|
255
255
|
def fetch(key, defaults, &block)
|
|
256
256
|
%x{
|
|
257
|
-
var bucket =
|
|
257
|
+
var bucket = #{self}.map[key];
|
|
258
258
|
|
|
259
259
|
if (bucket) {
|
|
260
260
|
return bucket[1];
|
|
@@ -263,7 +263,7 @@ class Hash
|
|
|
263
263
|
if (block !== nil) {
|
|
264
264
|
var value;
|
|
265
265
|
|
|
266
|
-
if ((value = block
|
|
266
|
+
if ((value = block(__context, key)) === __breaker) {
|
|
267
267
|
return __breaker.$v;
|
|
268
268
|
}
|
|
269
269
|
|
|
@@ -280,7 +280,7 @@ class Hash
|
|
|
280
280
|
|
|
281
281
|
def flatten(level)
|
|
282
282
|
%x{
|
|
283
|
-
var map =
|
|
283
|
+
var map = #{self}.map,
|
|
284
284
|
result = [];
|
|
285
285
|
|
|
286
286
|
for (var assoc in map) {
|
|
@@ -308,13 +308,13 @@ class Hash
|
|
|
308
308
|
end
|
|
309
309
|
|
|
310
310
|
def has_key?(key)
|
|
311
|
-
|
|
311
|
+
`!!#{self}.map[key]`
|
|
312
312
|
end
|
|
313
313
|
|
|
314
314
|
def has_value?(value)
|
|
315
315
|
%x{
|
|
316
|
-
for (var assoc in
|
|
317
|
-
if (#{
|
|
316
|
+
for (var assoc in #{self}.map) {
|
|
317
|
+
if (#{`#{self}.map[assoc][1]` == value}) {
|
|
318
318
|
return true;
|
|
319
319
|
}
|
|
320
320
|
}
|
|
@@ -324,15 +324,15 @@ class Hash
|
|
|
324
324
|
end
|
|
325
325
|
|
|
326
326
|
def hash
|
|
327
|
-
|
|
327
|
+
`#{self}._id`
|
|
328
328
|
end
|
|
329
329
|
|
|
330
330
|
alias include? has_key?
|
|
331
331
|
|
|
332
332
|
def index(object)
|
|
333
333
|
%x{
|
|
334
|
-
for (var assoc in
|
|
335
|
-
var bucket =
|
|
334
|
+
for (var assoc in #{self}.map) {
|
|
335
|
+
var bucket = #{self}.map[assoc];
|
|
336
336
|
|
|
337
337
|
if (#{object == `bucket[1]`}) {
|
|
338
338
|
return bucket[0];
|
|
@@ -345,7 +345,7 @@ class Hash
|
|
|
345
345
|
|
|
346
346
|
def indexes(*keys)
|
|
347
347
|
%x{
|
|
348
|
-
var result = [], map =
|
|
348
|
+
var result = [], map = #{self}.map, bucket;
|
|
349
349
|
|
|
350
350
|
for (var i = 0, length = keys.length; i < length; i++) {
|
|
351
351
|
var key = keys[i];
|
|
@@ -354,7 +354,7 @@ class Hash
|
|
|
354
354
|
result.push(bucket[1]);
|
|
355
355
|
}
|
|
356
356
|
else {
|
|
357
|
-
result.push(
|
|
357
|
+
result.push(#{self}.none);
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
360
|
|
|
@@ -367,7 +367,7 @@ class Hash
|
|
|
367
367
|
def inspect
|
|
368
368
|
%x{
|
|
369
369
|
var inspect = [],
|
|
370
|
-
map =
|
|
370
|
+
map = #{self}.map;
|
|
371
371
|
|
|
372
372
|
for (var assoc in map) {
|
|
373
373
|
var bucket = map[assoc];
|
|
@@ -381,7 +381,7 @@ class Hash
|
|
|
381
381
|
def invert
|
|
382
382
|
%x{
|
|
383
383
|
var result = __hash(),
|
|
384
|
-
map =
|
|
384
|
+
map = #{self}.map,
|
|
385
385
|
map2 = result.map;
|
|
386
386
|
|
|
387
387
|
for (var assoc in map) {
|
|
@@ -398,12 +398,12 @@ class Hash
|
|
|
398
398
|
return enum_for :keep_if unless block_given?
|
|
399
399
|
|
|
400
400
|
%x{
|
|
401
|
-
var map =
|
|
401
|
+
var map = #{self}.map, value;
|
|
402
402
|
|
|
403
403
|
for (var assoc in map) {
|
|
404
404
|
var bucket = map[assoc];
|
|
405
405
|
|
|
406
|
-
if ((value = block
|
|
406
|
+
if ((value = block(__context, bucket[0], bucket[1])) === __breaker) {
|
|
407
407
|
return __breaker.$v;
|
|
408
408
|
}
|
|
409
409
|
|
|
@@ -412,7 +412,7 @@ class Hash
|
|
|
412
412
|
}
|
|
413
413
|
}
|
|
414
414
|
|
|
415
|
-
return
|
|
415
|
+
return #{self};
|
|
416
416
|
}
|
|
417
417
|
end
|
|
418
418
|
|
|
@@ -424,8 +424,8 @@ class Hash
|
|
|
424
424
|
%x{
|
|
425
425
|
var result = [];
|
|
426
426
|
|
|
427
|
-
for (var assoc in
|
|
428
|
-
result.push(
|
|
427
|
+
for (var assoc in #{self}.map) {
|
|
428
|
+
result.push(#{self}.map[assoc][0]);
|
|
429
429
|
}
|
|
430
430
|
|
|
431
431
|
return result;
|
|
@@ -436,7 +436,7 @@ class Hash
|
|
|
436
436
|
%x{
|
|
437
437
|
var result = 0;
|
|
438
438
|
|
|
439
|
-
for (var assoc in
|
|
439
|
+
for (var assoc in #{self}.map) {
|
|
440
440
|
result++;
|
|
441
441
|
}
|
|
442
442
|
|
|
@@ -449,7 +449,7 @@ class Hash
|
|
|
449
449
|
def merge(other, &block)
|
|
450
450
|
%x{
|
|
451
451
|
var result = __hash(),
|
|
452
|
-
map =
|
|
452
|
+
map = #{self}.map,
|
|
453
453
|
map2 = result.map;
|
|
454
454
|
|
|
455
455
|
for (var assoc in map) {
|
|
@@ -472,7 +472,7 @@ class Hash
|
|
|
472
472
|
var bucket = map[assoc], key = bucket[0], val = bucket[1];
|
|
473
473
|
|
|
474
474
|
if (__hasOwn.call(map2, assoc)) {
|
|
475
|
-
val = block
|
|
475
|
+
val = block(__context, key, map2[assoc][1], val);
|
|
476
476
|
}
|
|
477
477
|
|
|
478
478
|
map2[assoc] = [key, val];
|
|
@@ -485,7 +485,7 @@ class Hash
|
|
|
485
485
|
|
|
486
486
|
def merge!(other, &block)
|
|
487
487
|
%x{
|
|
488
|
-
var map =
|
|
488
|
+
var map = #{self}.map,
|
|
489
489
|
map2 = other.map;
|
|
490
490
|
|
|
491
491
|
if (block === nil) {
|
|
@@ -500,20 +500,20 @@ class Hash
|
|
|
500
500
|
var bucket = map2[assoc], key = bucket[0], val = bucket[1];
|
|
501
501
|
|
|
502
502
|
if (__hasOwn.call(map, assoc)) {
|
|
503
|
-
val = block
|
|
503
|
+
val = block(__context, key, map[assoc][1], val);
|
|
504
504
|
}
|
|
505
505
|
|
|
506
506
|
map[assoc] = [key, val];
|
|
507
507
|
}
|
|
508
508
|
}
|
|
509
509
|
|
|
510
|
-
return
|
|
510
|
+
return #{self};
|
|
511
511
|
}
|
|
512
512
|
end
|
|
513
513
|
|
|
514
514
|
def rassoc(object)
|
|
515
515
|
%x{
|
|
516
|
-
var map =
|
|
516
|
+
var map = #{self}.map;
|
|
517
517
|
|
|
518
518
|
for (var assoc in map) {
|
|
519
519
|
var bucket = map[assoc];
|
|
@@ -531,13 +531,13 @@ class Hash
|
|
|
531
531
|
return enum_for :reject unless block_given?
|
|
532
532
|
|
|
533
533
|
%x{
|
|
534
|
-
var map =
|
|
534
|
+
var map = #{self}.map, result = __hash(), map2 = result.map;
|
|
535
535
|
|
|
536
536
|
for (var assoc in map) {
|
|
537
537
|
var bucket = map[assoc],
|
|
538
538
|
value;
|
|
539
539
|
|
|
540
|
-
if ((value = block
|
|
540
|
+
if ((value = block(__context, bucket[0], bucket[1])) === __breaker) {
|
|
541
541
|
return __breaker.$v;
|
|
542
542
|
}
|
|
543
543
|
|
|
@@ -552,7 +552,7 @@ class Hash
|
|
|
552
552
|
|
|
553
553
|
def replace(other)
|
|
554
554
|
%x{
|
|
555
|
-
var map =
|
|
555
|
+
var map = #{self}.map = {};
|
|
556
556
|
|
|
557
557
|
for (var assoc in other.map) {
|
|
558
558
|
var bucket = other.map[assoc];
|
|
@@ -560,7 +560,7 @@ class Hash
|
|
|
560
560
|
map[bucket[0]] = [bucket[0], bucket[1]];
|
|
561
561
|
}
|
|
562
562
|
|
|
563
|
-
return
|
|
563
|
+
return #{self};
|
|
564
564
|
}
|
|
565
565
|
end
|
|
566
566
|
|
|
@@ -568,13 +568,13 @@ class Hash
|
|
|
568
568
|
return enum_for :select unless block_given?
|
|
569
569
|
|
|
570
570
|
%x{
|
|
571
|
-
var map =
|
|
571
|
+
var map = #{self}.map, result = __hash(), map2 = result.map;
|
|
572
572
|
|
|
573
573
|
for (var assoc in map) {
|
|
574
574
|
var bucket = map[assoc],
|
|
575
575
|
value;
|
|
576
576
|
|
|
577
|
-
if ((value = block
|
|
577
|
+
if ((value = block(__context, bucket[0], bucket[1])) === __breaker) {
|
|
578
578
|
return __breaker.$v;
|
|
579
579
|
}
|
|
580
580
|
|
|
@@ -591,19 +591,19 @@ class Hash
|
|
|
591
591
|
return enum_for :select! unless block_given?
|
|
592
592
|
|
|
593
593
|
%x{
|
|
594
|
-
var map =
|
|
594
|
+
var map = #{self}.map, result = nil;
|
|
595
595
|
|
|
596
596
|
for (var assoc in map) {
|
|
597
597
|
var bucket = map[assoc],
|
|
598
598
|
value;
|
|
599
599
|
|
|
600
|
-
if ((value = block
|
|
600
|
+
if ((value = block(__context, bucket[0], bucket[1])) === __breaker) {
|
|
601
601
|
return __breaker.$v;
|
|
602
602
|
}
|
|
603
603
|
|
|
604
604
|
if (value === false || value === nil) {
|
|
605
605
|
delete map[assoc];
|
|
606
|
-
result =
|
|
606
|
+
result = #{self};
|
|
607
607
|
}
|
|
608
608
|
}
|
|
609
609
|
|
|
@@ -613,7 +613,7 @@ class Hash
|
|
|
613
613
|
|
|
614
614
|
def shift
|
|
615
615
|
%x{
|
|
616
|
-
var map =
|
|
616
|
+
var map = #{self}.map;
|
|
617
617
|
|
|
618
618
|
for (var assoc in map) {
|
|
619
619
|
var bucket = map[assoc];
|
|
@@ -629,7 +629,7 @@ class Hash
|
|
|
629
629
|
|
|
630
630
|
def to_a
|
|
631
631
|
%x{
|
|
632
|
-
var map =
|
|
632
|
+
var map = #{self}.map,
|
|
633
633
|
result = [];
|
|
634
634
|
|
|
635
635
|
for (var assoc in map) {
|
|
@@ -648,7 +648,7 @@ class Hash
|
|
|
648
648
|
|
|
649
649
|
def to_json
|
|
650
650
|
%x{
|
|
651
|
-
var parts = [], map =
|
|
651
|
+
var parts = [], map = #{self}.map, bucket;
|
|
652
652
|
|
|
653
653
|
for (var assoc in map) {
|
|
654
654
|
bucket = map[assoc];
|
|
@@ -665,7 +665,7 @@ class Hash
|
|
|
665
665
|
|
|
666
666
|
def value?(value)
|
|
667
667
|
%x{
|
|
668
|
-
var map =
|
|
668
|
+
var map = #{self}.map;
|
|
669
669
|
|
|
670
670
|
for (var assoc in map) {
|
|
671
671
|
var v = map[assoc][1];
|
|
@@ -682,7 +682,7 @@ class Hash
|
|
|
682
682
|
|
|
683
683
|
def values
|
|
684
684
|
%x{
|
|
685
|
-
var map =
|
|
685
|
+
var map = #{self}.map,
|
|
686
686
|
result = [];
|
|
687
687
|
|
|
688
688
|
for (var assoc in map) {
|