opal 1.3.1 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (243) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.js +1 -0
  3. data/.github/workflows/build.yml +20 -21
  4. data/.rubocop.yml +5 -1
  5. data/CHANGELOG.md +119 -11
  6. data/UNRELEASED.md +4 -9
  7. data/benchmark-ips/bm_truthy.rb +30 -0
  8. data/bin/opal-mspec +1 -3
  9. data/bin/opal-repl +1 -2
  10. data/bin/remove-filters +1 -4
  11. data/docs/compiled_ruby.md +37 -22
  12. data/docs/faq.md +1 -1
  13. data/docs/headless_chrome.md +11 -21
  14. data/docs/jquery.md +1 -6
  15. data/docs/opal_parser.md +3 -1
  16. data/docs/promises.md +2 -0
  17. data/docs/releasing.md +3 -0
  18. data/docs/roda-sprockets.md +0 -1
  19. data/docs/source_maps.md +10 -11
  20. data/docs/static_applications.md +2 -2
  21. data/docs/unsupported_features.md +4 -0
  22. data/exe/opal-repl +1 -3
  23. data/lib/opal/ast/builder.rb +1 -1
  24. data/lib/opal/cli.rb +2 -2
  25. data/lib/opal/cli_runners/nodejs.rb +9 -2
  26. data/lib/opal/cli_runners/source-map-support-browser.js +80 -216
  27. data/lib/opal/cli_runners/source-map-support-node.js +80 -216
  28. data/lib/opal/cli_runners/source-map-support.js +5 -1
  29. data/lib/opal/cli_runners/system_runner.rb +10 -4
  30. data/lib/opal/compiler.rb +3 -5
  31. data/lib/opal/fragment.rb +5 -1
  32. data/lib/opal/nodes/args/extract_block_arg.rb +1 -8
  33. data/lib/opal/nodes/args/extract_kwoptarg.rb +1 -3
  34. data/lib/opal/nodes/args/extract_optarg.rb +1 -3
  35. data/lib/opal/nodes/args/extract_post_arg.rb +2 -5
  36. data/lib/opal/nodes/args/extract_post_optarg.rb +2 -7
  37. data/lib/opal/nodes/args/initialize_iterarg.rb +1 -3
  38. data/lib/opal/nodes/args/prepare_post_args.rb +5 -1
  39. data/lib/opal/nodes/base.rb +3 -2
  40. data/lib/opal/nodes/call.rb +20 -9
  41. data/lib/opal/nodes/call_special.rb +50 -0
  42. data/lib/opal/nodes/class.rb +24 -15
  43. data/lib/opal/nodes/constants.rb +23 -5
  44. data/lib/opal/nodes/def.rb +20 -23
  45. data/lib/opal/nodes/defined.rb +5 -5
  46. data/lib/opal/nodes/definitions.rb +2 -2
  47. data/lib/opal/nodes/defs.rb +2 -5
  48. data/lib/opal/nodes/helpers.rb +48 -18
  49. data/lib/opal/nodes/if.rb +113 -8
  50. data/lib/opal/nodes/iter.rb +23 -16
  51. data/lib/opal/nodes/literal.rb +18 -4
  52. data/lib/opal/nodes/logic.rb +2 -1
  53. data/lib/opal/nodes/masgn.rb +4 -9
  54. data/lib/opal/nodes/module.rb +29 -19
  55. data/lib/opal/nodes/node_with_args.rb +1 -7
  56. data/lib/opal/nodes/scope.rb +54 -15
  57. data/lib/opal/nodes/singleton_class.rb +5 -3
  58. data/lib/opal/nodes/super.rb +12 -12
  59. data/lib/opal/nodes/top.rb +34 -31
  60. data/lib/opal/nodes/variables.rb +2 -2
  61. data/lib/opal/nodes/x_string.rb +30 -28
  62. data/lib/opal/nodes.rb +0 -1
  63. data/lib/opal/parser/patch.rb +75 -0
  64. data/lib/opal/parser/with_ruby_lexer.rb +1 -1
  65. data/lib/opal/regexp_anchors.rb +7 -7
  66. data/lib/opal/requires.rb +19 -0
  67. data/lib/opal/rewriters/pattern_matching.rb +1 -1
  68. data/lib/opal/rewriters/returnable_logic.rb +102 -4
  69. data/lib/opal/util.rb +2 -2
  70. data/lib/opal/version.rb +1 -1
  71. data/lib/opal.rb +1 -17
  72. data/opal/corelib/array/pack.rb +11 -11
  73. data/opal/corelib/array.rb +193 -152
  74. data/opal/corelib/basic_object.rb +19 -15
  75. data/opal/corelib/binding.rb +7 -7
  76. data/opal/corelib/boolean.rb +12 -15
  77. data/opal/corelib/class.rb +23 -1
  78. data/opal/corelib/comparable.rb +8 -8
  79. data/opal/corelib/complex/base.rb +2 -2
  80. data/opal/corelib/complex.rb +79 -88
  81. data/opal/corelib/constants.rb +9 -9
  82. data/opal/corelib/dir.rb +4 -3
  83. data/opal/corelib/enumerable.rb +140 -127
  84. data/opal/corelib/enumerator/arithmetic_sequence.rb +177 -0
  85. data/opal/corelib/enumerator/chain.rb +42 -0
  86. data/opal/corelib/enumerator/generator.rb +35 -0
  87. data/opal/corelib/enumerator/lazy.rb +243 -0
  88. data/opal/corelib/enumerator/yielder.rb +36 -0
  89. data/opal/corelib/enumerator.rb +45 -300
  90. data/opal/corelib/error/errno.rb +47 -0
  91. data/opal/corelib/error.rb +62 -60
  92. data/opal/corelib/file.rb +26 -12
  93. data/opal/corelib/hash.rb +98 -107
  94. data/opal/corelib/helpers.rb +62 -13
  95. data/opal/corelib/io.rb +48 -35
  96. data/opal/corelib/kernel/format.rb +29 -29
  97. data/opal/corelib/kernel.rb +86 -83
  98. data/opal/corelib/main.rb +14 -12
  99. data/opal/corelib/marshal/read_buffer.rb +15 -15
  100. data/opal/corelib/marshal/write_buffer.rb +45 -44
  101. data/opal/corelib/marshal.rb +3 -3
  102. data/opal/corelib/math.rb +50 -50
  103. data/opal/corelib/method.rb +12 -8
  104. data/opal/corelib/module.rb +79 -75
  105. data/opal/corelib/nil.rb +9 -11
  106. data/opal/corelib/number.rb +113 -118
  107. data/opal/corelib/numeric.rb +37 -33
  108. data/opal/corelib/object_space.rb +11 -10
  109. data/opal/corelib/pack_unpack/format_string_parser.rb +3 -3
  110. data/opal/corelib/pattern_matching/base.rb +7 -7
  111. data/opal/corelib/pattern_matching.rb +1 -1
  112. data/opal/corelib/proc.rb +15 -16
  113. data/opal/corelib/process/base.rb +2 -2
  114. data/opal/corelib/process/status.rb +21 -0
  115. data/opal/corelib/process.rb +5 -5
  116. data/opal/corelib/random/formatter.rb +11 -11
  117. data/opal/corelib/random/math_random.js.rb +1 -1
  118. data/opal/corelib/random/mersenne_twister.rb +3 -3
  119. data/opal/corelib/random/seedrandom.js.rb +3 -3
  120. data/opal/corelib/random.rb +17 -17
  121. data/opal/corelib/range.rb +51 -35
  122. data/opal/corelib/rational/base.rb +4 -4
  123. data/opal/corelib/rational.rb +61 -62
  124. data/opal/corelib/regexp.rb +54 -45
  125. data/opal/corelib/runtime.js +247 -141
  126. data/opal/corelib/string/encoding.rb +21 -21
  127. data/opal/corelib/string/unpack.rb +19 -14
  128. data/opal/corelib/string.rb +137 -130
  129. data/opal/corelib/struct.rb +59 -46
  130. data/opal/corelib/time.rb +47 -57
  131. data/opal/corelib/trace_point.rb +2 -2
  132. data/opal/corelib/unsupported.rb +31 -120
  133. data/opal/corelib/variables.rb +3 -3
  134. data/opal/opal/base.rb +9 -8
  135. data/opal/opal/full.rb +8 -8
  136. data/opal/opal/mini.rb +17 -17
  137. data/opal/opal.rb +17 -18
  138. data/opal.gemspec +1 -1
  139. data/spec/filters/bugs/array.rb +4 -24
  140. data/spec/filters/bugs/basicobject.rb +0 -1
  141. data/spec/filters/bugs/bigdecimal.rb +0 -23
  142. data/spec/filters/bugs/binding.rb +0 -1
  143. data/spec/filters/bugs/boolean.rb +3 -0
  144. data/spec/filters/bugs/class.rb +2 -0
  145. data/spec/filters/bugs/date.rb +0 -5
  146. data/spec/filters/bugs/encoding.rb +8 -50
  147. data/spec/filters/bugs/enumerable.rb +4 -1
  148. data/spec/filters/bugs/enumerator.rb +3 -36
  149. data/spec/filters/bugs/exception.rb +0 -2
  150. data/spec/filters/bugs/file.rb +0 -2
  151. data/spec/filters/bugs/float.rb +0 -3
  152. data/spec/filters/bugs/hash.rb +5 -3
  153. data/spec/filters/bugs/integer.rb +2 -3
  154. data/spec/filters/bugs/kernel.rb +2 -31
  155. data/spec/filters/bugs/language.rb +29 -49
  156. data/spec/filters/bugs/main.rb +0 -2
  157. data/spec/filters/bugs/marshal.rb +2 -3
  158. data/spec/filters/bugs/matrix.rb +0 -36
  159. data/spec/filters/bugs/module.rb +7 -61
  160. data/spec/filters/bugs/numeric.rb +0 -7
  161. data/spec/filters/bugs/objectspace.rb +1 -1
  162. data/spec/filters/bugs/pack_unpack.rb +0 -4
  163. data/spec/filters/bugs/proc.rb +0 -9
  164. data/spec/filters/bugs/random.rb +0 -5
  165. data/spec/filters/bugs/range.rb +1 -6
  166. data/spec/filters/bugs/regexp.rb +0 -3
  167. data/spec/filters/bugs/set.rb +8 -1
  168. data/spec/filters/bugs/string.rb +9 -34
  169. data/spec/filters/bugs/stringscanner.rb +8 -7
  170. data/spec/filters/bugs/struct.rb +2 -3
  171. data/spec/filters/bugs/symbol.rb +0 -1
  172. data/spec/filters/bugs/time.rb +0 -8
  173. data/spec/filters/bugs/unboundmethod.rb +0 -8
  174. data/spec/filters/bugs/warnings.rb +1 -7
  175. data/spec/filters/unsupported/freeze.rb +24 -0
  176. data/spec/filters/unsupported/integer.rb +1 -0
  177. data/spec/filters/unsupported/kernel.rb +12 -0
  178. data/spec/filters/unsupported/privacy.rb +3 -0
  179. data/spec/filters/unsupported/string.rb +2 -0
  180. data/spec/lib/builder_spec.rb +2 -2
  181. data/spec/lib/cli_spec.rb +1 -1
  182. data/spec/lib/compiler_spec.rb +37 -37
  183. data/spec/lib/simple_server_spec.rb +2 -2
  184. data/spec/lib/source_map/file_spec.rb +1 -1
  185. data/spec/opal/compiler/irb_spec.rb +2 -2
  186. data/spec/opal/core/io/read_spec.rb +69 -0
  187. data/spec/opal/core/kernel/puts_spec.rb +90 -0
  188. data/spec/opal/core/language/super_spec.rb +21 -0
  189. data/spec/opal/core/language/xstring_spec.rb +13 -0
  190. data/spec/opal/core/language_spec.rb +14 -0
  191. data/spec/opal/core/string/gsub_spec.rb +8 -0
  192. data/spec/ruby_specs +4 -2
  193. data/spec/support/rewriters_helper.rb +1 -1
  194. data/stdlib/bigdecimal.rb +7 -11
  195. data/stdlib/buffer/view.rb +2 -2
  196. data/stdlib/buffer.rb +2 -2
  197. data/stdlib/date.rb +5 -6
  198. data/stdlib/erb.rb +1 -0
  199. data/stdlib/js.rb +2 -1
  200. data/stdlib/native.rb +7 -8
  201. data/stdlib/nodejs/argf.rb +4 -4
  202. data/stdlib/nodejs/base.rb +29 -0
  203. data/stdlib/nodejs/dir.rb +1 -1
  204. data/stdlib/nodejs/env.rb +6 -9
  205. data/stdlib/nodejs/file.rb +23 -17
  206. data/stdlib/nodejs/fileutils.rb +3 -3
  207. data/stdlib/nodejs/io.rb +2 -20
  208. data/stdlib/nodejs/irb.rb +0 -0
  209. data/stdlib/nodejs/kernel.rb +2 -37
  210. data/stdlib/nodejs.rb +1 -3
  211. data/stdlib/opal/miniracer.rb +2 -0
  212. data/stdlib/opal/platform.rb +6 -13
  213. data/stdlib/opal/replutils.rb +16 -5
  214. data/stdlib/opal-parser.rb +2 -2
  215. data/stdlib/optparse/ac.rb +54 -0
  216. data/stdlib/optparse/date.rb +14 -0
  217. data/stdlib/optparse/kwargs.rb +22 -0
  218. data/stdlib/optparse/shellwords.rb +7 -0
  219. data/stdlib/optparse/time.rb +15 -0
  220. data/stdlib/optparse/uri.rb +7 -0
  221. data/stdlib/optparse/version.rb +69 -0
  222. data/stdlib/optparse.rb +2279 -0
  223. data/stdlib/pathname.rb +5 -6
  224. data/stdlib/pp.rb +18 -2
  225. data/stdlib/promise/v2.rb +18 -29
  226. data/stdlib/promise.rb +15 -21
  227. data/stdlib/quickjs/io.rb +0 -2
  228. data/stdlib/quickjs/kernel.rb +0 -2
  229. data/stdlib/quickjs.rb +2 -0
  230. data/stdlib/set.rb +32 -32
  231. data/stdlib/shellwords.rb +240 -0
  232. data/stdlib/stringio.rb +3 -6
  233. data/stdlib/strscan.rb +5 -8
  234. data/stdlib/template.rb +2 -2
  235. data/stdlib/thread.rb +7 -9
  236. data/tasks/linting-parse-eslint-results.js +1 -0
  237. data/tasks/linting.rake +0 -10
  238. data/tasks/performance.rake +5 -2
  239. data/tasks/testing/mspec_special_calls.rb +0 -12
  240. data/tasks/testing.rake +55 -37
  241. data/test/nodejs/test_file.rb +11 -0
  242. metadata +55 -8
  243. data/lib/opal/nodes/case.rb +0 -114
@@ -1,6 +1,6 @@
1
- # helpers: truthy, coerce_to
1
+ # helpers: truthy, coerce_to, const_set, Object
2
2
 
3
- class Module
3
+ class ::Module
4
4
  def self.allocate
5
5
  %x{
6
6
  var module = Opal.allocate_module(nil, function(){});
@@ -21,8 +21,8 @@ class Module
21
21
  end
22
22
 
23
23
  def <(other)
24
- unless Module === other
25
- raise TypeError, 'compared with non class/module'
24
+ unless ::Module === other
25
+ ::Kernel.raise ::TypeError, 'compared with non class/module'
26
26
  end
27
27
 
28
28
  # class cannot be a descendant of itself
@@ -56,8 +56,8 @@ class Module
56
56
  end
57
57
 
58
58
  def >(other)
59
- unless Module === other
60
- raise TypeError, 'compared with non class/module'
59
+ unless ::Module === other
60
+ ::Kernel.raise ::TypeError, 'compared with non class/module'
61
61
  end
62
62
 
63
63
  other < self
@@ -74,7 +74,7 @@ class Module
74
74
  }
75
75
  }
76
76
 
77
- unless Module === other
77
+ unless ::Module === other
78
78
  return nil
79
79
  end
80
80
 
@@ -84,8 +84,8 @@ class Module
84
84
  end
85
85
 
86
86
  def alias_method(newname, oldname)
87
- newname = `$coerce_to(newname, #{String}, 'to_str')`
88
- oldname = `$coerce_to(oldname, #{String}, 'to_str')`
87
+ newname = `$coerce_to(newname, #{::String}, 'to_str')`
88
+ oldname = `$coerce_to(oldname, #{::String}, 'to_str')`
89
89
  `Opal.alias(self, newname, oldname)`
90
90
 
91
91
  self
@@ -147,7 +147,7 @@ class Module
147
147
  })(ivar);
148
148
 
149
149
  // initialize the instance variable as nil
150
- Opal.defineProperty(proto, ivar, nil);
150
+ Opal.prop(proto, ivar, nil);
151
151
 
152
152
  body.$$parameters = [];
153
153
  body.$$arity = 0;
@@ -180,7 +180,7 @@ class Module
180
180
  body.$$arity = 1;
181
181
 
182
182
  // initialize the instance variable as nil
183
- Opal.defineProperty(proto, ivar, nil);
183
+ Opal.prop(proto, ivar, nil);
184
184
 
185
185
  Opal.defn(self, id, body);
186
186
  }
@@ -192,11 +192,11 @@ class Module
192
192
  def autoload(const, path)
193
193
  %x{
194
194
  if (!#{Opal.const_name?(const)}) {
195
- #{raise NameError, "autoload must be constant name: #{const}"}
195
+ #{::Kernel.raise ::NameError, "autoload must be constant name: #{const}"}
196
196
  }
197
197
 
198
198
  if (path == "") {
199
- #{raise ArgumentError, 'empty file name'}
199
+ #{::Kernel.raise ::ArgumentError, 'empty file name'}
200
200
  }
201
201
 
202
202
  if (!self.$$const.hasOwnProperty(#{const})) {
@@ -232,25 +232,25 @@ class Module
232
232
  end
233
233
 
234
234
  def class_variable_get(name)
235
- name = Opal.class_variable_name!(name)
235
+ name = ::Opal.class_variable_name!(name)
236
236
 
237
237
  `Opal.class_variable_get(self, name, false)`
238
238
  end
239
239
 
240
240
  def class_variable_set(name, value)
241
- name = Opal.class_variable_name!(name)
241
+ name = ::Opal.class_variable_name!(name)
242
242
 
243
243
  `Opal.class_variable_set(self, name, value)`
244
244
  end
245
245
 
246
246
  def class_variable_defined?(name)
247
- name = Opal.class_variable_name!(name)
247
+ name = ::Opal.class_variable_name!(name)
248
248
 
249
249
  `Opal.class_variables(self).hasOwnProperty(name)`
250
250
  end
251
251
 
252
252
  def remove_class_variable(name)
253
- name = Opal.class_variable_name!(name)
253
+ name = ::Opal.class_variable_name!(name)
254
254
 
255
255
  %x{
256
256
  if (Opal.hasOwnProperty.call(self.$$cvars, name)) {
@@ -258,7 +258,7 @@ class Module
258
258
  delete self.$$cvars[name];
259
259
  return value;
260
260
  } else {
261
- #{raise NameError, "cannot remove #{name} for #{self}"}
261
+ #{::Kernel.raise ::NameError, "cannot remove #{name} for #{self}"}
262
262
  }
263
263
  }
264
264
  end
@@ -270,7 +270,7 @@ class Module
270
270
  def self.constants(inherit = undefined)
271
271
  %x{
272
272
  if (inherit == null) {
273
- var nesting = (self.$$nesting || []).concat(Opal.Object),
273
+ var nesting = (self.$$nesting || []).concat($Object),
274
274
  constant, constants = {},
275
275
  i, ii;
276
276
 
@@ -295,7 +295,7 @@ class Module
295
295
  def const_defined?(name, inherit = true)
296
296
  name = Opal.const_name!(name)
297
297
 
298
- raise NameError.new("wrong constant name #{name}", name) unless name =~ Opal::CONST_NAME_REGEXP
298
+ ::Kernel.raise ::NameError.new("wrong constant name #{name}", name) unless name =~ ::Opal::CONST_NAME_REGEXP
299
299
 
300
300
  %x{
301
301
  var module, modules = [self], module_constants, i, ii;
@@ -306,7 +306,7 @@ class Module
306
306
 
307
307
  // Add Object's ancestors if it's a module – modules have no ancestors otherwise
308
308
  if (self.$$is_module) {
309
- modules = modules.concat([Opal.Object]).concat(Opal.ancestors(Opal.Object));
309
+ modules = modules.concat([$Object]).concat(Opal.ancestors($Object));
310
310
  }
311
311
  }
312
312
 
@@ -340,11 +340,11 @@ class Module
340
340
  return name.split('::').inject(self) { |o, c| o.const_get(c) }
341
341
  end
342
342
 
343
- raise NameError.new("wrong constant name #{name}", name) unless name =~ Opal::CONST_NAME_REGEXP
343
+ ::Kernel.raise ::NameError.new("wrong constant name #{name}", name) unless name =~ ::Opal::CONST_NAME_REGEXP
344
344
 
345
345
  %x{
346
346
  if (inherit) {
347
- return $$([self], name);
347
+ return Opal.$$([self], name);
348
348
  } else {
349
349
  return Opal.const_get_local(self, name);
350
350
  }
@@ -352,19 +352,19 @@ class Module
352
352
  end
353
353
 
354
354
  def const_missing(name)
355
- full_const_name = self == Object ? name : "#{self}::#{name}"
355
+ full_const_name = self == ::Object ? name : "#{self}::#{name}"
356
356
 
357
- raise NameError.new("uninitialized constant #{full_const_name}", name)
357
+ ::Kernel.raise ::NameError.new("uninitialized constant #{full_const_name}", name)
358
358
  end
359
359
 
360
360
  def const_set(name, value)
361
- name = Opal.const_name!(name)
361
+ name = ::Opal.const_name!(name)
362
362
 
363
- if name !~ Opal::CONST_NAME_REGEXP || name.start_with?('::')
364
- raise NameError.new("wrong constant name #{name}", name)
363
+ if name !~ ::Opal::CONST_NAME_REGEXP || name.start_with?('::')
364
+ ::Kernel.raise ::NameError.new("wrong constant name #{name}", name)
365
365
  end
366
366
 
367
- `Opal.const_set(self, name, value)`
367
+ `$const_set(self, name, value)`
368
368
 
369
369
  value
370
370
  end
@@ -373,25 +373,26 @@ class Module
373
373
  end
374
374
 
375
375
  def define_method(name, method = undefined, &block)
376
- if `method === undefined && block === nil`
377
- raise ArgumentError, 'tried to create a Proc object without a block'
378
- end
376
+ %x{
377
+ if (method === undefined && block === nil)
378
+ #{::Kernel.raise ::ArgumentError, 'tried to create a Proc object without a block'}
379
+ }
379
380
 
380
381
  block ||= case method
381
- when Proc
382
+ when ::Proc
382
383
  method
383
384
 
384
- when Method
385
+ when ::Method
385
386
  `#{method.to_proc}.$$unbound`
386
387
 
387
- when UnboundMethod
388
+ when ::UnboundMethod
388
389
  ->(*args) {
389
390
  bound = method.bind(self)
390
391
  bound.call(*args)
391
392
  }
392
393
 
393
394
  else
394
- raise TypeError, "wrong argument type #{block.class} (expected Proc/Method)"
395
+ ::Kernel.raise ::TypeError, "wrong argument type #{block.class} (expected Proc/Method)"
395
396
  end
396
397
 
397
398
  %x{
@@ -402,9 +403,7 @@ class Module
402
403
  block.$$def = block;
403
404
  block.$$define_meth = true;
404
405
 
405
- Opal.defn(self, id, block);
406
-
407
- return name;
406
+ return Opal.defn(self, id, block);
408
407
  }
409
408
  end
410
409
 
@@ -428,7 +427,7 @@ class Module
428
427
  var mod = mods[i];
429
428
 
430
429
  if (!mod.$$is_module) {
431
- #{raise TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
430
+ #{::Kernel.raise ::TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
432
431
  }
433
432
 
434
433
  #{`mod`.append_features self};
@@ -446,7 +445,7 @@ class Module
446
445
  def include?(mod)
447
446
  %x{
448
447
  if (!mod.$$is_module) {
449
- #{raise TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
448
+ #{::Kernel.raise ::TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
450
449
  }
451
450
 
452
451
  var i, ii, mod2, ancestors = Opal.ancestors(self);
@@ -467,10 +466,10 @@ class Module
467
466
  var meth = self.$$prototype['$' + name];
468
467
 
469
468
  if (!meth || meth.$$stub) {
470
- #{raise NameError.new("undefined method `#{name}' for class `#{self.name}'", name)};
469
+ #{::Kernel.raise ::NameError.new("undefined method `#{name}' for class `#{self.name}'", name)};
471
470
  }
472
471
 
473
- return #{UnboundMethod.new(self, `meth.$$owner || #{self}`, `meth`, name)};
472
+ return #{::UnboundMethod.new(self, `meth.$$owner || #{self}`, `meth`, name)};
474
473
  }
475
474
  end
476
475
 
@@ -504,22 +503,18 @@ class Module
504
503
 
505
504
  def module_eval(*args, &block)
506
505
  if block.nil? && `!!Opal.compile`
507
- Kernel.raise ArgumentError, 'wrong number of arguments (0 for 1..3)' unless (1..3).cover? args.size
506
+ ::Kernel.raise ::ArgumentError, 'wrong number of arguments (0 for 1..3)' unless (1..3).cover? args.size
508
507
 
509
508
  string, file, _lineno = *args
510
509
  default_eval_options = { file: (file || '(eval)'), eval: true }
511
510
  compiling_options = __OPAL_COMPILER_CONFIG__.merge(default_eval_options)
512
- compiled = Opal.compile string, compiling_options
513
- block = Kernel.proc do
514
- %x{
515
- return (function(self) {
516
- return eval(compiled);
517
- })(self)
518
- }
511
+ compiled = ::Opal.compile string, compiling_options
512
+ block = ::Kernel.proc do
513
+ %x{new Function("Opal,self", "return " + compiled)(Opal, self)}
519
514
  end
520
515
  elsif args.any?
521
- Kernel.raise ArgumentError, "wrong number of arguments (#{args.size} for 0)" \
522
- "\n\n NOTE:If you want to enable passing a String argument please add \"require 'opal-parser'\" to your script\n"
516
+ ::Kernel.raise ::ArgumentError, "wrong number of arguments (#{args.size} for 0)" \
517
+ "\n\n NOTE:If you want to enable passing a String argument please add \"require 'opal-parser'\" to your script\n"
523
518
  end
524
519
 
525
520
  %x{
@@ -534,12 +529,10 @@ class Module
534
529
  }
535
530
  end
536
531
 
537
- alias class_eval module_eval
538
-
539
532
  def module_exec(*args, &block)
540
533
  %x{
541
534
  if (block === nil) {
542
- #{raise LocalJumpError, 'no block given'}
535
+ #{::Kernel.raise ::LocalJumpError, 'no block given'}
543
536
  }
544
537
 
545
538
  var block_self = block.$$s, result;
@@ -552,8 +545,6 @@ class Module
552
545
  }
553
546
  end
554
547
 
555
- alias class_exec module_exec
556
-
557
548
  def method_defined?(method)
558
549
  %x{
559
550
  var body = self.$$prototype['$' + method];
@@ -565,6 +556,7 @@ class Module
565
556
  %x{
566
557
  if (methods.length === 0) {
567
558
  self.$$module_function = true;
559
+ return nil;
568
560
  }
569
561
  else {
570
562
  for (var i = 0, length = methods.length; i < length; i++) {
@@ -574,6 +566,7 @@ class Module
574
566
 
575
567
  Opal.defs(self, id, func);
576
568
  }
569
+ return methods.length === 1 ? methods[0] : methods;
577
570
  }
578
571
 
579
572
  return self;
@@ -596,7 +589,7 @@ class Module
596
589
 
597
590
  base = base.$$base_module;
598
591
 
599
- if (base === Opal.Object) {
592
+ if (base === $Object) {
600
593
  break;
601
594
  }
602
595
  }
@@ -612,14 +605,14 @@ class Module
612
605
  def prepend(*mods)
613
606
  %x{
614
607
  if (mods.length === 0) {
615
- #{raise ArgumentError, 'wrong number of arguments (given 0, expected 1+)'}
608
+ #{::Kernel.raise ::ArgumentError, 'wrong number of arguments (given 0, expected 1+)'}
616
609
  }
617
610
 
618
611
  for (var i = mods.length - 1; i >= 0; i--) {
619
612
  var mod = mods[i];
620
613
 
621
614
  if (!mod.$$is_module) {
622
- #{raise TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
615
+ #{::Kernel.raise ::TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
623
616
  }
624
617
 
625
618
  #{`mod`.prepend_features self};
@@ -633,7 +626,7 @@ class Module
633
626
  def prepend_features(prepender)
634
627
  %x{
635
628
  if (!self.$$is_module) {
636
- #{raise TypeError, "wrong argument type #{self.class} (expected Module)"};
629
+ #{::Kernel.raise ::TypeError, "wrong argument type #{self.class} (expected Module)"};
637
630
  }
638
631
 
639
632
  Opal.prepend_features(self, prepender)
@@ -652,8 +645,6 @@ class Module
652
645
  `Opal.Module.$name.call(self)` || "#<#{`self.$$is_module ? 'Module' : 'Class'`}:0x#{__id__.to_s(16)}>"
653
646
  end
654
647
 
655
- alias inspect to_s
656
-
657
648
  def undef_method(*names)
658
649
  %x{
659
650
  for (var i = 0, length = names.length; i < length; i++) {
@@ -699,34 +690,47 @@ class Module
699
690
  var name, other_constants = other.$$const;
700
691
 
701
692
  for (name in other_constants) {
702
- Opal.const_set(self, name, other_constants[name]);
693
+ $const_set(self, name, other_constants[name]);
703
694
  }
704
695
  }
705
696
  end
706
697
 
707
- def refine(mod, &block)
708
- s, m, mod_id = self, nil, nil
698
+ def refine(klass, &block)
699
+ refinement_module, m, klass_id = self, nil, nil
709
700
  %x{
710
- mod_id = Opal.id(mod);
701
+ klass_id = Opal.id(klass);
711
702
  if (typeof self.$$refine_modules === "undefined") {
712
703
  self.$$refine_modules = {};
713
704
  }
714
- if (typeof self.$$refine_modules[mod_id] === "undefined") {
715
- m = self.$$refine_modules[mod_id] = #{::Module.new};
705
+ if (typeof self.$$refine_modules[klass_id] === "undefined") {
706
+ m = self.$$refine_modules[klass_id] = #{::Refinement.new};
716
707
  }
717
708
  else {
718
- m = self.$$refine_modules[mod_id];
709
+ m = self.$$refine_modules[klass_id];
719
710
  }
711
+ m.refinement_module = refinement_module
712
+ m.refined_class = klass
720
713
  }
721
- m.define_singleton_method :inspect do
722
- "#<refinement:#{mod.inspect}@#{s.inspect}>"
723
- end
724
714
  m.class_exec(&block)
725
715
  m
726
716
  end
727
717
 
728
718
  # Compiler overrides this method
729
719
  def using(mod)
730
- raise 'Module#using is not permitted in methods'
720
+ ::Kernel.raise 'Module#using is not permitted in methods'
721
+ end
722
+
723
+ alias class_eval module_eval
724
+ alias class_exec module_exec
725
+ alias inspect to_s
726
+ end
727
+
728
+ class ::Refinement < ::Module
729
+ def inspect
730
+ if @refinement_module
731
+ "#<refinement:#{@refined_class.inspect}@#{@refinement_module.inspect}>"
732
+ else
733
+ super
734
+ end
731
735
  end
732
736
  end
data/opal/corelib/nil.rb CHANGED
@@ -1,9 +1,9 @@
1
- class NilClass
1
+ class ::NilClass
2
2
  `self.$$prototype.$$meta = #{self}`
3
3
 
4
4
  class << self
5
5
  def allocate
6
- raise TypeError, "allocator undefined for #{name}"
6
+ ::Kernel.raise ::TypeError, "allocator undefined for #{name}"
7
7
  end
8
8
 
9
9
  undef :new
@@ -46,7 +46,7 @@ class NilClass
46
46
  end
47
47
 
48
48
  def singleton_class
49
- NilClass
49
+ ::NilClass
50
50
  end
51
51
 
52
52
  def to_a
@@ -61,28 +61,26 @@ class NilClass
61
61
  0
62
62
  end
63
63
 
64
- alias to_f to_i
65
-
66
64
  def to_s
67
65
  ''
68
66
  end
69
67
 
70
68
  def to_c
71
- Complex.new(0, 0)
69
+ ::Complex.new(0, 0)
72
70
  end
73
71
 
74
72
  def rationalize(*args)
75
- raise ArgumentError if args.length > 1
76
- Rational(0, 1)
73
+ ::Kernel.raise ::ArgumentError if args.length > 1
74
+ ::Kernel.Rational(0, 1)
77
75
  end
78
76
 
79
77
  def to_r
80
- Rational(0, 1)
78
+ ::Kernel.Rational(0, 1)
81
79
  end
82
80
 
83
81
  def instance_variables
84
82
  []
85
83
  end
86
- end
87
84
 
88
- NIL = nil
85
+ alias to_f to_i
86
+ end