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
@@ -1,12 +1,10 @@
1
1
  # Contributing and Reporting
2
2
 
3
3
  This is the issue tracker for Opal. If you have a more general question about
4
- using Opal (or related libraries) then use the [stackoverflow tag (#opalrb)][SO], the
5
- [#opal][freenode] irc channel on *FreeNode*, or the *Gitter* chatroom at [opal/opal][gitter]
4
+ using Opal (or related libraries) then use the [stackoverflow tag (#opalrb)][SO], or the *Gitter* chatroom at [opal/opal][gitter]
6
5
  (also available as IRC at `irc.gitter.im`).
7
6
 
8
7
  [SO]: http://stackoverflow.com/questions/ask?tags=opalrb
9
- [freenode]: http://webchat.freenode.net/?channels=opal
10
8
  [gitter]: https://gitter.im/opal/opal
11
9
 
12
10
  What follows is a quick checklist you can before sending issues or pull-requests, for in-depth instructions on how to hack the internals of Opal and setup the development environment please see [`HACKING.md`][hacking].
@@ -35,10 +33,10 @@ What follows is a quick checklist you can before sending issues or pull-requests
35
33
 
36
34
  3. Make sure to have updated all the relevant documentation, both for API (using _yardoc_ syntax) and the Guides
37
35
 
38
- 4. Add a Changelog entry at the top of `CHANGELOG.md`
36
+ 4. Add a Changelog entry at the top of `UNRELEASED.md`
39
37
 
40
38
 
41
- ### A note on commits in PR
39
+ ### A note on commits in PRs
42
40
 
43
41
  You could be asked to squash your commits during a PR review. That doesn't mean there's a preference for a single commit for each PR, rather it's a request to have each commit focused on a specific group changes and avoid the sequence of changes, fixups and reverts that tell an interesting story but in the end make the use of `git blame` quite difficult.
44
42
 
data/Gemfile CHANGED
@@ -9,25 +9,26 @@ tilt_version = ENV['TILT_VERSION']
9
9
  rack_version = ENV['RACK_VERSION']
10
10
  sprockets_version = ENV['SPROCKETS_VERSION']
11
11
 
12
- # Stick with older racc until
13
- # https://github.com/tenderlove/racc/issues/22
14
- # is solved.
15
- gem 'racc', '< 1.4.10', platform: :jruby
16
12
  gem 'json', '< 1.8.1', platform: :ruby if ruby_version < v['2.2']
17
- gem 'rack-test', '< 1.0' if ruby_version < v['2.2.2']
13
+ gem 'rack-test', '< 0.8' if ruby_version <= v['2.0']
18
14
  gem 'rubysl', platform: :rbx
19
15
  gem 'coveralls', platform: :mri
20
16
 
21
- gem 'puma' # Some browsers have problems with WEBrick
22
-
23
- gem 'rack', rack_version if rack_version
24
- gem 'tilt', tilt_version if tilt_version
17
+ # Some browsers have problems with WEBrick
18
+ gem 'puma' unless RUBY_ENGINE == 'truffleruby'
25
19
 
20
+ gem 'rack', rack_version if rack_version
21
+ gem 'tilt', tilt_version if tilt_version
26
22
  gem 'sprockets', sprockets_version if sprockets_version
27
- gem 'mspec', path: 'spec/mspec'
28
23
 
29
24
  group :repl do
30
- gem 'therubyracer', platform: :mri, require: false
25
+ if RUBY_VERSION.to_f >= 2.3
26
+ gem 'mini_racer', platform: :mri, require: false
27
+ else
28
+ gem 'mini_racer', '< 0.2.0', platform: :mri, require: false
29
+ gem 'libv8', '~> 6.3.0', platform: :mri, require: false
30
+ end
31
+
31
32
  gem 'therubyrhino', platform: :jruby, require: false
32
33
  end
33
34
 
@@ -46,5 +47,9 @@ group :development do
46
47
  end unless ENV['CI']
47
48
 
48
49
  group :doc do
49
- gem 'redcarpet'
50
+ gem 'redcarpet' unless RUBY_ENGINE == 'truffleruby'
51
+ end
52
+
53
+ platforms :ruby, :mswin, :mswin64, :mingw, :x64_mingw do
54
+ gem 'c_lexer', '2.5.3.0.0' unless RUBY_ENGINE == 'truffleruby'
50
55
  end
data/Guardfile CHANGED
@@ -49,7 +49,6 @@ class ::Guard::Opal < Plugin
49
49
  path = m[0]
50
50
  puts color("Searching specs for #{m[0]}...", :yellow)
51
51
  case path
52
- when %r{grammar\.y$} then system 'rake racc'
53
52
  when %r{^spec/lib} then rspec path
54
53
  when %r{^spec/ruby} then mspec path
55
54
  when %r{^opal/corelib}
data/HACKING.md CHANGED
@@ -195,38 +195,4 @@ Array#permutation_generates_from_a_defensive_copy,_ignoring_mutations
195
195
 
196
196
  ## Parser
197
197
 
198
- ## Enabling debug output from Racc
199
-
200
- To enable debug output in the Racc grammar set the `RACC_DEBUG` env var and recompile the grammar. While the env variable is set the parser will output the debug info for the parsing process.
201
-
202
- ```bash
203
- $ export RACC_DEBUG=true
204
- $ bundle exec rake racc # recompile the grammar
205
- $ bundle exec exe/opal --sexp -e "42" # ask Opal for the SExp of some code
206
-
207
- read :tINTEGER(tINTEGER) [42, [1, 0]]
208
-
209
- shift tINTEGER
210
- [ (tINTEGER [42, [1, 0]]) ]
211
-
212
- …cut…
213
-
214
- shift $end
215
- [ (program (:int, 42)) ($end [false, [1, 2]]) ($end [false, [1, 2]]) ]
216
-
217
- goto 403
218
- [ 0 1 97 403 ]
219
-
220
- accept
221
-
222
- (:int, 42)
223
- ```
224
-
225
- When done unset the env variable and recompile the grammar.
226
-
227
- ```bash
228
- $ unset RACC_DEBUG
229
- $ bundle exec rake racc # recompile the grammar
230
- $ bundle exec exe/opal --sexp -e "42" # ask Opal for the SExp of some code
231
- (:int, 42)
232
- ```
198
+ Opal relies on the `parser` gem, see debug/development documentation there to know more about its internals: https://whitequark.github.io/parser/.
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (C) 2013 by Adam Beynon
1
+ Copyright (C) 2013-2019 by Adam Beynon and the Opal contributors
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
16
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
17
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
18
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
- THE SOFTWARE.
19
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,25 +1,27 @@
1
1
  # Opal
2
2
 
3
- [![Build Status (Linux)](http://img.shields.io/travis/opal/opal/master.svg?style=flat)](http://travis-ci.org/opal/opal)
3
+ [![Build Status (Linux)](https://img.shields.io/travis/opal/opal/master.svg?style=flat)](https://travis-ci.org/opal/opal)
4
4
  [![Build Status (Windows)](https://ci.appveyor.com/api/projects/status/jtsvwl8tfgn3u67n/branch/master?svg=true)](https://ci.appveyor.com/project/elia/opal/branch/master)
5
- [![Gem Version](http://img.shields.io/gem/v/opal.svg?style=flat)](http://badge.fury.io/rb/opal)
6
- [![Code Climate](http://img.shields.io/codeclimate/github/opal/opal.svg?style=flat)](https://codeclimate.com/github/opal/opal)
5
+ [![Gem Version](https://img.shields.io/gem/v/opal.svg?style=flat)](https://badge.fury.io/rb/opal)
6
+ [![Code Climate](https://img.shields.io/codeclimate/github/opal/opal.svg?style=flat)](https://codeclimate.com/github/opal/opal)
7
7
  [![Coverage Status](https://coveralls.io/repos/opal/opal/badge.svg?branch=master&service=github)](https://coveralls.io/github/opal/opal?branch=elia%2Fcoveralls)
8
8
 
9
9
 
10
10
  Opal is a Ruby to JavaScript source-to-source compiler. It also has an
11
11
  implementation of the Ruby corelib.
12
12
 
13
- Opal is [hosted on GitHub](http://github.com/opal/opal). Chat is available on *Gitter* at [opal/opal](https://gitter.im/opal/opal) (also available as IRC at `irc.gitter.im`) and the Freenode IRC channel at [#opal](http://webchat.freenode.net/?channels=opal).
14
- Ask questions on [stackoverflow (tag #opalrb)](http://stackoverflow.com/questions/ask?tags=opalrb). Get the [Opalist newsletter](http://opalist.co) for updates and community news.
13
+ Opal is [hosted on GitHub](https://github.com/opal/opal). Chat is available on *Gitter* at [opal/opal](https://gitter.im/opal/opal) (also available as IRC at `irc.gitter.im`).
14
+ Ask questions on [stackoverflow (tag #opalrb)](https://stackoverflow.com/questions/ask?tags=opalrb). Get the [Opalist newsletter](http://opalist.co) for updates and community news.
15
15
 
16
- [![Inline docs](http://inch-ci.org/github/opal/opal.svg?branch=master&style=flat)](http://opalrb.com/docs)
16
+ [![Inline docs](https://inch-ci.org/github/opal/opal.svg?branch=master&style=flat)](https://opalrb.com/docs)
17
17
  [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/opal/opal?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
18
- [![Stack Overflow](http://img.shields.io/badge/stackoverflow-%23opalrb-orange.svg?style=flat)](http://stackoverflow.com/questions/ask?tags=opalrb)
18
+ [![Stack Overflow](https://img.shields.io/badge/stackoverflow-%23opalrb-orange.svg?style=flat)](https://stackoverflow.com/questions/ask?tags=opalrb)
19
+ [![Backers on Open Collective](https://opencollective.com/opal/backers/badge.svg)](#backers)
20
+ [![Sponsors on Open Collective](https://opencollective.com/opal/sponsors/badge.svg)](#sponsors)
19
21
 
20
22
  ## Usage
21
23
 
22
- See the website for more detailed instructions and guides for Rails, jQuery, Sinatra, rack, CDN, etc. [http://opalrb.com](http://opalrb.com).
24
+ See the website for more detailed instructions and guides for Rails, jQuery, Sinatra, rack, CDN, etc. [https://opalrb.com](https://opalrb.com).
23
25
 
24
26
  ### Compiling Ruby code with the CLI (Command Line Interface)
25
27
 
@@ -102,9 +104,8 @@ your web applications.
102
104
  <html>
103
105
  <head>
104
106
  <meta charset="utf-8">
105
- <script src="http://cdn.opalrb.com/opal/current/opal.js"></script>
106
- <script src="http://cdn.opalrb.com/opal/current/opal-parser.js"></script>
107
- <script type="text/javascript">Opal.load('opal-parser')</script>
107
+ <script src="https://cdn.opalrb.com/opal/current/opal.js" onload="Opal.load('opal')"></script>
108
+ <script src="https://cdn.opalrb.com/opal/current/opal-parser.js" onload="Opal.load('opal-parser')"></script>
108
109
 
109
110
  <script type="text/ruby">
110
111
  puts "hi"
@@ -204,13 +205,41 @@ version of a browser is 24.x, we support the 24.x and 23.x versions.
204
205
  as the last 2 versions of Opera. For example, if the current Opera version is 20.x,
205
206
  then we support Opera 12.1x, 19.x and 20.x but not Opera 15.x through 18.x.
206
207
 
207
- Cross-browser testing is sponsored by [SauceLabs](http://saucelabs.com).
208
+ Cross-browser testing is sponsored by [SauceLabs](https://saucelabs.com).
209
+
210
+ ## Contributors
211
+
212
+ This project exists thanks to all the people who contribute. [![contributors](https://opencollective.com/opal/contributors.svg?width=890&button=false")](https://github.com/opal/opal/graphs/contributors)
213
+
214
+
215
+ ## Backers
216
+
217
+ Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/opal#backer)]
218
+
219
+ <a href="https://opencollective.com/opal#backers" target="_blank"><img src="https://opencollective.com/opal/backers.svg?width=890"></a>
220
+
221
+
222
+ ## Sponsors
223
+
224
+ Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/opal#sponsor)]
225
+
226
+ <a href="https://opencollective.com/opal/sponsor/0/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/0/avatar.svg"></a>
227
+ <a href="https://opencollective.com/opal/sponsor/1/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/1/avatar.svg"></a>
228
+ <a href="https://opencollective.com/opal/sponsor/2/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/2/avatar.svg"></a>
229
+ <a href="https://opencollective.com/opal/sponsor/3/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/3/avatar.svg"></a>
230
+ <a href="https://opencollective.com/opal/sponsor/4/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/4/avatar.svg"></a>
231
+ <a href="https://opencollective.com/opal/sponsor/5/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/5/avatar.svg"></a>
232
+ <a href="https://opencollective.com/opal/sponsor/6/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/6/avatar.svg"></a>
233
+ <a href="https://opencollective.com/opal/sponsor/7/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/7/avatar.svg"></a>
234
+ <a href="https://opencollective.com/opal/sponsor/8/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/8/avatar.svg"></a>
235
+ <a href="https://opencollective.com/opal/sponsor/9/website" target="_blank"><img src="https://opencollective.com/opal/sponsor/9/avatar.svg"></a>
236
+
208
237
 
209
238
  ## License
210
239
 
211
240
  (The MIT License)
212
241
 
213
- Copyright (C) 2013-2015 by Adam Beynon
242
+ Copyright (C) 2013-2019 by Adam Beynon and the Opal contributors
214
243
 
215
244
  Permission is hereby granted, free of charge, to any person obtaining a copy
216
245
  of this software and associated documentation files (the "Software"), to deal
data/Rakefile CHANGED
@@ -1,14 +1,11 @@
1
1
  # FIXME: there must be a better way
2
2
  Encoding.default_external = 'utf-8'
3
3
 
4
- require 'bundler'
5
- Bundler.require
6
- Bundler::GemHelper.install_tasks
7
-
8
4
  import 'tasks/github.rake'
9
5
  import 'tasks/testing.rake'
10
6
  import 'tasks/building.rake'
11
7
  import 'tasks/linting.rake'
12
8
  import 'tasks/benchmarking.rake'
9
+ import 'tasks/releasing.rake'
13
10
 
14
11
  task :default => [:rspec, :mspec, :minitest]
@@ -0,0 +1,133 @@
1
+ <!--
2
+ Whitespace conventions:
3
+ - 4 spaces before ## titles
4
+ - 2 spaces before ### titles
5
+ - 1 spaces before normal text
6
+ -->
7
+
8
+ ### Added
9
+
10
+ - Added `Module#prepend` and completely overhauled the module and class inheritance system (#1826)
11
+ - Methods and properties are now assigned with `Object.defineProperty()` as non-enumerable (#1821)
12
+ - Backtrace now includes the location inside the source file for syntax errors (#1814)
13
+ - Added support for a faster C-implemented lexer, it's enough to add `gem 'c_lexer` to the `Gemfile` (#1806)
14
+ - Added `Date#to_n` that returns the JavaScript Date object (in native.rb). (#1779, #1792)
15
+ - Added `Array#pack` (supports only `C, S, L, Q, c, s, l, q, A, a` formats). (#1723)
16
+ - Added `String#unpack` (supports only `C, S, L, Q, S>, L>, Q>, c, s, l, q, n, N, v, V, U, w, A, a, Z, B, b, H, h, u, M, m` formats). (#1723)
17
+ - Added `File#symlink?` for Node.js. (#1725)
18
+ - Added `Dir#glob` for Node.js (does not support flags). (#1727)
19
+ - Added support for a static folder in the "server" CLI runner via the `OPAL_CLI_RUNNERS_SERVER_STATIC_FOLDER` env var
20
+ - Added the CLI option `--runner-options` that allows passing arbitrary options to the selected runner, currently the only runner making use of them is `server` accepting `port` and `static_folder`
21
+ - Added a short helper to navigate constants manually: E.g. `Opal.$$.Regexp.$$.IGNORECASE` (see docs for "Compiled Ruby")
22
+ - Added initial support for OpenURI module (using XMLHttpRequest on browser and [xmlhttprequest](https://www.npmjs.com/package/xmlhttprequest) on Node). (#1735)
23
+ - Added `String#prepend` to the list of unsupported methods (because String are immutable in JavaScript)
24
+ - Added methods (most introduced in 2.4/2.5):
25
+ * `Array#prepend` (#1757)
26
+ * `Array#append` (#1757)
27
+ * `Array#max` (#1757)
28
+ * `Array#min` (#1757)
29
+ * `Complex#finite?` (#1757)
30
+ * `Complex#infinite?` (#1757)
31
+ * `Complex#infinite?` (#1757)
32
+ * `Date#to_time` (#1757)
33
+ * `Date#next_year` (#1885)
34
+ * `Date#prev_year` (#1885)
35
+ * `Hash#slice` (#1757)
36
+ * `Hash#transform_keys` (#1757)
37
+ * `Hash#transform_keys!` (#1757)
38
+ * `Numeric#finite?` (#1757)
39
+ * `Numeric#infinite?` (#1757)
40
+ * `Numeric#infinite?` (#1757)
41
+ * `Integer#allbits?` (#1757)
42
+ * `Integer#anybits?` (#1757)
43
+ * `Integer#digits` (#1757)
44
+ * `Integer#nobits?` (#1757)
45
+ * `Integer#pow` (#1757)
46
+ * `Integer#remainder` (#1757)
47
+ * `Integer.sqrt` (#1757)
48
+ * `Random.urandom` (#1757)
49
+ * `String#delete_prefix` (#1757)
50
+ * `String#delete_suffix` (#1757)
51
+ * `String#casecmp?` (#1757)
52
+ * `Kernel#yield_self` (#1757)
53
+ * `String#unpack1` (#1757)
54
+ * `String#to_r` (#1842)
55
+ * `String#to_c` (#1842)
56
+ * `String#match?` (#1842)
57
+ * `String#unicode_normalize` returns self (#1842)
58
+ * `String#unicode_normalized?` returns true (#1842)
59
+ * `String#[]=` throws `NotImplementedError`(#1836)
60
+
61
+ - Added support of the `pattern` argument for `Enumerable#all?`, `Enumerable#any?`, `Enumerable#none?`. (#1757)
62
+ - Added `ndigits` option support to `Number#floor`, `Number#ceil`, `Number#truncate`. (#1757)
63
+ - Added `key` and `receiver` attributes to the `KeyError`. (#1757)
64
+ - Extended `Struct.new` to support `keyword_init` option. (#1757)
65
+ - Added a new `Opal::Config.missing_require_severity` option and relative `--missing-require` CLI flag. This option will command how the builder will behave when a required file is missing. Previously the behavior was undefined and partly controlled by `dynamic_require_severity`. Not to be confused with the runtime config option `Opal.config.missing_require_severity;` which controls the runtime behavior.
66
+ - Added `Matrix` (along with the internal MRI utility `E2MM`)
67
+ - Use shorter helpers for constant lookups, `$$` for relative (nesting) lookups and `$$$` for absolute (qualified) lookups
68
+ - Add support for the Mersenne Twister random generator, the same used by CRuby/MRI (#657 & #1891)
69
+ - [Nodejs] Added support for binary data in `OpenURI` (#1911, #1920)
70
+ - [Nodejs] Added support for binary data in `File#read` (#1919, #1921)
71
+ - [Nodejs] Added support for `File#readlines` (#1882)
72
+ - [Nodejs] Added support for `ENV#[]`, `ENV#[]=`, `ENV#key?`, `ENV#has_key?`, `ENV#include?`, `ENV#member?`, `ENV#empty?`, `ENV#keys`, `ENV#delete` and `ENV#to_s` (#1928)
73
+
74
+
75
+ ### Changed
76
+
77
+ - **BREAKING** The dot (`.`) character is no longer replaced with [\s\S] in a multiline regexp passed to Regexp#match and Regexp#match? (#1796, #1795)
78
+ * You're advised to always use [\s\S] instead of . in a multiline regexp, which is portable between Ruby and JavaScript
79
+ - **BREAKING** `Kernel#format` (and `sprintf` alias) are now in a dedicated module `corelib/kernel/format` and available exclusively in `opal` (#1930)
80
+ * Previously the methods were part of the `corelib/kernel` module and available in both `opal` and `opal/mini`
81
+ - Filename extensions are no longer stripped from filenames internally, resulting in better error reporting (#1804)
82
+ - The internal API for CLI runners has changed, now it's just a callable object
83
+ - The `--map` CLI option now works only in conjunction with `--compile` (or `--runner compiler`)
84
+ - The `node` CLI runner now adds its `NODE_PATH` entry instead of replacing the ENV var altogether
85
+ - Added `--disable-web-security` option flag to the Chrome headless runner to be able to do `XMLHttpRequest`
86
+ - Migrated parser to 2.5. Bump RUBY_VERSION to 2.5.0.
87
+ - Exceptions raised during the compilation now add to the backtrace the current location of the opal file if available (#1814).
88
+ - Better use of `displayName` on functions and methods and more readable temp variable names (#1910)
89
+ - Source-maps are now inlined and already contain sources, incredibly more stable and precise (#1856)
90
+
91
+
92
+ ### Deprecated
93
+
94
+ - The CLI `--server-port 1234` option is now deprecated in favor of using `--runner-options='{"port": 1234}'`
95
+ - Including `::Native` is now deprecated because it generates conflicts with core classes in constant lookups (both `Native::Object` and `Native::Array` exist). Instead `Native::Werapper` should be used.
96
+ - Using `node_require 'my_module'` to access the native `require()` function in Node.js is deprecated in favor of <code>\`require('my_module')\`</code> because static builders need to parse the call in order to function (#1886).
97
+
98
+
99
+ ### Removed
100
+
101
+ - The `node` CLI runner no longer supports passing extra node options via the `NODE_OPT` env var, instead Node.js natively supports the `NODE_OPTIONS` env var.
102
+ - The gem "hike" is no longer an external dependency and is now an internal dependency available as `Opal::Hike` (#1881)
103
+ - Removed the internal Opal class `Marshal::BinaryString` (#1914)
104
+ - Removed Racc, as it's now replaced by the parser gem (#1880)
105
+
106
+
107
+
108
+ ### Fixed
109
+
110
+ - Fix handling of trailing semicolons and JavaScript returns inside x-strings, the behavior is now well defined and covered by proper specs (#1776)
111
+ - Fixed singleton method definition to return method name. (#1757)
112
+ - Allow passing number of months to `Date#next_month` and `Date#prev_month`. (#1757)
113
+ - Fixed `pattern` argument handling for `Enumerable#grep` and `Enumerable#grep_v`. (#1757)
114
+ - Raise `ArgumentError` instead of `TypeError` from `Numeric#step` when step is not a number. (#1757)
115
+ - At run-time `LoadError` wasn't being raised even with `Opal.config.missing_require_severity;` set to `'error'`.
116
+ - Fixed `Kernel#public_methods` to return instance methods if the argument is set to false. (#1848)
117
+ - Fixed an issue in `String#gsub` that made it start an infinite loop when used recursively. (#1879)
118
+ - `Kernel#exit` was using status 0 when a number or a generic object was provided, now accepts numbers and tries to convert objects with `#to_int` (#1898, #1808).
119
+ - Fixed metaclass inheritance in subclasses of Module (#1901)
120
+ - `Method#to_proc` now correctly sets parameters and arity on the resulting Proc (#1903)
121
+ - Fixed bridged classes having their prototype removed from the original chain by separating them from the Ruby class (#1909)
122
+ - Improve `String#to_proc` performance (#1888)
123
+ - Fixed/updated the examples (#1887)
124
+ - `Opal.ancestors()` now returns false for when provided with JS-falsy objects (#1839)
125
+ - When subclassing now the constant is set before calling `::inherited` (#1838)
126
+ - `String#to_sym` now returns the string literal (#1835)
127
+ - `String#center` now correctly checks length (#1833)
128
+ - `redo` inside `while` now works properly (#1820)
129
+ - Fixed compilation of empty/whitespace-only x-strings (#1811)
130
+ - Fix `||=` assignments on constants when the constant is not yet defined (#1935)
131
+ - Fix `String#chomp` to return an empty String when `arg == self` (#1936)
132
+ - Fix methods of `Comparable` when `<=>` does not return Numeric (#1945)
133
+ - Fix Class#native_alias error message (#1946)
@@ -0,0 +1,6 @@
1
+ Usage:
2
+
3
+ bundle exec rake bench:ips
4
+ bundle exec rake bench:ips FILE=benchmark-ips/bm_while_true_vs_loop.rb
5
+
6
+ For details see `tasks/benchmarking.rake`
@@ -0,0 +1,21 @@
1
+ module BmBlockVsYield
2
+ def self._block(&block)
3
+ block.call
4
+ end
5
+
6
+ def self._yield
7
+ yield
8
+ end
9
+ end
10
+
11
+ Benchmark.ips do |x|
12
+ x.report('block') do
13
+ BmBlockVsYield._block { 1+1 }
14
+ end
15
+
16
+ x.report('yield') do
17
+ BmBlockVsYield._yield { 1+1 }
18
+ end
19
+
20
+ x.compare!
21
+ end
@@ -0,0 +1,28 @@
1
+ Benchmark.ips do |x|
2
+ %x{
3
+ var o = {}
4
+ o[Symbol.for('foo')] = 123
5
+ o.foo = 123
6
+ var foo = Symbol('foo')
7
+ o[foo] = 123
8
+ var a = 0, b = 0, c = 0
9
+ }
10
+
11
+ x.report('global symbol') do
12
+ `a += o[Symbol.for('foo')]`
13
+ end
14
+
15
+ x.report('symbol') do
16
+ `a += o[foo]`
17
+ end
18
+
19
+ x.report('ident') do
20
+ `b += o.foo`
21
+ end
22
+
23
+ x.report('string') do
24
+ `c += o['foo']`
25
+ end
26
+
27
+ x.compare!
28
+ end
@@ -0,0 +1,19 @@
1
+ Benchmark.ips do |x|
2
+ x.report('while true') do
3
+ n = 0
4
+ while true
5
+ n += 1
6
+ break if n == 10000
7
+ end
8
+ end
9
+
10
+ x.report('loop') do
11
+ n = 0
12
+ loop do
13
+ n += 1
14
+ break if n == 10000
15
+ end
16
+ end
17
+
18
+ x.compare!
19
+ end