opal 0.11.4 → 1.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (379) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +42 -10
  3. data/.rubocop.yml +398 -0
  4. data/.rubocop_todo.yml +44 -0
  5. data/.travis.yml +28 -34
  6. data/CHANGELOG.md +363 -142
  7. data/CONTRIBUTING.md +3 -5
  8. data/Gemfile +17 -12
  9. data/Guardfile +0 -1
  10. data/HACKING.md +1 -35
  11. data/LICENSE +2 -2
  12. data/README.md +42 -13
  13. data/Rakefile +1 -4
  14. data/UNRELEASED.md +133 -0
  15. data/benchmark-ips/README.md +6 -0
  16. data/benchmark-ips/bm_block_vs_yield.rb +21 -0
  17. data/benchmark-ips/bm_js_symbols_vs_strings.rb +28 -0
  18. data/benchmark-ips/bm_while_true_vs_loop.rb +19 -0
  19. data/bin/console +14 -0
  20. data/bin/opal +0 -1
  21. data/bin/opal-benchmark-ips +8 -0
  22. data/bin/opal-mspec +9 -1
  23. data/bin/opal-repl +2 -1
  24. data/bin/rake +7 -0
  25. data/bin/setup +8 -0
  26. data/docs/compiled_ruby.md +89 -8
  27. data/docs/compiler.md +3 -20
  28. data/docs/jquery.md +44 -11
  29. data/docs/promises.md +1 -1
  30. data/docs/rails.md +16 -12
  31. data/docs/sinatra.md +15 -8
  32. data/docs/using_sprockets.md +16 -11
  33. data/examples/rack/config.ru +1 -0
  34. data/examples/sinatra/Gemfile +1 -0
  35. data/examples/sinatra/config.ru +2 -11
  36. data/exe/opal-repl +3 -11
  37. data/lib/opal.rb +1 -0
  38. data/lib/opal/ast/builder.rb +4 -1
  39. data/lib/opal/ast/node.rb +1 -0
  40. data/lib/opal/builder.rb +84 -63
  41. data/lib/opal/builder_processors.rb +41 -56
  42. data/lib/opal/cli.rb +33 -49
  43. data/lib/opal/cli_options.rb +27 -17
  44. data/lib/opal/cli_runners.rb +73 -16
  45. data/lib/opal/cli_runners/applescript.rb +4 -4
  46. data/lib/opal/cli_runners/chrome.rb +29 -17
  47. data/lib/opal/cli_runners/nashorn.rb +5 -4
  48. data/lib/opal/cli_runners/nodejs.rb +8 -6
  49. data/lib/opal/cli_runners/server.rb +12 -11
  50. data/lib/opal/compiler.rb +85 -103
  51. data/lib/opal/config.rb +3 -3
  52. data/lib/opal/deprecations.rb +2 -1
  53. data/lib/opal/eof_content.rb +2 -2
  54. data/lib/opal/erb.rb +8 -7
  55. data/lib/opal/errors.rb +72 -1
  56. data/lib/opal/fragment.rb +23 -3
  57. data/lib/opal/hike.rb +305 -0
  58. data/lib/opal/nodes.rb +5 -10
  59. data/lib/opal/nodes/arglist.rb +7 -6
  60. data/lib/opal/nodes/args.rb +36 -0
  61. data/lib/opal/nodes/args/arg.rb +22 -0
  62. data/lib/opal/nodes/args/arity_check.rb +151 -0
  63. data/lib/opal/nodes/args/ensure_kwargs_are_kwargs.rb +28 -0
  64. data/lib/opal/nodes/args/extract_block_arg.rb +34 -0
  65. data/lib/opal/nodes/args/extract_kwarg.rb +32 -0
  66. data/lib/opal/nodes/args/extract_kwargs.rb +28 -0
  67. data/lib/opal/nodes/args/extract_kwoptarg.rb +35 -0
  68. data/lib/opal/nodes/args/extract_kwrestarg.rb +35 -0
  69. data/lib/opal/nodes/args/extract_optarg.rb +35 -0
  70. data/lib/opal/nodes/args/extract_post_arg.rb +28 -0
  71. data/lib/opal/nodes/args/extract_post_optarg.rb +41 -0
  72. data/lib/opal/nodes/args/extract_restarg.rb +40 -0
  73. data/lib/opal/nodes/args/fake_arg.rb +26 -0
  74. data/lib/opal/nodes/args/initialize_iterarg.rb +28 -0
  75. data/lib/opal/nodes/args/initialize_shadowarg.rb +24 -0
  76. data/lib/opal/nodes/args/parameters.rb +63 -0
  77. data/lib/opal/nodes/args/prepare_post_args.rb +22 -0
  78. data/lib/opal/nodes/array.rb +9 -8
  79. data/lib/opal/nodes/base.rb +20 -11
  80. data/lib/opal/nodes/call.rb +24 -25
  81. data/lib/opal/nodes/call_special.rb +4 -3
  82. data/lib/opal/nodes/case.rb +24 -26
  83. data/lib/opal/nodes/class.rb +4 -5
  84. data/lib/opal/nodes/constants.rb +8 -7
  85. data/lib/opal/nodes/csend.rb +2 -3
  86. data/lib/opal/nodes/def.rb +28 -74
  87. data/lib/opal/nodes/defined.rb +36 -36
  88. data/lib/opal/nodes/definitions.rb +10 -7
  89. data/lib/opal/nodes/defs.rb +8 -16
  90. data/lib/opal/nodes/hash.rb +5 -4
  91. data/lib/opal/nodes/helpers.rb +8 -8
  92. data/lib/opal/nodes/if.rb +10 -8
  93. data/lib/opal/nodes/iter.rb +16 -103
  94. data/lib/opal/nodes/lambda.rb +18 -0
  95. data/lib/opal/nodes/literal.rb +29 -63
  96. data/lib/opal/nodes/logic.rb +25 -24
  97. data/lib/opal/nodes/masgn.rb +8 -6
  98. data/lib/opal/nodes/module.rb +4 -4
  99. data/lib/opal/nodes/node_with_args.rb +14 -208
  100. data/lib/opal/nodes/rescue.rb +32 -32
  101. data/lib/opal/nodes/runtime_helpers.rb +5 -4
  102. data/lib/opal/nodes/scope.rb +18 -29
  103. data/lib/opal/nodes/singleton_class.rb +3 -3
  104. data/lib/opal/nodes/super.rb +12 -18
  105. data/lib/opal/nodes/top.rb +10 -8
  106. data/lib/opal/nodes/variables.rb +6 -6
  107. data/lib/opal/nodes/while.rb +7 -6
  108. data/lib/opal/nodes/x_string.rb +139 -0
  109. data/lib/opal/nodes/yield.rb +10 -7
  110. data/lib/opal/parser.rb +9 -46
  111. data/lib/opal/parser/default_config.rb +50 -0
  112. data/lib/opal/parser/patch.rb +26 -0
  113. data/lib/opal/parser/source_buffer.rb +11 -0
  114. data/lib/opal/parser/with_c_lexer.rb +14 -0
  115. data/lib/opal/parser/with_ruby_lexer.rb +6 -0
  116. data/lib/opal/path_reader.rb +6 -5
  117. data/lib/opal/paths.rb +9 -6
  118. data/lib/opal/regexp_anchors.rb +6 -5
  119. data/lib/opal/rewriter.rb +7 -0
  120. data/lib/opal/rewriters/arguments.rb +58 -0
  121. data/lib/opal/rewriters/base.rb +32 -12
  122. data/lib/opal/rewriters/binary_operator_assignment.rb +20 -20
  123. data/lib/opal/rewriters/block_to_iter.rb +2 -1
  124. data/lib/opal/rewriters/break_finder.rb +2 -0
  125. data/lib/opal/rewriters/dot_js_syntax.rb +3 -2
  126. data/lib/opal/rewriters/dump_args.rb +28 -0
  127. data/lib/opal/rewriters/explicit_writer_return.rb +4 -3
  128. data/lib/opal/rewriters/for_rewriter.rb +12 -12
  129. data/lib/opal/rewriters/hashes/key_duplicates_rewriter.rb +2 -1
  130. data/lib/opal/rewriters/inline_args.rb +220 -0
  131. data/lib/opal/rewriters/js_reserved_words.rb +21 -17
  132. data/lib/opal/rewriters/logical_operator_assignment.rb +24 -14
  133. data/lib/opal/rewriters/mlhs_args.rb +128 -0
  134. data/lib/opal/rewriters/opal_engine_check.rb +11 -6
  135. data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +3 -2
  136. data/lib/opal/server.rb +1 -0
  137. data/lib/opal/simple_server.rb +15 -23
  138. data/lib/opal/source_map.rb +7 -70
  139. data/lib/opal/source_map/file.rb +199 -0
  140. data/lib/opal/source_map/index.rb +83 -0
  141. data/lib/opal/source_map/map.rb +26 -0
  142. data/lib/opal/source_map/vlq.rb +98 -0
  143. data/lib/opal/util.rb +7 -5
  144. data/lib/opal/version.rb +2 -1
  145. data/lib/tilt/opal.rb +3 -3
  146. data/opal.gemspec +18 -9
  147. data/opal/corelib/array.rb +135 -117
  148. data/opal/corelib/array/pack.rb +446 -0
  149. data/opal/corelib/basic_object.rb +23 -9
  150. data/opal/corelib/boolean.rb +3 -3
  151. data/opal/corelib/class.rb +4 -10
  152. data/opal/corelib/comparable.rb +36 -23
  153. data/opal/corelib/complex.rb +108 -14
  154. data/opal/corelib/constants.rb +4 -4
  155. data/opal/corelib/enumerable.rb +132 -135
  156. data/opal/corelib/enumerator.rb +47 -50
  157. data/opal/corelib/error.rb +65 -8
  158. data/opal/corelib/file.rb +37 -32
  159. data/opal/corelib/hash.rb +90 -21
  160. data/opal/corelib/helpers.rb +7 -6
  161. data/opal/corelib/kernel.rb +53 -586
  162. data/opal/corelib/kernel/format.rb +544 -0
  163. data/opal/corelib/marshal.rb +1 -13
  164. data/opal/corelib/marshal/read_buffer.rb +20 -23
  165. data/opal/corelib/marshal/write_buffer.rb +23 -15
  166. data/opal/corelib/math.rb +12 -16
  167. data/opal/corelib/method.rb +5 -3
  168. data/opal/corelib/module.rb +80 -109
  169. data/opal/corelib/nil.rb +2 -2
  170. data/opal/corelib/number.rb +177 -43
  171. data/opal/corelib/numeric.rb +22 -16
  172. data/opal/corelib/pack_unpack/format_string_parser.rb +135 -0
  173. data/opal/corelib/proc.rb +3 -4
  174. data/opal/corelib/process.rb +1 -1
  175. data/opal/corelib/random.rb +24 -16
  176. data/opal/corelib/random/MersenneTwister.js +137 -0
  177. data/opal/corelib/random/math_random.js.rb +9 -0
  178. data/opal/corelib/random/mersenne_twister.js.rb +13 -0
  179. data/opal/corelib/random/seedrandom.js.rb +12 -0
  180. data/opal/corelib/range.rb +25 -26
  181. data/opal/corelib/rational.rb +57 -17
  182. data/opal/corelib/regexp.rb +39 -43
  183. data/opal/corelib/runtime.js +806 -683
  184. data/opal/corelib/string.rb +213 -112
  185. data/opal/corelib/string/encoding.rb +14 -17
  186. data/opal/corelib/string/unpack.rb +793 -0
  187. data/opal/corelib/struct.rb +40 -24
  188. data/opal/corelib/time.rb +14 -15
  189. data/opal/corelib/unsupported.rb +26 -4
  190. data/opal/opal.rb +2 -1
  191. data/opal/opal/full.rb +2 -0
  192. data/stdlib/base64.rb +1 -1
  193. data/stdlib/bigdecimal.rb +11 -13
  194. data/stdlib/buffer.rb +9 -8
  195. data/stdlib/buffer/array.rb +46 -48
  196. data/stdlib/buffer/view.rb +85 -47
  197. data/stdlib/console.rb +18 -18
  198. data/stdlib/date.rb +85 -66
  199. data/stdlib/delegate.rb +2 -2
  200. data/stdlib/e2mmap.rb +176 -0
  201. data/stdlib/encoding.rb +1 -1
  202. data/stdlib/erb.rb +1 -1
  203. data/stdlib/forwardable.rb +14 -14
  204. data/stdlib/json.rb +1 -2
  205. data/stdlib/logger.rb +112 -0
  206. data/stdlib/math.rb +1 -1
  207. data/stdlib/matrix.rb +2169 -0
  208. data/stdlib/matrix/eigenvalue_decomposition.rb +883 -0
  209. data/stdlib/matrix/lup_decomposition.rb +219 -0
  210. data/stdlib/nashorn/file.rb +7 -9
  211. data/stdlib/native.rb +69 -63
  212. data/stdlib/nodejs.rb +3 -0
  213. data/stdlib/nodejs/dir.rb +25 -4
  214. data/stdlib/nodejs/env.rb +40 -0
  215. data/stdlib/nodejs/file.rb +184 -34
  216. data/stdlib/nodejs/fileutils.rb +4 -4
  217. data/stdlib/nodejs/io.rb +4 -46
  218. data/stdlib/nodejs/irb.rb +27 -29
  219. data/stdlib/nodejs/kernel.rb +2 -11
  220. data/stdlib/nodejs/node_modules/balanced-match/.npmignore +5 -0
  221. data/stdlib/nodejs/node_modules/balanced-match/LICENSE.md +21 -0
  222. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match → balanced-match}/README.md +13 -2
  223. data/stdlib/nodejs/node_modules/balanced-match/index.js +59 -0
  224. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match → balanced-match}/package.json +46 -42
  225. data/stdlib/nodejs/node_modules/brace-expansion/LICENSE +21 -0
  226. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion → brace-expansion}/README.md +9 -1
  227. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion → brace-expansion}/index.js +12 -2
  228. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion → brace-expansion}/package.json +48 -48
  229. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/.travis.yml +0 -0
  230. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/LICENSE +0 -0
  231. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/README.markdown +0 -0
  232. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/example/map.js +0 -0
  233. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/index.js +0 -0
  234. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/package.json +47 -42
  235. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map → concat-map}/test/map.js +0 -0
  236. data/stdlib/nodejs/node_modules/fs.realpath/LICENSE +43 -0
  237. data/stdlib/nodejs/node_modules/fs.realpath/README.md +33 -0
  238. data/stdlib/nodejs/node_modules/fs.realpath/index.js +66 -0
  239. data/stdlib/nodejs/node_modules/fs.realpath/old.js +303 -0
  240. data/stdlib/nodejs/node_modules/fs.realpath/package.json +59 -0
  241. data/stdlib/nodejs/node_modules/glob/README.md +57 -46
  242. data/stdlib/nodejs/node_modules/glob/changelog.md +67 -0
  243. data/stdlib/nodejs/node_modules/glob/common.js +91 -28
  244. data/stdlib/nodejs/node_modules/glob/glob.js +196 -55
  245. data/stdlib/nodejs/node_modules/glob/package.json +55 -51
  246. data/stdlib/nodejs/node_modules/glob/sync.js +116 -39
  247. data/stdlib/nodejs/node_modules/{glob/node_modules/inflight → inflight}/LICENSE +0 -0
  248. data/stdlib/nodejs/node_modules/{glob/node_modules/inflight → inflight}/README.md +0 -0
  249. data/stdlib/nodejs/node_modules/inflight/inflight.js +54 -0
  250. data/stdlib/nodejs/node_modules/inflight/package.json +58 -0
  251. data/stdlib/nodejs/node_modules/{glob/node_modules/inherits → inherits}/LICENSE +0 -0
  252. data/stdlib/nodejs/node_modules/{glob/node_modules/inherits → inherits}/README.md +0 -0
  253. data/stdlib/nodejs/node_modules/inherits/inherits.js +7 -0
  254. data/stdlib/nodejs/node_modules/{glob/node_modules/inherits → inherits}/inherits_browser.js +0 -0
  255. data/stdlib/nodejs/node_modules/inherits/package.json +61 -0
  256. data/stdlib/nodejs/node_modules/{glob/node_modules/inflight/node_modules/wrappy → minimatch}/LICENSE +0 -0
  257. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch → minimatch}/README.md +2 -9
  258. data/stdlib/nodejs/node_modules/{glob/node_modules/minimatch → minimatch}/minimatch.js +284 -206
  259. data/stdlib/nodejs/node_modules/minimatch/package.json +63 -0
  260. data/stdlib/nodejs/node_modules/{glob/node_modules/once/node_modules/wrappy → once}/LICENSE +0 -0
  261. data/stdlib/nodejs/node_modules/{glob/node_modules/once → once}/README.md +28 -0
  262. data/stdlib/nodejs/node_modules/once/once.js +42 -0
  263. data/stdlib/nodejs/node_modules/once/package.json +67 -0
  264. data/stdlib/nodejs/node_modules/path-is-absolute/index.js +20 -0
  265. data/stdlib/nodejs/node_modules/path-is-absolute/license +21 -0
  266. data/stdlib/nodejs/node_modules/path-is-absolute/package.json +75 -0
  267. data/stdlib/nodejs/node_modules/path-is-absolute/readme.md +59 -0
  268. data/stdlib/nodejs/node_modules/unxhr/LICENSE +22 -0
  269. data/stdlib/nodejs/node_modules/unxhr/README.md +41 -0
  270. data/stdlib/nodejs/node_modules/unxhr/lib/XMLHttpRequest.js +598 -0
  271. data/stdlib/nodejs/node_modules/unxhr/lib/browser.js +2 -0
  272. data/stdlib/nodejs/node_modules/unxhr/lib/request.js +63 -0
  273. data/stdlib/nodejs/node_modules/unxhr/package.json +75 -0
  274. data/stdlib/nodejs/node_modules/wrappy/LICENSE +15 -0
  275. data/stdlib/nodejs/node_modules/{glob/node_modules/inflight/node_modules/wrappy → wrappy}/README.md +0 -0
  276. data/stdlib/nodejs/node_modules/wrappy/package.json +59 -0
  277. data/stdlib/nodejs/node_modules/{glob/node_modules/inflight/node_modules/wrappy → wrappy}/wrappy.js +0 -0
  278. data/stdlib/nodejs/open-uri.rb +26 -0
  279. data/stdlib/nodejs/package-lock.json +88 -0
  280. data/stdlib/nodejs/package.json +2 -1
  281. data/stdlib/nodejs/pathname.rb +20 -0
  282. data/stdlib/nodejs/require.rb +3 -3
  283. data/stdlib/nodejs/stacktrace.rb +1 -1
  284. data/stdlib/nodejs/yaml.rb +1 -1
  285. data/stdlib/opal-builder.rb +1 -0
  286. data/stdlib/opal-parser.rb +4 -1
  287. data/stdlib/opal-platform.rb +8 -10
  288. data/stdlib/opal-source-maps.rb +0 -1
  289. data/stdlib/open-uri.rb +349 -0
  290. data/stdlib/ostruct.rb +19 -17
  291. data/stdlib/pathname.rb +22 -22
  292. data/stdlib/pp.rb +5 -5
  293. data/stdlib/promise.rb +30 -26
  294. data/stdlib/rbconfig/sizeof.rb +50 -0
  295. data/stdlib/securerandom.rb +1 -1
  296. data/stdlib/set.rb +21 -23
  297. data/stdlib/singleton.rb +3 -4
  298. data/stdlib/stringio.rb +33 -0
  299. data/stdlib/strscan.rb +55 -55
  300. data/stdlib/template.rb +1 -2
  301. data/stdlib/thread.rb +6 -7
  302. data/tasks/benchmarking.rake +1 -1
  303. data/tasks/building.rake +4 -12
  304. data/tasks/linting.rake +17 -2
  305. data/tasks/releasing.rake +84 -0
  306. data/tasks/testing.rake +57 -15
  307. data/tasks/testing/mspec_special_calls.rb +23 -4
  308. data/vendored-minitest/minitest.rb +1 -1
  309. metadata +169 -168
  310. data/bin/opal-build +0 -3
  311. data/exe/opal-mspec +0 -10
  312. data/lib/opal/nodes/args/initialize_kwargs.rb +0 -29
  313. data/lib/opal/nodes/args/kwarg.rb +0 -31
  314. data/lib/opal/nodes/args/kwoptarg.rb +0 -34
  315. data/lib/opal/nodes/args/kwrestarg.rb +0 -39
  316. data/lib/opal/nodes/args/mlhsarg.rb +0 -78
  317. data/lib/opal/nodes/args/normarg.rb +0 -29
  318. data/lib/opal/nodes/args/optarg.rb +0 -25
  319. data/lib/opal/nodes/args/post_args.rb +0 -201
  320. data/lib/opal/nodes/args/post_kwargs.rb +0 -32
  321. data/lib/opal/nodes/args/restarg.rb +0 -38
  322. data/lib/opal/nodes/inline_args.rb +0 -60
  323. data/opal/corelib/string/inheritance.rb +0 -123
  324. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/.eslintrc +0 -17
  325. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/inflight.js +0 -44
  326. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +0 -52
  327. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +0 -51
  328. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/package.json +0 -61
  329. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/test.js +0 -97
  330. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits.js +0 -1
  331. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/package.json +0 -51
  332. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/test.js +0 -25
  333. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.npmignore +0 -1
  334. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.travis.yml +0 -4
  335. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/LICENSE +0 -23
  336. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/benchmark.js +0 -15
  337. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/browser.js +0 -1181
  338. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +0 -2
  339. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +0 -3
  340. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +0 -8
  341. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +0 -2
  342. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +0 -4
  343. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +0 -6
  344. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +0 -5
  345. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +0 -38
  346. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +0 -56
  347. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +0 -32
  348. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +0 -1075
  349. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +0 -182
  350. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +0 -9
  351. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +0 -10
  352. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +0 -24
  353. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +0 -15
  354. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +0 -16
  355. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +0 -10
  356. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +0 -13
  357. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +0 -7
  358. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +0 -50
  359. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/package.json +0 -60
  360. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/basic.js +0 -399
  361. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/brace-expand.js +0 -45
  362. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/defaults.js +0 -274
  363. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +0 -8
  364. data/stdlib/nodejs/node_modules/glob/node_modules/once/LICENSE +0 -27
  365. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +0 -36
  366. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +0 -52
  367. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +0 -51
  368. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +0 -33
  369. data/stdlib/nodejs/node_modules/glob/node_modules/once/once.js +0 -21
  370. data/stdlib/nodejs/node_modules/glob/node_modules/once/package.json +0 -60
  371. data/stdlib/nodejs/node_modules/glob/node_modules/once/test/once.js +0 -23
  372. data/stdlib/nodejs/rubygems.rb +0 -68
  373. data/stdlib/source_map.rb +0 -5
  374. data/stdlib/source_map/map.rb +0 -220
  375. data/stdlib/source_map/mapping.rb +0 -26
  376. data/stdlib/source_map/offset.rb +0 -88
  377. data/stdlib/source_map/version.rb +0 -3
  378. data/stdlib/source_map/vlq.rb +0 -99
  379. data/stdlib/sourcemap.rb +0 -1
@@ -5,20 +5,8 @@ module Marshal
5
5
  MAJOR_VERSION = 4
6
6
  MINOR_VERSION = 8
7
7
 
8
- # For simulating binary strings
9
- #
10
- class BinaryString < String
11
- def encoding
12
- Encoding::BINARY
13
- end
14
-
15
- def +(other)
16
- BinaryString.new(super)
17
- end
18
- end
19
-
20
8
  class << self
21
- def dump(object)
9
+ def dump(object)
22
10
  WriteBuffer.new(object).write
23
11
  end
24
12
 
@@ -41,7 +41,7 @@ module Marshal
41
41
  def read(cache: true)
42
42
  code = read_char
43
43
  # The first character indicates the type of the object
44
- result = case code
44
+ case code
45
45
  when '0'
46
46
  nil
47
47
  when 'T'
@@ -93,14 +93,13 @@ module Marshal
93
93
  when 'd'
94
94
  raise NotImplementedError, 'Data type cannot be demarshaled'
95
95
  else
96
- raise ArgumentError, "dump format error"
96
+ raise ArgumentError, 'dump format error'
97
97
  end
98
- result
99
98
  end
100
99
 
101
100
  def read_byte
102
101
  if @index >= length
103
- raise ArgumentError, "marshal data too short"
102
+ raise ArgumentError, 'marshal data too short'
104
103
  end
105
104
  result = @buffer[@index]
106
105
  @index += 1
@@ -155,15 +154,15 @@ module Marshal
155
154
  #
156
155
  def read_float
157
156
  s = read_string(cache: false)
158
- result = if s == "nan"
159
- 0.0 / 0
160
- elsif s == "inf"
161
- 1.0 / 0
162
- elsif s == "-inf"
163
- -1.0 / 0
164
- else
165
- s.to_f
166
- end
157
+ result = if s == 'nan'
158
+ 0.0 / 0
159
+ elsif s == 'inf'
160
+ 1.0 / 0
161
+ elsif s == '-inf'
162
+ -1.0 / 0
163
+ else
164
+ s.to_f
165
+ end
167
166
  @object_cache << result
168
167
  result
169
168
  end
@@ -175,7 +174,7 @@ module Marshal
175
174
  size = read_fixnum * 2
176
175
  result = 0
177
176
  (0...size).each do |exp|
178
- result += (read_char.ord) * 2 ** (exp * 8)
177
+ result += read_char.ord * 2**(exp * 8)
179
178
  end
180
179
  result = result.to_i * sign
181
180
  @object_cache << result
@@ -484,10 +483,10 @@ module Marshal
484
483
  value = read(cache: false)
485
484
 
486
485
  result = if klass < Hash
487
- klass[value]
488
- else
489
- klass.new(value)
490
- end
486
+ klass[value]
487
+ else
488
+ klass.new(value)
489
+ end
491
490
 
492
491
  @object_cache << result
493
492
 
@@ -555,11 +554,9 @@ module Marshal
555
554
  # re-raises Marshal-specific error when it's missing
556
555
  #
557
556
  def safe_const_get(const_name)
558
- begin
559
- Object.const_get(const_name)
560
- rescue NameError
561
- raise ArgumentError, "undefined class/module #{const_name}"
562
- end
557
+ Object.const_get(const_name)
558
+ rescue NameError
559
+ raise ArgumentError, "undefined class/module #{const_name}"
563
560
  end
564
561
  end
565
562
  end
@@ -14,7 +14,7 @@ class Boolean
14
14
  end
15
15
  end
16
16
 
17
- class Fixnum
17
+ class Integer
18
18
  def __marshal__(buffer)
19
19
  if self >= -0x40000000 && self < 0x40000000
20
20
  buffer.append('i')
@@ -116,7 +116,7 @@ class Module
116
116
  end
117
117
 
118
118
  buffer.save_link(self)
119
- buffer.append("m")
119
+ buffer.append('m')
120
120
  buffer.write_module(self)
121
121
  end
122
122
  end
@@ -132,7 +132,7 @@ class Class
132
132
  end
133
133
 
134
134
  buffer.save_link(self)
135
- buffer.append("c")
135
+ buffer.append('c')
136
136
  buffer.write_class(self)
137
137
  end
138
138
  end
@@ -141,7 +141,7 @@ class BasicObject
141
141
  def __marshal__(buffer)
142
142
  buffer.save_link(self)
143
143
  buffer.write_extends(self)
144
- buffer.append("o")
144
+ buffer.append('o')
145
145
  buffer.write_object(self)
146
146
  end
147
147
  end
@@ -150,7 +150,7 @@ class Range
150
150
  def __marshal__(buffer)
151
151
  buffer.save_link(self)
152
152
  buffer.write_extends(self)
153
- buffer.append("o")
153
+ buffer.append('o')
154
154
  buffer.append_symbol(self.class.name)
155
155
  buffer.write_fixnum(3)
156
156
  buffer.append_symbol('excl')
@@ -169,7 +169,7 @@ class Struct
169
169
  buffer.write_extends(self)
170
170
  buffer.append('S')
171
171
  buffer.append_symbol(self.class.name)
172
- buffer.write_fixnum(self.length)
172
+ buffer.write_fixnum(length)
173
173
  each_pair do |attr_name, value|
174
174
  buffer.append_symbol(attr_name)
175
175
  buffer.write(value)
@@ -182,9 +182,17 @@ module Marshal
182
182
  class WriteBuffer
183
183
  attr_reader :buffer
184
184
 
185
+ %x{
186
+ function binaryString(s) {
187
+ s = new String(s);
188
+ s.encoding = #{Encoding::BINARY};
189
+ return s;
190
+ }
191
+ }
192
+
185
193
  def initialize(object)
186
194
  @object = object
187
- @buffer = BinaryString.new
195
+ @buffer = ''
188
196
  @cache = []
189
197
  @extends = Hash.new { |h, k| h[k] = [] }
190
198
  append(version)
@@ -202,7 +210,7 @@ module Marshal
202
210
  when nil, true, false, Proc, Method, MatchData, Range, Struct, Array, Class, Module, Hash, Regexp
203
211
  object.__marshal__(self)
204
212
  when Integer
205
- Fixnum.instance_method(:__marshal__).bind(object).call(self)
213
+ Integer.instance_method(:__marshal__).bind(object).call(self)
206
214
  when Float
207
215
  Float.instance_method(:__marshal__).bind(object).call(self)
208
216
  when String
@@ -212,7 +220,7 @@ module Marshal
212
220
  end
213
221
  end
214
222
 
215
- @buffer
223
+ `binaryString(#{@buffer})`
216
224
  end
217
225
 
218
226
  def write_fixnum(n)
@@ -265,7 +273,7 @@ module Marshal
265
273
 
266
274
  arr.each do |x|
267
275
  append(`String.fromCharCode(x & 0xff)`)
268
- append(`String.fromCharCode(#{(x/0x100).floor})`)
276
+ append(`String.fromCharCode(#{(x / 0x100).floor})`)
269
277
  end
270
278
  end
271
279
 
@@ -326,7 +334,7 @@ module Marshal
326
334
  end
327
335
 
328
336
  def write_ivars_suffix(object, force = false)
329
- if object.instance_variables.length == 0 && !force
337
+ if object.instance_variables.empty? && !force
330
338
  return
331
339
  end
332
340
 
@@ -341,7 +349,7 @@ module Marshal
341
349
  singleton_mods = object.singleton_class.ancestors.reject { |mod| mod.is_a?(Class) }
342
350
  class_mods = object.class.ancestors.reject { |mod| mod.is_a?(Class) }
343
351
  own_mods = singleton_mods - class_mods
344
- if own_mods.length > 0
352
+ unless own_mods.empty?
345
353
  own_mods.each do |mod|
346
354
  append('e')
347
355
  append_symbol(mod.name)
@@ -382,7 +390,7 @@ module Marshal
382
390
  value = object._dump(0)
383
391
 
384
392
  unless value.is_a?(String)
385
- raise TypeError, "_dump() must return string"
393
+ raise TypeError, '_dump() must return string'
386
394
  end
387
395
 
388
396
  write_ivars_prefix(value)
@@ -392,13 +400,13 @@ module Marshal
392
400
  end
393
401
 
394
402
  def write_ivars_prefix(object)
395
- if object.instance_variables.length > 0
403
+ unless object.instance_variables.empty?
396
404
  append('I')
397
405
  end
398
406
  end
399
407
 
400
408
  def append(s)
401
- @buffer += s
409
+ `#{@buffer} += #{s}`
402
410
  end
403
411
 
404
412
  def version
@@ -21,19 +21,15 @@ module Math
21
21
  end
22
22
 
23
23
  def self.float!(value)
24
- begin
25
- Float(value)
26
- rescue ArgumentError
27
- raise Opal.type_error(value, Float)
28
- end
24
+ Float(value)
25
+ rescue ArgumentError
26
+ raise Opal.type_error(value, Float)
29
27
  end
30
28
 
31
29
  def self.integer!(value)
32
- begin
33
- Integer(value)
34
- rescue ArgumentError
35
- raise Opal.type_error(value, Integer)
36
- end
30
+ Integer(value)
31
+ rescue ArgumentError
32
+ raise Opal.type_error(value, Integer)
37
33
  end
38
34
 
39
35
  module_function
@@ -158,7 +154,7 @@ module Math
158
154
 
159
155
  unless defined?(`Math.erf`)
160
156
  %x{
161
- Math.erf = function(x) {
157
+ Opal.defineProperty(Math, 'erf', function(x) {
162
158
  var A1 = 0.254829592,
163
159
  A2 = -0.284496736,
164
160
  A3 = 1.421413741,
@@ -178,7 +174,7 @@ module Math
178
174
  var y = 1.0 - (((((A5 * t + A4) * t) + A3) * t + A2) * t + A1) * t * Math.exp(-x * x);
179
175
 
180
176
  return sign * y;
181
- }
177
+ });
182
178
  }
183
179
  end
184
180
 
@@ -188,7 +184,7 @@ module Math
188
184
 
189
185
  unless defined?(`Math.erfc`)
190
186
  %x{
191
- Math.erfc = function(x) {
187
+ Opal.defineProperty(Math, 'erfc', function(x) {
192
188
  var z = Math.abs(x),
193
189
  t = 1.0 / (0.5 * z + 1.0);
194
190
 
@@ -211,7 +207,7 @@ module Math
211
207
  else {
212
208
  return a;
213
209
  }
214
- }
210
+ });
215
211
  }
216
212
  end
217
213
 
@@ -274,7 +270,7 @@ module Math
274
270
  }
275
271
 
276
272
  if (n === -1 || n === -Infinity) {
277
- #{raise DomainError, "Numerical argument is out of domain - \"gamma\""};
273
+ #{raise DomainError, 'Numerical argument is out of domain - "gamma"'};
278
274
  }
279
275
 
280
276
  if (#{Integer === n}) {
@@ -352,7 +348,7 @@ module Math
352
348
 
353
349
  %x{
354
350
  if (isNaN(exponent)) {
355
- #{raise RangeError, "float NaN out of range of integer"};
351
+ #{raise RangeError, 'float NaN out of range of integer'};
356
352
  }
357
353
 
358
354
  return mantissa * Math.pow(2, exponent);
@@ -26,9 +26,9 @@ class Method
26
26
 
27
27
  def call(*args, &block)
28
28
  %x{
29
- #@method.$$p = block;
29
+ #{@method}.$$p = block;
30
30
 
31
- return #@method.apply(#@receiver, args);
31
+ return #{@method}.apply(#{@receiver}, args);
32
32
  }
33
33
  end
34
34
 
@@ -41,8 +41,10 @@ class Method
41
41
  def to_proc
42
42
  %x{
43
43
  var proc = self.$call.bind(self);
44
- proc.$$unbound = #@method;
44
+ proc.$$unbound = #{@method};
45
45
  proc.$$is_lambda = true;
46
+ proc.$$arity = #{@method}.$$arity;
47
+ proc.$$parameters = #{@method}.$$parameters;
46
48
  return proc;
47
49
  }
48
50
  end
@@ -1,15 +1,15 @@
1
1
  class Module
2
2
  def self.allocate
3
3
  %x{
4
- var module;
5
-
6
- module = Opal.module_allocate(self);
4
+ var module = Opal.allocate_module(nil, function(){});
5
+ // Link the prototype of Module subclasses
6
+ if (self !== Opal.Module) Object.setPrototypeOf(module, self.$$prototype);
7
7
  return module;
8
8
  }
9
9
  end
10
10
 
11
11
  def initialize(&block)
12
- `Opal.module_initialize(self, block)`
12
+ module_eval(&block) if block_given?
13
13
  end
14
14
 
15
15
  def ===(object)
@@ -20,7 +20,7 @@ class Module
20
20
 
21
21
  def <(other)
22
22
  unless Module === other
23
- raise TypeError, "compared with non class/module"
23
+ raise TypeError, 'compared with non class/module'
24
24
  end
25
25
 
26
26
  # class cannot be a descendant of itself
@@ -55,7 +55,7 @@ class Module
55
55
 
56
56
  def >(other)
57
57
  unless Module === other
58
- raise TypeError, "compared with non class/module"
58
+ raise TypeError, 'compared with non class/module'
59
59
  end
60
60
 
61
61
  other < self
@@ -111,7 +111,7 @@ class Module
111
111
 
112
112
  def attr_reader(*names)
113
113
  %x{
114
- var proto = self.$$proto;
114
+ var proto = self.$$prototype;
115
115
 
116
116
  for (var i = names.length - 1; i >= 0; i--) {
117
117
  var name = names[i],
@@ -132,17 +132,12 @@ class Module
132
132
  })(ivar);
133
133
 
134
134
  // initialize the instance variable as nil
135
- proto[ivar] = nil;
135
+ Opal.defineProperty(proto, ivar, nil);
136
136
 
137
137
  body.$$parameters = [];
138
138
  body.$$arity = 0;
139
139
 
140
- if (self.$$is_singleton) {
141
- proto.constructor.prototype[id] = body;
142
- }
143
- else {
144
- Opal.defn(self, id, body);
145
- }
140
+ Opal.defn(self, id, body);
146
141
  }
147
142
  }
148
143
 
@@ -151,7 +146,7 @@ class Module
151
146
 
152
147
  def attr_writer(*names)
153
148
  %x{
154
- var proto = self.$$proto;
149
+ var proto = self.$$prototype;
155
150
 
156
151
  for (var i = names.length - 1; i >= 0; i--) {
157
152
  var name = names[i],
@@ -170,14 +165,9 @@ class Module
170
165
  body.$$arity = 1;
171
166
 
172
167
  // initialize the instance variable as nil
173
- proto[ivar] = nil;
168
+ Opal.defineProperty(proto, ivar, nil);
174
169
 
175
- if (self.$$is_singleton) {
176
- proto.constructor.prototype[id] = body;
177
- }
178
- else {
179
- Opal.defn(self, id, body);
180
- }
170
+ Opal.defn(self, id, body);
181
171
  }
182
172
  }
183
173
 
@@ -229,16 +219,16 @@ class Module
229
219
  delete self.$$cvars[name];
230
220
  return value;
231
221
  } else {
232
- #{raise NameError.new("cannot remove #{name} for #{self}")}
222
+ #{raise NameError, "cannot remove #{name} for #{self}"}
233
223
  }
234
224
  }
235
225
  end
236
226
 
237
- def constants(inherit=true)
227
+ def constants(inherit = true)
238
228
  `Opal.constants(self, inherit)`
239
229
  end
240
230
 
241
- def self.constants(inherit=undefined)
231
+ def self.constants(inherit = undefined)
242
232
  %x{
243
233
  if (inherit == null) {
244
234
  var nesting = (self.$$nesting || []).concat(Opal.Object),
@@ -309,7 +299,7 @@ class Module
309
299
 
310
300
  %x{
311
301
  if (inherit) {
312
- return Opal.const_get_relative([self], name);
302
+ return $$([self], name);
313
303
  } else {
314
304
  return Opal.const_get_local(self, name);
315
305
  }
@@ -337,7 +327,7 @@ class Module
337
327
  def const_set(name, value)
338
328
  name = Opal.const_name!(name)
339
329
 
340
- if !(name =~ Opal::CONST_NAME_REGEXP) || name.start_with?('::')
330
+ if name !~ Opal::CONST_NAME_REGEXP || name.start_with?('::')
341
331
  raise NameError.new("wrong constant name #{name}", name)
342
332
  end
343
333
 
@@ -351,25 +341,25 @@ class Module
351
341
 
352
342
  def define_method(name, method = undefined, &block)
353
343
  if `method === undefined && block === nil`
354
- raise ArgumentError, "tried to create a Proc object without a block"
344
+ raise ArgumentError, 'tried to create a Proc object without a block'
355
345
  end
356
346
 
357
347
  block ||= case method
358
- when Proc
359
- method
348
+ when Proc
349
+ method
360
350
 
361
- when Method
362
- `#{method.to_proc}.$$unbound`
351
+ when Method
352
+ `#{method.to_proc}.$$unbound`
363
353
 
364
- when UnboundMethod
365
- lambda {|*args|
366
- bound = method.bind(self)
367
- bound.call(*args)
368
- }
354
+ when UnboundMethod
355
+ ->(*args) {
356
+ bound = method.bind(self)
357
+ bound.call(*args)
358
+ }
369
359
 
370
- else
371
- raise TypeError, "wrong argument type #{block.class} (expected Proc/Method)"
372
- end
360
+ else
361
+ raise TypeError, "wrong argument type #{block.class} (expected Proc/Method)"
362
+ end
373
363
 
374
364
  %x{
375
365
  var id = '$' + name;
@@ -417,32 +407,7 @@ class Module
417
407
  end
418
408
 
419
409
  def included_modules
420
- %x{
421
- var results;
422
-
423
- var module_chain = function(klass) {
424
- var included = [];
425
-
426
- for (var i = 0, ii = klass.$$inc.length; i < ii; i++) {
427
- var mod_or_class = klass.$$inc[i];
428
- included.push(mod_or_class);
429
- included = included.concat(module_chain(mod_or_class));
430
- }
431
-
432
- return included;
433
- };
434
-
435
- results = module_chain(self);
436
-
437
- // need superclass's modules
438
- if (self.$$is_class) {
439
- for (var cls = self; cls; cls = cls.$$super) {
440
- results = results.concat(module_chain(cls));
441
- }
442
- }
443
-
444
- return results;
445
- }
410
+ `Opal.included_modules(self)`
446
411
  end
447
412
 
448
413
  def include?(mod)
@@ -466,7 +431,7 @@ class Module
466
431
 
467
432
  def instance_method(name)
468
433
  %x{
469
- var meth = self.$$proto['$' + name];
434
+ var meth = self.$$prototype['$' + name];
470
435
 
471
436
  if (!meth || meth.$$stub) {
472
437
  #{raise NameError.new("undefined method `#{name}' for class `#{self.name}'", name)};
@@ -478,43 +443,11 @@ class Module
478
443
 
479
444
  def instance_methods(include_super = true)
480
445
  %x{
481
- var value,
482
- methods = [],
483
- proto = self.$$proto;
484
-
485
- for (var prop in proto) {
486
- if (prop.charAt(0) !== '$' || prop.charAt(1) === '$') {
487
- continue;
488
- }
489
-
490
- value = proto[prop];
491
-
492
- if (typeof(value) !== "function") {
493
- continue;
494
- }
495
-
496
- if (value.$$stub) {
497
- continue;
498
- }
499
-
500
- if (!self.$$is_module) {
501
- if (self !== Opal.BasicObject && value === Opal.BasicObject.$$proto[prop]) {
502
- continue;
503
- }
504
-
505
- if (!include_super && !proto.hasOwnProperty(prop)) {
506
- continue;
507
- }
508
-
509
- if (!include_super && value.$$donated) {
510
- continue;
511
- }
512
- }
513
-
514
- methods.push(prop.substr(1));
446
+ if (#{Opal.truthy?(include_super)}) {
447
+ return Opal.instance_methods(self);
448
+ } else {
449
+ return Opal.own_instance_methods(self);
515
450
  }
516
-
517
- return methods;
518
451
  }
519
452
  end
520
453
 
@@ -524,6 +457,9 @@ class Module
524
457
  def extended(mod)
525
458
  end
526
459
 
460
+ def extend_object(object)
461
+ end
462
+
527
463
  def method_added(*)
528
464
  end
529
465
 
@@ -535,7 +471,7 @@ class Module
535
471
 
536
472
  def module_eval(*args, &block)
537
473
  if block.nil? && `!!Opal.compile`
538
- Kernel.raise ArgumentError, "wrong number of arguments (0 for 1..3)" unless (1..3).cover? args.size
474
+ Kernel.raise ArgumentError, 'wrong number of arguments (0 for 1..3)' unless (1..3).cover? args.size
539
475
 
540
476
  string, file, _lineno = *args
541
477
  default_eval_options = { file: (file || '(eval)'), eval: true }
@@ -548,9 +484,9 @@ class Module
548
484
  })(self)
549
485
  }
550
486
  end
551
- elsif args.size > 0
552
- Kernel.raise ArgumentError, "wrong number of arguments (#{args.size} for 0)"+
553
- "\n\n NOTE:If you want to enable passing a String argument please add \"require 'opal-parser'\" to your script\n"
487
+ elsif args.any?
488
+ Kernel.raise ArgumentError, "wrong number of arguments (#{args.size} for 0)" \
489
+ "\n\n NOTE:If you want to enable passing a String argument please add \"require 'opal-parser'\" to your script\n"
554
490
  end
555
491
 
556
492
  %x{
@@ -587,7 +523,7 @@ class Module
587
523
 
588
524
  def method_defined?(method)
589
525
  %x{
590
- var body = self.$$proto['$' + method];
526
+ var body = self.$$prototype['$' + method];
591
527
  return (!!body) && !body.$$stub;
592
528
  }
593
529
  end
@@ -601,7 +537,7 @@ class Module
601
537
  for (var i = 0, length = methods.length; i < length; i++) {
602
538
  var meth = methods[i],
603
539
  id = '$' + meth,
604
- func = self.$$proto[id];
540
+ func = self.$$prototype[id];
605
541
 
606
542
  Opal.defs(self, id, func);
607
543
  }
@@ -640,6 +576,41 @@ class Module
640
576
  }
641
577
  end
642
578
 
579
+ def prepend(*mods)
580
+ %x{
581
+ if (mods.length === 0) {
582
+ #{raise ArgumentError, 'wrong number of arguments (given 0, expected 1+)'}
583
+ }
584
+
585
+ for (var i = mods.length - 1; i >= 0; i--) {
586
+ var mod = mods[i];
587
+
588
+ if (!mod.$$is_module) {
589
+ #{raise TypeError, "wrong argument type #{`mod`.class} (expected Module)"};
590
+ }
591
+
592
+ #{`mod`.prepend_features self};
593
+ #{`mod`.prepended self};
594
+ }
595
+ }
596
+
597
+ self
598
+ end
599
+
600
+ def prepend_features(prepender)
601
+ %x{
602
+ if (!self.$$is_module) {
603
+ #{raise TypeError, "wrong argument type #{self.class} (expected Module)"};
604
+ }
605
+
606
+ Opal.prepend_features(self, prepender)
607
+ }
608
+ self
609
+ end
610
+
611
+ def prepended(mod)
612
+ end
613
+
643
614
  def remove_const(name)
644
615
  `Opal.const_remove(self, name)`
645
616
  end