opal 0.3.6 → 0.3.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. data/README.md +69 -97
  2. data/bin/opal +2 -2
  3. data/{lib/core → corelib}/array.rb +85 -56
  4. data/corelib/boolean.rb +20 -0
  5. data/corelib/class.rb +58 -0
  6. data/{lib → corelib}/core.rb +2 -50
  7. data/corelib/dir.rb +22 -0
  8. data/{lib/core → corelib}/enumerable.rb +0 -0
  9. data/corelib/error.rb +19 -0
  10. data/{lib/core → corelib}/file.rb +7 -9
  11. data/{lib/core → corelib}/hash.rb +104 -144
  12. data/{lib/core → corelib}/kernel.rb +38 -44
  13. data/corelib/load_order +21 -0
  14. data/{lib/core → corelib}/match_data.rb +0 -0
  15. data/{lib/core → corelib}/module.rb +12 -8
  16. data/{lib/core → corelib}/nil_class.rb +2 -2
  17. data/{lib/core → corelib}/numeric.rb +37 -100
  18. data/corelib/object.rb +37 -0
  19. data/{lib/core → corelib}/proc.rb +3 -3
  20. data/corelib/range.rb +27 -0
  21. data/{lib/core → corelib}/regexp.rb +1 -1
  22. data/{lib/core → corelib}/string.rb +16 -107
  23. data/{lib/core → corelib}/top_self.rb +0 -0
  24. data/lib/opal.rb +7 -0
  25. data/lib/opal/browserify.rb +34 -0
  26. data/{opal_lib → lib}/opal/builder.rb +70 -24
  27. data/lib/opal/command.rb +52 -0
  28. data/lib/opal/context.rb +197 -0
  29. data/{opal_lib/opal/ruby/parser.rb → lib/opal/lexer.rb} +20 -4
  30. data/{opal_lib/opal/ruby → lib/opal}/nodes.rb +238 -127
  31. data/lib/opal/parser.rb +4894 -0
  32. data/{opal_lib/opal/ruby/ruby_parser.y → lib/opal/parser.y} +38 -18
  33. data/lib/rbp.rb +2 -0
  34. data/lib/rbp/package.rb +49 -0
  35. data/runtime/class.js +216 -189
  36. data/runtime/fs.js +2 -2
  37. data/runtime/init.js +242 -244
  38. data/runtime/loader.js +78 -99
  39. data/runtime/module.js +34 -40
  40. data/runtime/post.js +2 -2
  41. data/runtime/pre.js +1 -1
  42. data/runtime/runtime.js +129 -135
  43. data/{lib → stdlib}/dev.rb +10 -10
  44. data/{lib → stdlib}/racc/parser.rb +0 -6
  45. data/{lib → stdlib}/strscan.rb +4 -4
  46. metadata +57 -105
  47. data/lib/core/basic_object.rb +0 -51
  48. data/lib/core/class.rb +0 -38
  49. data/lib/core/dir.rb +0 -26
  50. data/lib/core/error.rb +0 -75
  51. data/lib/core/false_class.rb +0 -81
  52. data/lib/core/object.rb +0 -6
  53. data/lib/core/range.rb +0 -27
  54. data/lib/core/symbol.rb +0 -42
  55. data/lib/core/true_class.rb +0 -41
  56. data/lib/ospec.rb +0 -7
  57. data/lib/ospec/autorun.rb +0 -8
  58. data/lib/ospec/dsl.rb +0 -15
  59. data/lib/ospec/example.rb +0 -11
  60. data/lib/ospec/example/before_and_after_hooks.rb +0 -56
  61. data/lib/ospec/example/errors.rb +0 -17
  62. data/lib/ospec/example/example_group.rb +0 -12
  63. data/lib/ospec/example/example_group_factory.rb +0 -18
  64. data/lib/ospec/example/example_group_hierarchy.rb +0 -21
  65. data/lib/ospec/example/example_group_methods.rb +0 -100
  66. data/lib/ospec/example/example_group_proxy.rb +0 -15
  67. data/lib/ospec/example/example_methods.rb +0 -46
  68. data/lib/ospec/example/example_proxy.rb +0 -18
  69. data/lib/ospec/expectations.rb +0 -19
  70. data/lib/ospec/expectations/errors.rb +0 -8
  71. data/lib/ospec/expectations/fail_with.rb +0 -9
  72. data/lib/ospec/expectations/handler.rb +0 -33
  73. data/lib/ospec/helpers/scratch.rb +0 -18
  74. data/lib/ospec/matchers.rb +0 -24
  75. data/lib/ospec/matchers/be.rb +0 -1
  76. data/lib/ospec/matchers/generated_descriptions.rb +0 -20
  77. data/lib/ospec/matchers/operator_matcher.rb +0 -54
  78. data/lib/ospec/matchers/raise_error.rb +0 -38
  79. data/lib/ospec/runner.rb +0 -90
  80. data/lib/ospec/runner/example_group_runner.rb +0 -41
  81. data/lib/ospec/runner/formatter/html_formatter.rb +0 -139
  82. data/lib/ospec/runner/formatter/terminal_formatter.rb +0 -48
  83. data/lib/ospec/runner/options.rb +0 -34
  84. data/lib/ospec/runner/reporter.rb +0 -82
  85. data/opal_lib/opal.rb +0 -16
  86. data/opal_lib/opal/build_methods.rb +0 -51
  87. data/opal_lib/opal/bundle.rb +0 -70
  88. data/opal_lib/opal/command.rb +0 -68
  89. data/opal_lib/opal/context.rb +0 -81
  90. data/opal_lib/opal/context/console.rb +0 -10
  91. data/opal_lib/opal/context/file_system.rb +0 -34
  92. data/opal_lib/opal/context/loader.rb +0 -135
  93. data/opal_lib/opal/gem.rb +0 -84
  94. data/opal_lib/opal/rake/builder_task.rb +0 -44
  95. data/opal_lib/opal/rake/spec_task.rb +0 -32
  96. data/opal_lib/opal/ruby/ruby_parser.rb +0 -4862
  97. data/opal_lib/opal/version.rb +0 -4
  98. data/runtime/debug.js +0 -84
@@ -0,0 +1,20 @@
1
+ class Boolean
2
+
3
+ def to_s
4
+ # Yeah, this is another one for the wtf? collection. As the receiver
5
+ # is a true or false literal, it is coerced into a Boolean object,
6
+ # therefore it is always truthy. Therefore we comapre ourself with
7
+ # true to see if we are actually true or false. We could instead do
8
+ # `return self.valueOf() ? "true" : "false", but this way seems a
9
+ # little faster..
10
+ `return self == true ? "true" : "false";`
11
+ end
12
+
13
+ def ==(other)
14
+ `return self.valueOf() === other.valueOf();`
15
+ end
16
+ end
17
+
18
+ TRUE = true
19
+ FALSE = false
20
+
data/corelib/class.rb ADDED
@@ -0,0 +1,58 @@
1
+ class Class < Module
2
+
3
+ def self.new(sup = Object)
4
+ `var res = rb_define_class_id('AnonClass', sup);
5
+
6
+ if (sup.m$inherited) {
7
+ sup.m$inherited(res);
8
+ }
9
+
10
+ return res;`
11
+ end
12
+
13
+ def allocate
14
+ `return new self.$a();`
15
+ end
16
+
17
+ def new(*args)
18
+ obj = allocate
19
+
20
+ `if ($B.f == arguments.callee) {
21
+ $B.f = obj.$m.initialize;
22
+ }`
23
+
24
+ obj.initialize *args
25
+ obj
26
+ end
27
+
28
+ def inherited(cls)
29
+ nil
30
+ end
31
+
32
+ def superclass
33
+ `var sup = self.$s;
34
+
35
+ if (!sup) {
36
+ if (self == rb_cObject) return nil;
37
+ throw new Error('RuntimeError: uninitialized class');
38
+ }
39
+
40
+ return sup;`
41
+ end
42
+
43
+ def native_prototype(proto)
44
+ `rb_native_prototype(self, proto);`
45
+ self
46
+ end
47
+
48
+ # Make the given object an instance of this class. This takes
49
+ # an **existing** object and adds the correct class, method
50
+ # table and id to the receiver.
51
+ #
52
+ # @param [NativeJSObject] obj
53
+ # @return [instance]
54
+ def from_native(obj)
55
+ `return rb_obj_from_native(obj, self);`
56
+ end
57
+ end
58
+
@@ -1,15 +1,5 @@
1
1
  class Module
2
2
 
3
- def private(*args)
4
- `$rb.private_methods(self, args);`
5
- self
6
- end
7
-
8
- def public(*args)
9
- `$rb.public_methods(self, args);`
10
- self
11
- end
12
-
13
3
  def include(*mods)
14
4
  `var i = mods.length - 1, mod;
15
5
  while (i >= 0) {
@@ -22,7 +12,7 @@ class Module
22
12
  end
23
13
 
24
14
  def append_features(mod)
25
- `$rb.include_module(mod, self);`
15
+ `rb_include_module(mod, self);`
26
16
  self
27
17
  end
28
18
 
@@ -32,7 +22,6 @@ class Module
32
22
  end
33
23
 
34
24
  module Kernel
35
- private
36
25
 
37
26
  # Try to load the library or file named `path`. An error is thrown if the
38
27
  # path cannot be resolved.
@@ -40,8 +29,7 @@ module Kernel
40
29
  # @param [String] path The path to load
41
30
  # @return [true, false]
42
31
  def require(path)
43
- `$rb.require(path) ? Qtrue : Qfalse;`
44
- true
32
+ `return rb_require(path);`
45
33
  end
46
34
 
47
35
  # Prints the message to `STDOUT`.
@@ -70,45 +58,9 @@ class Object
70
58
  include Kernel
71
59
  end
72
60
 
73
- class Symbol
74
- def to_s
75
- `return self.toString();`
76
- end
77
- end
78
-
79
61
  class String
80
62
  def to_s
81
63
  `return self.toString();`
82
64
  end
83
65
  end
84
66
 
85
- require 'core/basic_object'
86
- require 'core/object'
87
- require 'core/module'
88
- require 'core/class'
89
- require 'core/kernel'
90
- require 'core/top_self'
91
- require 'core/nil_class'
92
- require 'core/true_class'
93
- require 'core/false_class'
94
- require 'core/enumerable'
95
- require 'core/array'
96
- require 'core/numeric'
97
- require 'core/hash'
98
- require 'core/error'
99
- require 'core/string'
100
- require 'core/symbol'
101
- require 'core/proc'
102
- require 'core/range'
103
- require 'core/regexp'
104
- require 'core/match_data'
105
- require 'core/file'
106
- require 'core/dir'
107
-
108
- `var platform = opal.platform;`
109
- RUBY_PLATFORM = `platform.platform`
110
- RUBY_ENGINE = `platform.engine`
111
- RUBY_VERSION = `platform.version`
112
-
113
- ARGV = `platform.argv`
114
-
data/corelib/dir.rb ADDED
@@ -0,0 +1,22 @@
1
+
2
+ class Dir
3
+
4
+ # Returns a string that is the current working directory for this process.
5
+ #
6
+ # @return [String]
7
+ def self.getwd
8
+ `return Op.fs.cwd;`
9
+ end
10
+
11
+ # Returns a string that is the current working directory for this process.
12
+ #
13
+ # @return [String]
14
+ def self.pwd
15
+ `return Op.fs.cwd;`
16
+ end
17
+
18
+ def self.[](*a)
19
+ `return Op.fs.glob.apply(Op.fs, a);`
20
+ end
21
+ end
22
+
File without changes
data/corelib/error.rb ADDED
@@ -0,0 +1,19 @@
1
+ class Exception
2
+
3
+ def initialize(message = '')
4
+ @message = message
5
+ end
6
+
7
+ def message
8
+ @message
9
+ end
10
+
11
+ def inspect
12
+ `return "#<" + self.$k.__classid__ + ": '" + #{message} + "'>";`
13
+ end
14
+
15
+ def to_s
16
+ message
17
+ end
18
+ end
19
+
@@ -1,7 +1,5 @@
1
1
 
2
2
  class File
3
- # Use either the browser fs namespace or overriden gem interface.
4
- `var OPAL_FS = $rb.opal.fs;`
5
3
 
6
4
  # Converts the given `file_name` into its absolute path. The current working
7
5
  # directory is used as the reference unless the `dir_string` is given, in
@@ -12,9 +10,9 @@ class File
12
10
  # @return [String]
13
11
  def self.expand_path(file_name, dir_string = nil)
14
12
  if dir_string
15
- `return OPAL_FS.expand_path(file_name, dir_string);`
13
+ `return Op.fs.expand_path(file_name, dir_string);`
16
14
  else
17
- `return OPAL_FS.expand_path(file_name);`
15
+ `return Op.fs.expand_path(file_name);`
18
16
  end
19
17
  end
20
18
 
@@ -24,7 +22,7 @@ class File
24
22
  # @param [String] str
25
23
  # @return [String]
26
24
  def self.join(*str)
27
- `return OPAL_FS.join.apply(OPAL_FS, str);`
25
+ `return Op.fs.join.apply(Op.fs, str);`
28
26
  end
29
27
 
30
28
  # Returns all the components of the given `file_name` except for the last
@@ -33,7 +31,7 @@ class File
33
31
  # @param [String] file_name
34
32
  # @return [String]
35
33
  def self.dirname(file_name)
36
- `return OPAL_FS.dirname(file_name);`
34
+ `return Op.fs.dirname(file_name);`
37
35
  end
38
36
 
39
37
  # Returns the extension of the given filename.
@@ -41,7 +39,7 @@ class File
41
39
  # @param [String] file_name
42
40
  # @return [String]
43
41
  def self.extname(file_name)
44
- `return OPAL_FS.extname(file_name);`
42
+ `return Op.fs.extname(file_name);`
45
43
  end
46
44
 
47
45
  # Returns the last path component of the given `file_name`. If a suffix is
@@ -52,11 +50,11 @@ class File
52
50
  # @param [String] suffix
53
51
  # @return [String]
54
52
  def self.basename(file_name, suffix)
55
- `return OPAL_FS.basename(file_name, suffix);`
53
+ `return Op.fs.basename(file_name, suffix);`
56
54
  end
57
55
 
58
56
  def self.exist?(path)
59
- `return OPAL_FS.exist_p(path) ? Qtrue : Qfalse;`
57
+ `return Op.fs.exist_p(path);`
60
58
  end
61
59
  end
62
60
 
@@ -59,10 +59,10 @@ class Hash
59
59
  #
60
60
  # @return [Array]
61
61
  def values
62
- `var result = [], length = self.$keys.length;
62
+ `var result = [], length = self.k.length;
63
63
 
64
64
  for (var i = 0; i < length; i++) {
65
- result.push(self.$assocs[self.$keys[i].$hash()]);
65
+ result.push(self.a[self.k[i].$h()]);
66
66
  }
67
67
 
68
68
  return result;`
@@ -79,9 +79,9 @@ class Hash
79
79
  def inspect
80
80
  `var description = [], key, value;
81
81
 
82
- for (var i = 0; i < self.$keys.length; i++) {
83
- key = self.$keys[i];
84
- value = self.$assocs[key.$hash()];
82
+ for (var i = 0, ii = self.k.length; i < ii; i++) {
83
+ key = self.k[i];
84
+ value = self.a[key.$h()];
85
85
  description.push(#{`key`.inspect} + '=>' + #{`value`.inspect});
86
86
  }
87
87
 
@@ -94,9 +94,9 @@ class Hash
94
94
  def to_s
95
95
  `var description = [], key, value;
96
96
 
97
- for (var i = 0; i < self.$keys.length; i++) {
98
- key = self.$keys[i];
99
- value = self.$assocs[key.$hash()];
97
+ for (var i = 0, ii = self.k.length; i < ii; i++) {
98
+ key = self.k[i];
99
+ value = self.a[key.$h()];
100
100
  description.push(#{`key`.inspect} + #{`value`.inspect});
101
101
  }
102
102
 
@@ -114,20 +114,11 @@ class Hash
114
114
  #
115
115
  # @return [Hash] returns the receiver
116
116
  def each
117
- `var keys = self.$keys, values = self.$assocs, length = keys.length, key;
117
+ `var keys = self.k, values = self.a, length = keys.length, key;
118
118
 
119
119
  for (var i = 0; i < length; i++) {
120
- try {
121
- key = keys[i];
122
- #{yield `key`, `values[key.$hash()]`};
123
- } catch (e) {
124
- switch (e.$keyword) {
125
- case 2:
126
- return e['@exit_value'];
127
- default:
128
- throw e;
129
- }
130
- }
120
+ key = keys[i];
121
+ #{yield `key`, `values[key.$h()]`};
131
122
  }
132
123
 
133
124
  return self;`
@@ -147,12 +138,12 @@ class Hash
147
138
  # @param [Object] obj key to search for
148
139
  # @return [Array<Object, Object>, nil] result or nil
149
140
  def assoc(obj)
150
- `var key, keys = self.$keys, length = keys.length;
141
+ `var key, keys = self.k, length = keys.length;
151
142
 
152
143
  for (var i = 0; i < length; i++) {
153
144
  key = keys[i];
154
145
  if (#{`key` == obj}.$r) {
155
- return [key, self.$assocs[key.$hash()]];
146
+ return [key, self.a[key.$h()]];
156
147
  }
157
148
  }
158
149
 
@@ -177,23 +168,23 @@ class Hash
177
168
  # @param [Hash] other the hash to compare with
178
169
  # @return [true, false]
179
170
  def ==(other)
180
- `if (self === other) return Qtrue;
181
- if (!other.$keys || !other.$assocs) return Qfalse;
182
- if (self.$keys.length != other.$keys.length) return Qfalse;
171
+ `if (self === other) return true;
172
+ if (!other.k || !other.a) return false;
173
+ if (self.k.length != other.k.length) return false;
183
174
 
184
- for (var i = 0; i < self.$keys.length; i++) {
185
- var key1 = self.$keys[i], assoc1 = key1.$hash();
175
+ for (var i = 0; i < self.k.length; i++) {
176
+ var key1 = self.k[i], assoc1 = key1.$h();
186
177
 
187
- if (!other.$assocs.hasOwnProperty(assoc1))
188
- return Qfalse;
178
+ if (!hasOwnProperty.call(other.a, assoc1))
179
+ return false;
189
180
 
190
- var assoc2 = other.$assocs[assoc1];
181
+ var assoc2 = other.a[assoc1];
191
182
 
192
- if (!#{`self.$assocs[assoc1]` == `assoc2`}.$r)
193
- return Qfalse;
183
+ if (!#{`self.a[assoc1]` == `assoc2`}.$r)
184
+ return false;
194
185
  }
195
186
 
196
- return Qtrue;`
187
+ return true;`
197
188
  end
198
189
 
199
190
  # Element reference - retrieves the `value` object corresponding to the `key`
@@ -210,12 +201,12 @@ class Hash
210
201
  # @param [Object] key the key to look for
211
202
  # @return [Object] result or default value
212
203
  def [](key)
213
- `var assoc = key.$hash();
204
+ `var assoc = key.$h();
214
205
 
215
- if (self.$assocs.hasOwnProperty(assoc))
216
- return self.$assocs[assoc];
206
+ if (hasOwnProperty.call(self.a, assoc))
207
+ return self.a[assoc];
217
208
 
218
- return self.$default;`
209
+ return self.d;`
219
210
  end
220
211
 
221
212
  # Element assignment - Associates the value given by 'value' with the key
@@ -234,12 +225,12 @@ class Hash
234
225
  # @param [Object] value the value for the key
235
226
  # @return [Object] returns the set value
236
227
  def []=(key, value)
237
- `var assoc = key.$hash();
228
+ `var assoc = key.$h();
238
229
 
239
- if (!self.$assocs.hasOwnProperty(assoc))
240
- self.$keys.push(key);
230
+ if (!hasOwnProperty.call(self.a, assoc))
231
+ self.k.push(key);
241
232
 
242
- return self.$assocs[assoc] = value;`
233
+ return self.a[assoc] = value;`
243
234
  end
244
235
 
245
236
  # Remove all key-value pairs from `self`.
@@ -252,15 +243,15 @@ class Hash
252
243
  #
253
244
  # @return [Hash]
254
245
  def clear
255
- `self.$keys = [];
256
- self.$assocs = {};
246
+ `self.k = [];
247
+ self.a = {};
257
248
 
258
249
  return self;`
259
250
  end
260
251
 
261
252
  # Returns the default value for the hash.
262
253
  def default
263
- `return self.$default;`
254
+ `return self.d;`
264
255
  end
265
256
 
266
257
  # Sets the default value - the value returned when a key does not exist.
@@ -268,7 +259,7 @@ class Hash
268
259
  # @param [Object] obj the new default
269
260
  # @return [Object] returns the new default
270
261
  def default=(obj)
271
- `return self.$default = obj;`
262
+ `return self.d = obj;`
272
263
  end
273
264
 
274
265
  # Deletes and returns a key-value pair from self whose key is equal to `key`.
@@ -287,16 +278,16 @@ class Hash
287
278
  # @param [Object] key the key to delete
288
279
  # #return [Object] returns value or default value
289
280
  def delete(key)
290
- `var assoc = key.$hash();
281
+ `var assoc = key.$h();
291
282
 
292
- if (self.$assocs.hasOwnProperty(assoc)) {
293
- var ret = self.$assocs[assoc];
294
- delete self.$assocs[assoc];
295
- self.$keys.splice(self.$keys.indexOf(key), 1);
283
+ if (hasOwnProperty.call(self.a, assoc)) {
284
+ var ret = self.a[assoc];
285
+ delete self.a[assoc];
286
+ self.k.splice(self.$keys.indexOf(key), 1);
296
287
  return ret;
297
288
  }
298
289
 
299
- return self.$default;`
290
+ return self.d;`
300
291
  end
301
292
 
302
293
  # Deletes every key-value pair from `self` for which the block evaluates to
@@ -312,23 +303,14 @@ class Hash
312
303
  def delete_if
313
304
  `var key, value;
314
305
 
315
- for (var i = 0; i < self.$keys.length; i++) {
316
- try {
317
- key = self.$keys[i];
318
- value = self.$assocs[key.$hash()];
306
+ for (var i = 0; i < self.k.length; i++) {
307
+ key = self.k[i];
308
+ value = self.a[key.$h()];
319
309
 
320
- if (#{yield `key`, `value`}.$r) {
321
- delete self.$assocs[key.$hash()];
322
- self.$keys.splice(i, 1);
323
- i--;
324
- }
325
- } catch (e) {
326
- switch (e.$keyword) {
327
- case 2:
328
- return e['@exit_value'];
329
- default:
330
- throw e;
331
- }
310
+ if (#{yield `key`, `value`}.$r) {
311
+ delete self.a[key.$h()];
312
+ self.k.splice(i, 1);
313
+ i--;
332
314
  }
333
315
  }
334
316
 
@@ -347,20 +329,8 @@ class Hash
347
329
  #
348
330
  # @return [Hash] returns receiver
349
331
  def each_key
350
- `var key;
351
-
352
- for (var i = 0; i < self.$keys.length; i++) {
353
- try {
354
- key = self.$keys[i];
355
- #{yield `key`};
356
- } catch (e) {
357
- switch (e.$keyword) {
358
- case 2:
359
- return e['@exit_value'];
360
- default:
361
- throw e;
362
- }
363
- }
332
+ `for (var i = 0, ii = self.k.length; i < ii; i++) {
333
+ #{yield `self.k[i]`};
364
334
  }
365
335
 
366
336
  return self;`
@@ -380,18 +350,8 @@ class Hash
380
350
  def each_value
381
351
  `var val;
382
352
 
383
- for (var i = 0; i < self.$keys.length; i++) {
384
- try {
385
- val = self.$assocs[self.$keys[i].$hash()];
386
- #{yield `val`};
387
- } catch (e) {
388
- switch (e.$keyword) {
389
- case 2:
390
- return e['@exit_value'];
391
- default:
392
- throw e;
393
- }
394
- }
353
+ for (var i = 0, ii = self.k.length; i < ii; i++) {
354
+ #{yield `self.a[self.k[i].$h()]`};
395
355
  }
396
356
 
397
357
  return self;`
@@ -406,7 +366,7 @@ class Hash
406
366
  #
407
367
  # @return [true, false]
408
368
  def empty?
409
- `return self.$keys.length == 0 ? Qtrue : Qfalse;`
369
+ `return self.k.length == 0;`
410
370
  end
411
371
 
412
372
  # Returns a value from the hash for the given key. If the key can't be found,
@@ -426,7 +386,7 @@ class Hash
426
386
  # @param [Object] defaults the default value to return
427
387
  # @return [Object] value from hash
428
388
  def fetch(key, defaults = `undefined`)
429
- `var value = self.$assocs[key.$hash()];
389
+ `var value = self.a[key.$h()];
430
390
 
431
391
  if (value != undefined)
432
392
  return value;
@@ -455,9 +415,9 @@ class Hash
455
415
  def flatten(level = 1)
456
416
  `var result = [], key, value;
457
417
 
458
- for (var i = 0; i < self.$keys.length; i++) {
459
- key = self.$keys[i];
460
- value = self.$assocs[key.$hash()];
418
+ for (var i = 0; i < self.k.length; i++) {
419
+ key = self.k[i];
420
+ value = self.a[key.$h()];
461
421
  result.push(key);
462
422
 
463
423
  if (value instanceof Array) {
@@ -488,10 +448,10 @@ class Hash
488
448
  # @param [Object] key the key to check
489
449
  # @return [true, false]
490
450
  def has_key?(key)
491
- `if (self.$assocs.hasOwnProperty(key.$hash()))
492
- return Qtrue;
451
+ `if (hasOwnProperty.call(self.a, key.$h()))
452
+ return true;
493
453
 
494
- return Qfalse;`
454
+ return false;`
495
455
  end
496
456
 
497
457
  # Returns `true` if the given `value` is present for some key in `self`.
@@ -509,15 +469,15 @@ class Hash
509
469
  def has_value?(value)
510
470
  `var key, value;
511
471
 
512
- for (var i = 0; i < self.$keys.length; i++) {
513
- key = self.$keys[i];
514
- val = self.$assocs[key.$hash()];
472
+ for (var i = 0; i < self.k.length; i++) {
473
+ key = self.k[i];
474
+ val = self.a[key.$h()];
515
475
 
516
476
  if (#{`value` == `val`}.$r)
517
- return Qtrue;
477
+ return true;
518
478
  }
519
479
 
520
- return Qfalse;`
480
+ return false;`
521
481
  end
522
482
 
523
483
  # Replaces the contents of `self` with the contents of `other`.
@@ -531,13 +491,13 @@ class Hash
531
491
  # @param [Hash] other hash to replace with
532
492
  # @return [Hash] returns receiver
533
493
  def replace(other)
534
- `self.$keys = []; self.$assocs = {};
494
+ `self.k = []; self.a = {};
535
495
 
536
- for (var i = 0; i < other.$keys.length; i++) {
537
- var key = other.$keys[i];
538
- var val = other.$assocs[key.$hash()];
539
- self.$keys.push(key);
540
- self.$assocs[key.$hash()] = val;
496
+ for (var i = 0; i < other.k.length; i++) {
497
+ var key = other.k[i];
498
+ var val = other.a[key.$h()];
499
+ self.k.push(key);
500
+ self.a[key.$h()] = val;
541
501
  }
542
502
 
543
503
  return self;`
@@ -572,9 +532,9 @@ class Hash
572
532
  def key(value)
573
533
  `var key, val;
574
534
 
575
- for (var i = 0; i < self.$keys.length; i++) {
576
- key = self.$keys[i];
577
- val = self.$assocs[key.$hash()];
535
+ for (var i = 0; i < self.k.length; i++) {
536
+ key = self.k[i];
537
+ val = self.a[key.$h()];
578
538
 
579
539
  if (#{`value` == `val`}.$r) {
580
540
  return key;
@@ -595,7 +555,7 @@ class Hash
595
555
  #
596
556
  # @return [Array]
597
557
  def keys
598
- `return self.$keys.slice(0);`
558
+ `return self.k.slice(0);`
599
559
  end
600
560
 
601
561
  # Returns the number of key-value pairs in the hash.
@@ -608,7 +568,7 @@ class Hash
608
568
  #
609
569
  # @return [Numeric]
610
570
  def length
611
- `return self.$keys.length;`
571
+ `return self.k.length;`
612
572
  end
613
573
 
614
574
  # Returns a new hash containing the contents of `other` and `self`. If no
@@ -631,21 +591,21 @@ class Hash
631
591
  def merge(other)
632
592
  `var result = $opal.H() , key, val;
633
593
 
634
- for (var i = 0; i < self.$keys.length; i++) {
635
- key = self.$keys[i], val = self.$assocs[key.$hash()];
594
+ for (var i = 0; i < self.k.length; i++) {
595
+ key = self.k[i], val = self.a[key.$h()];
636
596
 
637
- result.$keys.push(key);
638
- result.$assocs[key.$hash()] = val;
597
+ result.k.push(key);
598
+ result.a[key.$h()] = val;
639
599
  }
640
600
 
641
- for (var i = 0; i < other.$keys.length; i++) {
642
- key = other.$keys[i], val = other.$assocs[key.$hash()];
601
+ for (var i = 0; i < other.k.length; i++) {
602
+ key = other.k[i], val = other.a[key.$h()];
643
603
 
644
- if (!result.$assocs.hasOwnProperty(key.$hash())) {
645
- result.$keys.push(key);
604
+ if (!hasOwnProperty.call(result.a, key.$h())) {
605
+ result.k.push(key);
646
606
  }
647
607
 
648
- result.$assocs[key.$hash()] = val;
608
+ result.a[key.$h()] = val;
649
609
  }
650
610
 
651
611
  return result;`
@@ -668,15 +628,15 @@ class Hash
668
628
  def merge!(other)
669
629
  `var key, val;
670
630
 
671
- for (var i = 0; i < other.$keys.length; i++) {
672
- key = other.$keys[i];
673
- val = other.$assocs[key.$hash()];
631
+ for (var i = 0; i < other.k.length; i++) {
632
+ key = other.k[i];
633
+ val = other.a[key.$h()];
674
634
 
675
- if (!self.$assocs.hasOwnProperty(key.$hash())) {
676
- self.$keys.push(key);
635
+ if (!hasOwnProperty.call(self.a, key.$h())) {
636
+ self.k.push(key);
677
637
  }
678
638
 
679
- self.$assocs[key.$hash()] = val;
639
+ self.a[key.$h()] = val;
680
640
  }
681
641
 
682
642
  return self;`
@@ -698,9 +658,9 @@ class Hash
698
658
  def rassoc(obj)
699
659
  `var key, val;
700
660
 
701
- for (var i = 0; i < self.$keys.length; i++) {
702
- key = self.$keys[i];
703
- val = self.$assocs[key.$hash()];
661
+ for (var i = 0; i < self.k.length; i++) {
662
+ key = self.k[i];
663
+ val = self.a[key.$h()];
704
664
 
705
665
  if (#{`val` == obj}.$r)
706
666
  return [key, val];
@@ -726,16 +686,16 @@ class Hash
726
686
  def shift
727
687
  `var key, val;
728
688
 
729
- if (self.$keys.length > 0) {
730
- key = self.$keys[0];
731
- val = self.$assocs[key.$hash()];
689
+ if (self.k.length > 0) {
690
+ key = self.k[0];
691
+ val = self.a[key.$h()];
732
692
 
733
- self.$keys.shift();
734
- delete self.$assocs[key.$hash()];
693
+ self.k.shift();
694
+ delete self.a[key.$h()];
735
695
  return [key, val];
736
696
  }
737
697
 
738
- return self.$default;`
698
+ return self.d;`
739
699
  end
740
700
 
741
701
  # Convert self into a nested array of `[key, value]` arrays.
@@ -750,9 +710,9 @@ class Hash
750
710
  def to_a
751
711
  `var result = [], key, value;
752
712
 
753
- for (var i = 0; i < self.$keys.length; i++) {
754
- key = self.$keys[i];
755
- value = self.$assocs[key.$hash()];
713
+ for (var i = 0; i < self.k.length; i++) {
714
+ key = self.k[i];
715
+ value = self.a[key.$h()];
756
716
  result.push([key, value]);
757
717
  }
758
718