opal 0.10.6 → 0.11.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (450) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +19 -0
  3. data/.gitmodules +1 -1
  4. data/.jshintrc +1 -2
  5. data/.travis.yml +26 -18
  6. data/CHANGELOG.md +89 -23
  7. data/{CODE_OF_CONDUCT.md → CONDUCT.md} +0 -0
  8. data/Gemfile +19 -21
  9. data/HACKING.md +2 -0
  10. data/README.md +7 -6
  11. data/Rakefile +1 -1
  12. data/appveyor.yml +21 -4
  13. data/benchmark-ips/bm_case.rb +33 -0
  14. data/benchmark-ips/bm_constants_lookup.rb +13 -0
  15. data/benchmark-ips/bm_is_number.rb +29 -0
  16. data/benchmark-ips/bm_symbol_to_proc.rb +19 -0
  17. data/benchmark/bm_constant_lookup_big.rb +799 -0
  18. data/benchmark/bm_constant_lookup_small.rb +59 -0
  19. data/benchmark/bm_module_definition_big.rb +400 -0
  20. data/benchmark/bm_module_definition_small.rb +30 -0
  21. data/bin/opal-repl +23 -1
  22. data/docs/compiled_ruby.md +16 -14
  23. data/docs/faq.md +3 -3
  24. data/docs/rspec.md +2 -1
  25. data/docs/unsupported_features.md +6 -4
  26. data/examples/rack/Gemfile +1 -0
  27. data/examples/rack/app/application.rb +14 -3
  28. data/examples/rack/app/user.rb +2 -0
  29. data/examples/rack/config.ru +1 -1
  30. data/examples/rack/index.html.erb +1 -0
  31. data/lib/opal.rb +6 -1
  32. data/lib/opal/ast/builder.rb +17 -0
  33. data/lib/opal/ast/node.rb +30 -0
  34. data/lib/opal/builder.rb +14 -3
  35. data/lib/opal/builder_processors.rb +1 -0
  36. data/lib/opal/cli.rb +45 -59
  37. data/lib/opal/cli_options.rb +11 -7
  38. data/lib/opal/cli_runners.rb +1 -0
  39. data/lib/opal/cli_runners/applescript.rb +3 -3
  40. data/lib/opal/cli_runners/nashorn.rb +1 -0
  41. data/lib/opal/cli_runners/nodejs.rb +4 -1
  42. data/lib/opal/cli_runners/phantom.js +1 -2
  43. data/lib/opal/cli_runners/phantomjs.rb +3 -2
  44. data/lib/opal/cli_runners/server.rb +1 -0
  45. data/lib/opal/compiler.rb +145 -94
  46. data/lib/opal/config.rb +1 -0
  47. data/lib/opal/deprecations.rb +18 -0
  48. data/lib/opal/erb.rb +1 -0
  49. data/lib/opal/errors.rb +1 -0
  50. data/lib/opal/fragment.rb +1 -0
  51. data/lib/opal/hike_path_finder.rb +1 -0
  52. data/lib/opal/nodes.rb +3 -0
  53. data/lib/opal/nodes/arglist.rb +2 -1
  54. data/lib/opal/nodes/args/initialize_kwargs.rb +1 -0
  55. data/lib/opal/nodes/args/kwarg.rb +7 -7
  56. data/lib/opal/nodes/args/kwoptarg.rb +6 -7
  57. data/lib/opal/nodes/args/kwrestarg.rb +5 -5
  58. data/lib/opal/nodes/args/mlhsarg.rb +3 -2
  59. data/lib/opal/nodes/args/normarg.rb +6 -7
  60. data/lib/opal/nodes/args/optarg.rb +5 -7
  61. data/lib/opal/nodes/args/post_args.rb +6 -5
  62. data/lib/opal/nodes/args/post_kwargs.rb +1 -0
  63. data/lib/opal/nodes/args/restarg.rb +7 -7
  64. data/lib/opal/nodes/array.rb +1 -0
  65. data/lib/opal/nodes/base.rb +24 -3
  66. data/lib/opal/nodes/call.rb +167 -155
  67. data/lib/opal/nodes/call_special.rb +31 -217
  68. data/lib/opal/nodes/case.rb +36 -22
  69. data/lib/opal/nodes/class.rb +4 -3
  70. data/lib/opal/nodes/constants.rb +28 -48
  71. data/lib/opal/nodes/csend.rb +25 -0
  72. data/lib/opal/nodes/def.rb +49 -16
  73. data/lib/opal/nodes/defined.rb +170 -60
  74. data/lib/opal/nodes/definitions.rb +40 -133
  75. data/lib/opal/nodes/defs.rb +29 -0
  76. data/lib/opal/nodes/for.rb +52 -25
  77. data/lib/opal/nodes/hash.rb +12 -35
  78. data/lib/opal/nodes/helpers.rb +27 -54
  79. data/lib/opal/nodes/if.rb +21 -32
  80. data/lib/opal/nodes/inline_args.rb +12 -13
  81. data/lib/opal/nodes/iter.rb +61 -36
  82. data/lib/opal/nodes/literal.rb +189 -116
  83. data/lib/opal/nodes/logic.rb +20 -25
  84. data/lib/opal/nodes/masgn.rb +20 -18
  85. data/lib/opal/nodes/module.rb +10 -11
  86. data/lib/opal/nodes/node_with_args.rb +14 -17
  87. data/lib/opal/nodes/rescue.rb +37 -70
  88. data/lib/opal/nodes/runtime_helpers.rb +8 -3
  89. data/lib/opal/nodes/scope.rb +9 -5
  90. data/lib/opal/nodes/singleton_class.rb +4 -3
  91. data/lib/opal/nodes/super.rb +115 -87
  92. data/lib/opal/nodes/top.rb +7 -2
  93. data/lib/opal/nodes/variables.rb +46 -35
  94. data/lib/opal/nodes/while.rb +11 -1
  95. data/lib/opal/nodes/yield.rb +1 -17
  96. data/lib/opal/parser.rb +28 -770
  97. data/lib/opal/path_reader.rb +5 -1
  98. data/lib/opal/paths.rb +10 -4
  99. data/lib/opal/regexp_anchors.rb +1 -0
  100. data/lib/opal/rewriter.rb +60 -0
  101. data/lib/opal/rewriters/base.rb +60 -0
  102. data/lib/opal/rewriters/binary_operator_assignment.rb +144 -0
  103. data/lib/opal/rewriters/block_to_iter.rb +17 -0
  104. data/lib/opal/rewriters/break_finder.rb +34 -0
  105. data/lib/opal/rewriters/dot_js_syntax.rb +60 -0
  106. data/lib/opal/rewriters/explicit_writer_return.rb +58 -0
  107. data/lib/opal/rewriters/js_reserved_words.rb +111 -0
  108. data/lib/opal/rewriters/logical_operator_assignment.rb +155 -0
  109. data/lib/opal/rewriters/opal_engine_check.rb +42 -0
  110. data/lib/opal/rewriters/rubyspec/filters_rewriter.rb +67 -0
  111. data/lib/opal/server.rb +4 -0
  112. data/lib/opal/simple_server.rb +100 -0
  113. data/lib/opal/source_map.rb +1 -1
  114. data/lib/opal/util.rb +5 -5
  115. data/lib/opal/version.rb +2 -1
  116. data/lib/tilt/opal.rb +1 -0
  117. data/opal.gemspec +8 -7
  118. data/opal/README.md +1 -1
  119. data/opal/corelib/array.rb +137 -83
  120. data/opal/corelib/basic_object.rb +6 -6
  121. data/opal/corelib/class.rb +14 -11
  122. data/opal/corelib/complex.rb +5 -1
  123. data/opal/corelib/constants.rb +3 -3
  124. data/opal/corelib/enumerable.rb +129 -11
  125. data/opal/corelib/error.rb +35 -17
  126. data/opal/corelib/file.rb +65 -170
  127. data/opal/corelib/hash.rb +128 -13
  128. data/opal/corelib/helpers.rb +12 -15
  129. data/opal/corelib/io.rb +1 -0
  130. data/opal/corelib/kernel.rb +40 -21
  131. data/opal/corelib/marshal/read_buffer.rb +1 -1
  132. data/opal/corelib/method.rb +33 -13
  133. data/opal/corelib/module.rb +133 -81
  134. data/opal/corelib/number.rb +141 -25
  135. data/opal/corelib/numeric.rb +0 -8
  136. data/opal/corelib/process.rb +44 -4
  137. data/opal/corelib/random.rb +117 -0
  138. data/opal/corelib/random/seedrandom.js.rb +15 -0
  139. data/opal/corelib/range.rb +133 -10
  140. data/opal/corelib/regexp.rb +37 -9
  141. data/opal/corelib/runtime.js +601 -390
  142. data/opal/corelib/string.rb +39 -8
  143. data/opal/corelib/string/encoding.rb +51 -7
  144. data/opal/corelib/struct.rb +20 -0
  145. data/opal/corelib/time.rb +3 -3
  146. data/opal/corelib/variables.rb +1 -1
  147. data/opal/opal.rb +1 -0
  148. data/spec/filters/bugs/array.rb +5 -1
  149. data/spec/filters/bugs/basicobject.rb +2 -5
  150. data/spec/filters/bugs/bigdecimal.rb +8 -22
  151. data/spec/filters/bugs/class.rb +2 -1
  152. data/spec/filters/bugs/comparable.rb +5 -0
  153. data/spec/filters/bugs/date.rb +3 -3
  154. data/spec/filters/bugs/enumerable.rb +4 -11
  155. data/spec/filters/bugs/enumerator.rb +2 -4
  156. data/spec/filters/bugs/exception.rb +16 -2
  157. data/spec/filters/bugs/file.rb +8 -0
  158. data/spec/filters/bugs/float.rb +7 -1
  159. data/spec/filters/bugs/hash.rb +6 -2
  160. data/spec/filters/bugs/integer.rb +2 -0
  161. data/spec/filters/bugs/io.rb +8 -0
  162. data/spec/filters/bugs/kernel.rb +9 -138
  163. data/spec/filters/bugs/language.rb +89 -174
  164. data/spec/filters/bugs/marshal.rb +33 -35
  165. data/spec/filters/bugs/method.rb +0 -24
  166. data/spec/filters/bugs/module.rb +19 -55
  167. data/spec/filters/bugs/numeric.rb +0 -119
  168. data/spec/filters/bugs/pathname.rb +2 -0
  169. data/spec/filters/bugs/proc.rb +5 -4
  170. data/spec/filters/bugs/random.rb +7 -0
  171. data/spec/filters/bugs/range.rb +12 -120
  172. data/spec/filters/bugs/rational.rb +1 -1
  173. data/spec/filters/bugs/regexp.rb +2 -40
  174. data/spec/filters/bugs/set.rb +0 -1
  175. data/spec/filters/bugs/string.rb +5 -8
  176. data/spec/filters/bugs/stringscanner.rb +11 -19
  177. data/spec/filters/bugs/time.rb +7 -1
  178. data/spec/filters/bugs/unboundmethod.rb +1 -11
  179. data/spec/filters/unsupported/array.rb +5 -1
  180. data/spec/filters/unsupported/basicobject.rb +1 -1
  181. data/spec/filters/unsupported/bignum.rb +4 -1
  182. data/spec/filters/unsupported/class.rb +1 -1
  183. data/spec/filters/unsupported/delegator.rb +1 -1
  184. data/spec/filters/unsupported/enumerable.rb +1 -1
  185. data/spec/filters/unsupported/enumerator.rb +1 -1
  186. data/spec/filters/unsupported/file.rb +4 -0
  187. data/spec/filters/unsupported/fixnum.rb +1 -1
  188. data/spec/filters/unsupported/float.rb +4 -1
  189. data/spec/filters/unsupported/freeze.rb +27 -5
  190. data/spec/filters/unsupported/hash.rb +7 -15
  191. data/spec/filters/unsupported/integer.rb +1 -1
  192. data/spec/filters/unsupported/kernel.rb +2 -1
  193. data/spec/filters/unsupported/language.rb +6 -1
  194. data/spec/filters/unsupported/marshal.rb +1 -1
  195. data/spec/filters/unsupported/matchdata.rb +4 -1
  196. data/spec/filters/unsupported/math.rb +1 -1
  197. data/spec/filters/unsupported/pathname.rb +1 -1
  198. data/spec/filters/unsupported/privacy.rb +141 -9
  199. data/spec/filters/unsupported/proc.rb +1 -1
  200. data/spec/filters/unsupported/random.rb +4 -0
  201. data/spec/filters/unsupported/range.rb +7 -0
  202. data/spec/filters/unsupported/regexp.rb +25 -15
  203. data/spec/filters/unsupported/set.rb +1 -1
  204. data/spec/filters/unsupported/singleton.rb +1 -1
  205. data/spec/filters/unsupported/string.rb +110 -101
  206. data/spec/filters/unsupported/struct.rb +1 -1
  207. data/spec/filters/unsupported/symbol.rb +2 -1
  208. data/spec/filters/unsupported/taint.rb +22 -7
  209. data/spec/filters/unsupported/thread.rb +1 -1
  210. data/spec/filters/unsupported/time.rb +1 -1
  211. data/spec/lib/builder_spec.rb +17 -0
  212. data/spec/lib/cli_spec.rb +37 -8
  213. data/spec/lib/compiler/call_spec.rb +98 -66
  214. data/spec/lib/compiler_spec.rb +39 -30
  215. data/spec/lib/dependency_resolver_spec.rb +2 -2
  216. data/spec/lib/deprecations_spec.rb +16 -0
  217. data/spec/lib/fixtures/source_location_test.rb +7 -0
  218. data/spec/lib/rewriters/binary_operator_assignment_spec.rb +151 -0
  219. data/spec/lib/rewriters/block_to_iter_spec.rb +28 -0
  220. data/spec/lib/rewriters/dot_js_syntax_spec.rb +108 -0
  221. data/spec/lib/rewriters/explicit_writer_return_spec.rb +186 -0
  222. data/spec/lib/rewriters/js_reserved_words_spec.rb +116 -0
  223. data/spec/lib/rewriters/logical_operator_assignment_spec.rb +202 -0
  224. data/spec/lib/rewriters/opal_engine_check_spec.rb +82 -0
  225. data/spec/lib/rewriters/rubyspec/filters_rewriter_spec.rb +53 -0
  226. data/spec/lib/simple_server_spec.rb +54 -0
  227. data/spec/mspec-opal/formatters.rb +65 -17
  228. data/spec/mspec-opal/runner.rb +47 -67
  229. data/spec/opal/core/date_spec.rb +14 -0
  230. data/spec/opal/core/exception_spec.rb +10 -0
  231. data/spec/opal/core/hash/internals_spec.rb +10 -10
  232. data/spec/opal/core/kernel/rand_spec.rb +0 -4
  233. data/spec/opal/core/kernel/respond_to_spec.rb +5 -2
  234. data/spec/opal/core/language/constant_lookup_spec.rb +38 -0
  235. data/spec/opal/core/language/predefined_spec.rb +1 -1
  236. data/spec/opal/core/language/safe_navigator_spec.rb +7 -0
  237. data/spec/opal/core/language/send_spec.rb +1 -9
  238. data/spec/opal/core/language/string_spec.rb +8 -8
  239. data/spec/opal/core/language/versions/def_2_0_spec.rb +0 -4
  240. data/spec/opal/core/language_spec.rb +32 -0
  241. data/spec/opal/core/module/const_get_spec.rb +1 -1
  242. data/spec/opal/core/runtime/is_a_spec.rb +36 -0
  243. data/spec/opal/core/runtime/rescue_spec.rb +35 -0
  244. data/spec/opal/core/runtime_spec.rb +4 -4
  245. data/spec/opal/core/string_spec.rb +8 -8
  246. data/spec/opal/core/time_spec.rb +26 -17
  247. data/spec/opal/stdlib/erb/quoted.opalerb +1 -1
  248. data/spec/opal/stdlib/json/parse_spec.rb +4 -0
  249. data/spec/opal/stdlib/native/hash_spec.rb +16 -0
  250. data/spec/ruby_specs +2 -1
  251. data/spec/spec_helper.rb +1 -0
  252. data/spec/support/rewriters_helper.rb +24 -0
  253. data/stdlib/base64.rb +4 -2
  254. data/stdlib/bigdecimal/bignumber.js.rb +1 -1
  255. data/stdlib/date.rb +18 -19
  256. data/stdlib/json.rb +16 -4
  257. data/stdlib/nashorn/file.rb +15 -0
  258. data/stdlib/native.rb +21 -12
  259. data/stdlib/nodejs/dir.rb +1 -1
  260. data/stdlib/nodejs/file.rb +49 -20
  261. data/stdlib/nodejs/io.rb +22 -1
  262. data/stdlib/nodejs/{node_modules/js-yaml/dist/js-yaml.js → js-yaml-3-6-1.js} +815 -626
  263. data/stdlib/nodejs/kernel.rb +3 -1
  264. data/stdlib/nodejs/package.json +0 -1
  265. data/stdlib/nodejs/stacktrace.rb +163 -0
  266. data/stdlib/nodejs/yaml.rb +2 -1
  267. data/stdlib/opal-platform.rb +15 -0
  268. data/stdlib/opal/platform.rb +5 -13
  269. data/stdlib/pathname.rb +1 -1
  270. data/stdlib/strscan.rb +15 -1
  271. data/stdlib/yaml.rb +1 -1
  272. data/tasks/benchmarking.rake +9 -0
  273. data/tasks/building.rake +24 -20
  274. data/tasks/linting.rake +24 -13
  275. data/tasks/testing.rake +322 -205
  276. data/tasks/testing/mspec_special_calls.rb +44 -15
  277. data/tasks/testing/opal_rspec_smoketest.Gemfile +13 -0
  278. data/test/nodejs/fixtures/hello.rb +1 -0
  279. data/test/nodejs/test_file.rb +57 -0
  280. data/test/nodejs/test_io.rb +18 -0
  281. data/test/nodejs/test_opal_builder.rb +12 -0
  282. data/test/opal/unsupported_and_bugs.rb +9 -0
  283. metadata +127 -240
  284. data/lib/opal/parser/grammar.rb +0 -6157
  285. data/lib/opal/parser/grammar.y +0 -2011
  286. data/lib/opal/parser/keywords.rb +0 -66
  287. data/lib/opal/parser/lexer.rb +0 -1352
  288. data/lib/opal/parser/parser_scope.rb +0 -28
  289. data/lib/opal/parser/sexp.rb +0 -90
  290. data/lib/opal/sprockets.rb +0 -77
  291. data/lib/opal/sprockets/environment.rb +0 -23
  292. data/lib/opal/sprockets/erb.rb +0 -28
  293. data/lib/opal/sprockets/path_reader.rb +0 -36
  294. data/lib/opal/sprockets/processor.rb +0 -173
  295. data/lib/opal/sprockets/server.rb +0 -133
  296. data/lib/opal/sprockets/source_map_header_patch.rb +0 -41
  297. data/lib/opal/sprockets/source_map_server.rb +0 -117
  298. data/spec/filters/bugs/compiler_opal.rb +0 -5
  299. data/spec/filters/bugs/language_opal.rb +0 -88
  300. data/spec/filters/unsupported/module.rb +0 -8
  301. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +0 -87
  302. data/spec/lib/lexer_spec.rb +0 -110
  303. data/spec/lib/parser/alias_spec.rb +0 -26
  304. data/spec/lib/parser/and_spec.rb +0 -13
  305. data/spec/lib/parser/aref_spec.rb +0 -10
  306. data/spec/lib/parser/attrasgn_spec.rb +0 -28
  307. data/spec/lib/parser/begin_spec.rb +0 -42
  308. data/spec/lib/parser/block_spec.rb +0 -12
  309. data/spec/lib/parser/break_spec.rb +0 -17
  310. data/spec/lib/parser/call_spec.rb +0 -201
  311. data/spec/lib/parser/class_spec.rb +0 -35
  312. data/spec/lib/parser/comments_spec.rb +0 -11
  313. data/spec/lib/parser/def_spec.rb +0 -109
  314. data/spec/lib/parser/if_spec.rb +0 -26
  315. data/spec/lib/parser/iter_spec.rb +0 -59
  316. data/spec/lib/parser/lambda_spec.rb +0 -219
  317. data/spec/lib/parser/literal_spec.rb +0 -118
  318. data/spec/lib/parser/masgn_spec.rb +0 -37
  319. data/spec/lib/parser/module_spec.rb +0 -27
  320. data/spec/lib/parser/not_spec.rb +0 -21
  321. data/spec/lib/parser/op_asgn1_spec.rb +0 -23
  322. data/spec/lib/parser/op_asgn2_spec.rb +0 -23
  323. data/spec/lib/parser/op_asgn_spec.rb +0 -17
  324. data/spec/lib/parser/or_spec.rb +0 -13
  325. data/spec/lib/parser/return_spec.rb +0 -22
  326. data/spec/lib/parser/sclass_spec.rb +0 -21
  327. data/spec/lib/parser/string_spec.rb +0 -286
  328. data/spec/lib/parser/super_spec.rb +0 -20
  329. data/spec/lib/parser/unary_spec.rb +0 -52
  330. data/spec/lib/parser/undef_spec.rb +0 -19
  331. data/spec/lib/parser/unless_spec.rb +0 -13
  332. data/spec/lib/parser/variables_spec.rb +0 -112
  333. data/spec/lib/parser/while_spec.rb +0 -15
  334. data/spec/lib/parser/yield_spec.rb +0 -20
  335. data/spec/lib/sprockets/erb_spec.rb +0 -38
  336. data/spec/lib/sprockets/path_reader_spec.rb +0 -41
  337. data/spec/lib/sprockets/processor_spec.rb +0 -79
  338. data/spec/lib/sprockets/server_spec.rb +0 -102
  339. data/spec/lib/sprockets_spec.rb +0 -39
  340. data/spec/lib/tilt/opal_spec.rb +0 -37
  341. data/spec/opal/core/language/block_spec.rb +0 -538
  342. data/spec/opal/core/language/proc_spec.rb +0 -263
  343. data/spec/opal/core/language/variables_spec.rb +0 -1366
  344. data/spec/opal/core/runtime/block_send_spec.rb +0 -28
  345. data/spec/opal/core/runtime/send_spec.rb +0 -34
  346. data/spec/support/parser_helpers.rb +0 -37
  347. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +0 -277
  348. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +0 -21
  349. data/stdlib/nodejs/node_modules/js-yaml/README.md +0 -288
  350. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +0 -140
  351. data/stdlib/nodejs/node_modules/js-yaml/bower.json +0 -23
  352. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +0 -3
  353. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +0 -102
  354. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +0 -18
  355. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +0 -31
  356. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +0 -22
  357. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +0 -18
  358. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +0 -197
  359. data/stdlib/nodejs/node_modules/js-yaml/index.js +0 -7
  360. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +0 -39
  361. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +0 -62
  362. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +0 -554
  363. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +0 -25
  364. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +0 -1581
  365. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +0 -78
  366. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +0 -103
  367. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +0 -18
  368. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +0 -25
  369. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +0 -28
  370. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +0 -17
  371. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +0 -25
  372. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +0 -61
  373. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +0 -133
  374. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +0 -37
  375. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +0 -110
  376. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +0 -183
  377. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +0 -85
  378. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +0 -84
  379. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +0 -27
  380. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +0 -8
  381. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +0 -12
  382. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +0 -36
  383. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +0 -56
  384. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +0 -61
  385. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +0 -8
  386. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +0 -33
  387. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +0 -8
  388. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +0 -98
  389. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +0 -115
  390. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +0 -21
  391. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +0 -239
  392. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +0 -36
  393. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +0 -22
  394. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +0 -59
  395. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +0 -13
  396. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +0 -33
  397. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +0 -28
  398. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +0 -23
  399. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +0 -49
  400. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +0 -35
  401. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +0 -270
  402. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +0 -1
  403. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +0 -146
  404. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +0 -55
  405. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +0 -47
  406. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +0 -40
  407. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +0 -48
  408. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +0 -50
  409. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +0 -43
  410. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +0 -27
  411. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +0 -26
  412. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +0 -148
  413. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +0 -50
  414. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +0 -481
  415. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +0 -14
  416. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +0 -50
  417. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +0 -54
  418. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +0 -75
  419. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +0 -1168
  420. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +0 -18
  421. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +0 -88
  422. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +0 -798
  423. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +0 -77
  424. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +0 -2
  425. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +0 -8
  426. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +0 -825
  427. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +0 -33
  428. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +0 -11
  429. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +0 -10
  430. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +0 -26
  431. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +0 -673
  432. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  433. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +0 -107
  434. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +0 -23
  435. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +0 -22
  436. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +0 -69
  437. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +0 -6
  438. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +0 -1415
  439. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +0 -62
  440. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +0 -73
  441. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +0 -117
  442. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +0 -177
  443. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +0 -3908
  444. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +0 -69
  445. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +0 -239
  446. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +0 -422
  447. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +0 -66
  448. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +0 -387
  449. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +0 -20238
  450. data/stdlib/nodejs/node_modules/js-yaml/package.json +0 -83
@@ -1,4 +1,4 @@
1
- # require 'opal'
1
+ # frozen_string_literal: true
2
2
  require 'source_map'
3
3
 
4
4
  module Opal
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+ require 'open3'
3
+
1
4
  module Opal
2
5
  module Util
3
6
  extend self
@@ -57,11 +60,8 @@ module Opal
57
60
 
58
61
  class DigestSourceCommand < Command
59
62
  def digest(source)
60
- IO.popen("#{command} #{options} #{hide_stderr}", 'r+') do |i|
61
- i.puts source
62
- i.close_write
63
- i.read
64
- end
63
+ out, _, _ = Open3.capture3("#{command} #{options} #{hide_stderr}", stdin_data: source)
64
+ out
65
65
  end
66
66
  end
67
67
 
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  module Opal
2
3
  # WHEN RELEASING:
3
4
  # Remember to update RUBY_ENGINE_VERSION in opal/corelib/constants.rb too!
4
- VERSION = '0.10.6'
5
+ VERSION = '0.11.0.rc1'
5
6
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'tilt'
2
3
  require 'opal/builder'
3
4
  require 'opal/config'
@@ -6,11 +6,11 @@ require 'opal/version'
6
6
  Gem::Specification.new do |s|
7
7
  s.name = 'opal'
8
8
  s.version = Opal::VERSION
9
- s.author = 'Adam Beynon'
10
- s.email = 'adam.beynon@gmail.com'
9
+ s.author = ['Elia Schito', 'meh.', 'Adam Beynon']
10
+ s.email = ['elia@schito.me', 'meh@schizofreni.co']
11
11
  s.homepage = 'http://opalrb.org'
12
12
  s.summary = 'Ruby runtime and core library for JavaScript'
13
- s.description = 'Ruby runtime and core library for JavaScript.'
13
+ s.description = %{Opal is a Ruby to JavaScript compiler. It is source-to-source, making it fast as a runtime. Opal includes a compiler (which can be run in any browser), a corelib and runtime implementation. The corelib/runtime is also very small.}
14
14
  s.license = 'MIT'
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
@@ -18,12 +18,12 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.require_paths = ['lib']
20
20
 
21
- s.required_ruby_version = '>= 1.9.3'
21
+ s.required_ruby_version = '>= 2.0.0'
22
22
 
23
23
  s.add_dependency 'sourcemap', '~> 0.1.0'
24
- s.add_dependency 'sprockets', '~> 3.1'
25
24
  s.add_dependency 'hike', '~> 1.2'
26
- s.add_dependency 'tilt', '>= 1.4'
25
+ s.add_dependency 'ast', '>= 2.3.0'
26
+ s.add_dependency 'parser', '= 2.3.3.1'
27
27
 
28
28
  s.add_development_dependency 'mspec', '1.5.20'
29
29
  s.add_development_dependency 'rake'
@@ -34,5 +34,6 @@ Gem::Specification.new do |s|
34
34
  s.add_development_dependency 'yard', '~> 0.8.7'
35
35
  s.add_development_dependency 'rack-test'
36
36
  s.add_development_dependency 'opal-minitest'
37
- s.add_development_dependency 'coveralls'
37
+ s.add_development_dependency 'selenium-webdriver'
38
+ s.add_development_dependency 'benchmark-ips'
38
39
  end
@@ -3,7 +3,7 @@
3
3
  This is the Opal corelib implementation API documentation.
4
4
  The whole corelib is loaded upon `require 'opal'`.
5
5
 
6
- The `runtime.js` documentation is [available here](runtime.js.html)
6
+ The `runtime.js` documentation is [available here](http://opalrb.org/docs/api/master/corelib/file.RUNTIME.html) (in master)
7
7
 
8
8
  # Cherry-picking
9
9
 
@@ -22,34 +22,36 @@ class Array < `Array`
22
22
  end
23
23
 
24
24
  def initialize(size = nil, obj = nil, &block)
25
- if `arguments.length > 2`
26
- raise ArgumentError, "wrong number of arguments (#{`arguments.length`} for 0..2)"
27
- end
28
-
29
25
  %x{
26
+ if (size > #{Integer::MAX}) {
27
+ #{raise ArgumentError, "array size too big"}
28
+ }
29
+
30
+ if (arguments.length > 2) {
31
+ #{raise ArgumentError, "wrong number of arguments (#{`arguments.length`} for 0..2)"}
32
+ }
33
+
30
34
  if (arguments.length === 0) {
31
35
  self.splice(0, self.length);
32
36
  return self;
33
37
  }
34
- }
35
38
 
36
- if `arguments.length === 1`
37
- if Array === size
38
- replace(size.to_a)
39
- return self
40
- elsif size.respond_to? :to_ary
41
- replace(size.to_ary)
42
- return self
43
- end
44
- end
39
+ if (arguments.length === 1) {
40
+ if (size.$$is_array) {
41
+ #{replace(size.to_a)}
42
+ return self;
43
+ } else if (#{size.respond_to? :to_ary}) {
44
+ #{replace(size.to_ary)}
45
+ return self;
46
+ }
47
+ }
45
48
 
46
- size = Opal.coerce_to size, Integer, :to_int
49
+ size = #{Opal.coerce_to size, Integer, :to_int}
47
50
 
48
- if `size < 0`
49
- raise ArgumentError, "negative array size"
50
- end
51
+ if (size < 0) {
52
+ #{raise ArgumentError, "negative array size"}
53
+ }
51
54
 
52
- %x{
53
55
  self.splice(0, self.length);
54
56
  var i, value;
55
57
 
@@ -159,7 +161,7 @@ class Array < `Array`
159
161
  end
160
162
 
161
163
  return [] if `self.length === 0`
162
- return clone.to_a if `other.length === 0`
164
+ return `self.slice()` if `other.length === 0`
163
165
 
164
166
  %x{
165
167
  var result = [], hash = #{{}}, i, length, item;
@@ -268,72 +270,85 @@ class Array < `Array`
268
270
  }
269
271
  end
270
272
 
271
- def [](index, length = undefined)
272
- %x{
273
+ %x{
274
+ function $array_slice_range(self, index) {
273
275
  var size = self.length,
274
276
  exclude, from, to, result;
275
277
 
276
- if (index.$$is_range) {
277
- exclude = index.exclude;
278
- from = #{Opal.coerce_to `index.begin`, Integer, :to_int};
279
- to = #{Opal.coerce_to `index.end`, Integer, :to_int};
278
+ exclude = index.exclude;
279
+ from = Opal.Opal.$coerce_to(index.begin, Opal.Integer, 'to_int');
280
+ to = Opal.Opal.$coerce_to(index.end, Opal.Integer, 'to_int');
280
281
 
281
- if (from < 0) {
282
- from += size;
283
-
284
- if (from < 0) {
285
- return nil;
286
- }
287
- }
282
+ if (from < 0) {
283
+ from += size;
288
284
 
289
- if (from > size) {
285
+ if (from < 0) {
290
286
  return nil;
291
287
  }
288
+ }
292
289
 
293
- if (to < 0) {
294
- to += size;
290
+ if (from > size) {
291
+ return nil;
292
+ }
295
293
 
296
- if (to < 0) {
297
- return [];
298
- }
299
- }
294
+ if (to < 0) {
295
+ to += size;
300
296
 
301
- if (!exclude) {
302
- to += 1;
297
+ if (to < 0) {
298
+ return [];
303
299
  }
300
+ }
304
301
 
305
- result = self.slice(from, to)
302
+ if (!exclude) {
303
+ to += 1;
306
304
  }
307
- else {
308
- index = #{Opal.coerce_to(index, Integer, :to_int)};
309
305
 
310
- if (index < 0) {
311
- index += size;
306
+ result = self.slice(from, to);
307
+ return toArraySubclass(result, self.$class());
308
+ }
312
309
 
313
- if (index < 0) {
314
- return nil;
315
- }
316
- }
310
+ function $array_slice_index_length(self, index, length) {
311
+ var size = self.length,
312
+ exclude, from, to, result;
317
313
 
318
- if (length === undefined) {
319
- if (index >= size || index < 0) {
320
- return nil;
321
- }
314
+ index = Opal.Opal.$coerce_to(index, Opal.Integer, 'to_int');
322
315
 
323
- return self[index];
316
+ if (index < 0) {
317
+ index += size;
318
+
319
+ if (index < 0) {
320
+ return nil;
324
321
  }
325
- else {
326
- length = #{Opal.coerce_to length, Integer, :to_int};
322
+ }
327
323
 
328
- if (length < 0 || index > size || index < 0) {
329
- return nil;
330
- }
324
+ if (length === undefined) {
325
+ if (index >= size || index < 0) {
326
+ return nil;
327
+ }
328
+
329
+ return self[index];
330
+ }
331
+ else {
332
+ length = Opal.Opal.$coerce_to(length, Opal.Integer, 'to_int');
331
333
 
332
- result = self.slice(index, index + length);
334
+ if (length < 0 || index > size || index < 0) {
335
+ return nil;
333
336
  }
337
+
338
+ result = self.slice(index, index + length);
334
339
  }
340
+ return toArraySubclass(result, self.$class());
341
+ }
342
+ }
335
343
 
336
- return toArraySubclass(result, #{self.class})
344
+ def [](index, length = undefined)
345
+ %x{
346
+ if (index.$$is_range) {
347
+ return $array_slice_range(self, index);
348
+ }
349
+ else {
350
+ return $array_slice_index_length(self, index, length);
351
+ }
337
352
  }
338
353
  end
339
354
 
@@ -440,6 +455,14 @@ class Array < `Array`
440
455
  end
441
456
  end
442
457
 
458
+ def any?
459
+ if empty?
460
+ false
461
+ else
462
+ super
463
+ end
464
+ end
465
+
443
466
  def assoc(object)
444
467
  %x{
445
468
  for (var i = 0, length = self.length, item; i < length; i++) {
@@ -468,8 +491,8 @@ class Array < `Array`
468
491
  }
469
492
  end
470
493
 
471
- def bsearch(&block)
472
- return enum_for :bsearch unless block_given?
494
+ def bsearch_index(&block)
495
+ return enum_for :bsearch_index unless block_given?
473
496
 
474
497
  %x{
475
498
  var min = 0,
@@ -483,17 +506,17 @@ class Array < `Array`
483
506
  while (min < max) {
484
507
  mid = min + Math.floor((max - min) / 2);
485
508
  val = self[mid];
486
- ret = block(val);
509
+ ret = Opal.yield1(block, val);
487
510
 
488
511
  if (ret === true) {
489
- satisfied = val;
512
+ satisfied = mid;
490
513
  smaller = true;
491
514
  }
492
515
  else if (ret === false || ret === nil) {
493
516
  smaller = false;
494
517
  }
495
518
  else if (ret.$$is_number) {
496
- if (ret === 0) { return val; }
519
+ if (ret === 0) { return mid; }
497
520
  smaller = (ret < 0);
498
521
  }
499
522
  else {
@@ -507,6 +530,20 @@ class Array < `Array`
507
530
  }
508
531
  end
509
532
 
533
+ def bsearch(&block)
534
+ return enum_for :bsearch unless block_given?
535
+
536
+ index = bsearch_index(&block)
537
+
538
+ %x{
539
+ if (index != null && index.$$is_number) {
540
+ return self[index];
541
+ } else {
542
+ return index;
543
+ }
544
+ }
545
+ end
546
+
510
547
  def cycle(n = nil, &block)
511
548
  return enum_for(:cycle, n) {
512
549
  if n == nil
@@ -793,6 +830,22 @@ class Array < `Array`
793
830
  self
794
831
  end
795
832
 
833
+ def dig(idx, *idxs)
834
+ item = self[idx]
835
+
836
+ %x{
837
+ if (item === nil || idxs.length === 0) {
838
+ return item;
839
+ }
840
+ }
841
+
842
+ unless item.respond_to?(:dig)
843
+ raise TypeError, "#{item.class} does not have #dig method"
844
+ end
845
+
846
+ item.dig(*idxs)
847
+ end
848
+
796
849
  def drop(number)
797
850
  %x{
798
851
  if (number < 0) {
@@ -1096,26 +1149,25 @@ class Array < `Array`
1096
1149
 
1097
1150
  def hash
1098
1151
  %x{
1099
- var top = (Opal.hash_ids == undefined),
1152
+ var top = (Opal.hash_ids === undefined),
1100
1153
  result = ['A'],
1101
1154
  hash_id = self.$object_id(),
1102
1155
  item, i, key;
1103
1156
 
1104
1157
  try {
1105
1158
  if (top) {
1106
- Opal.hash_ids = {};
1159
+ Opal.hash_ids = Object.create(null);
1107
1160
  }
1108
1161
 
1109
- if (Opal.hash_ids.hasOwnProperty(hash_id)) {
1162
+ // return early for recursive structures
1163
+ if (Opal.hash_ids[hash_id]) {
1110
1164
  return 'self';
1111
1165
  }
1112
1166
 
1113
1167
  for (key in Opal.hash_ids) {
1114
- if (Opal.hash_ids.hasOwnProperty(key)) {
1115
- item = Opal.hash_ids[key];
1116
- if (#{eql?(`item`)}) {
1117
- return 'self';
1118
- }
1168
+ item = Opal.hash_ids[key];
1169
+ if (#{eql?(`item`)}) {
1170
+ return 'self';
1119
1171
  }
1120
1172
  }
1121
1173
 
@@ -1129,7 +1181,7 @@ class Array < `Array`
1129
1181
  return result.join(',');
1130
1182
  } finally {
1131
1183
  if (top) {
1132
- delete Opal.hash_ids;
1184
+ Opal.hash_ids = undefined;
1133
1185
  }
1134
1186
  }
1135
1187
  }
@@ -1268,7 +1320,7 @@ class Array < `Array`
1268
1320
  }
1269
1321
  }
1270
1322
 
1271
- #{raise NoMethodError.new("#{Opal.inspect(`item`)} doesn't respond to #to_str, #to_ary or #to_s", 'to_str')};
1323
+ #{raise NoMethodError.new("#{`Opal.inspect(item)`} doesn't respond to #to_str, #to_ary or #to_s", 'to_str')};
1272
1324
  }
1273
1325
 
1274
1326
  if (sep === nil) {
@@ -1342,7 +1394,9 @@ class Array < `Array`
1342
1394
 
1343
1395
  def permutation(num = undefined, &block)
1344
1396
  unless block_given?
1345
- return enum_for(:permutation, num){ `descending_factorial(self.length, num === undefined ? self.length : num)` }
1397
+ return enum_for(:permutation, num) {
1398
+ `descending_factorial(self.length, num === undefined ? self.length : num)`
1399
+ }
1346
1400
  end
1347
1401
 
1348
1402
  %x{
@@ -1370,8 +1424,8 @@ class Array < `Array`
1370
1424
  }
1371
1425
  else {
1372
1426
  // this is the general case
1373
- #{ perm = Array.new(num) }
1374
- #{ used = Array.new(`self.length`, false) }
1427
+ #{ perm = Array.new(num) };
1428
+ #{ used = Array.new(`self.length`, false) };
1375
1429
 
1376
1430
  permute = function(num, perm, index, used, blk) {
1377
1431
  self = this;
@@ -1583,7 +1637,7 @@ class Array < `Array`
1583
1637
  def reverse_each(&block)
1584
1638
  return enum_for(:reverse_each){self.size} unless block_given?
1585
1639
 
1586
- reverse.each &block
1640
+ reverse.each(&block)
1587
1641
  self
1588
1642
  end
1589
1643
 
@@ -1861,7 +1915,7 @@ class Array < `Array`
1861
1915
  }
1862
1916
  }
1863
1917
  else {
1864
- j = Math.floor(Math.random() * i);
1918
+ j = #{rand(`i`)};
1865
1919
  }
1866
1920
 
1867
1921
  tmp = self[--i];