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
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ if RUBY_ENGINE == 'opal'
4
+ class Parser::Lexer::Literal
5
+ undef :extend_string
6
+
7
+ def extend_string(string, ts, te)
8
+ @buffer_s ||= ts
9
+ @buffer_e = te
10
+
11
+ # Patch for opal-parser, original:
12
+ # @buffer << string
13
+ @buffer += string
14
+ end
15
+ end
16
+
17
+ class Parser::Source::Buffer
18
+ def source_lines
19
+ @lines ||= begin
20
+ lines = @source.lines.to_a
21
+ lines << '' if @source.end_with?("\n")
22
+ lines.map { |line| line.chomp("\n") }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Opal
4
+ module Parser
5
+ class SourceBuffer < ::Parser::Source::Buffer
6
+ def self.recognize_encoding(string)
7
+ super || Encoding::UTF_8
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'c_lexer'
5
+ rescue LoadError
6
+ $stderr.puts 'Failed to load WithCLexer, using pure Ruby lexer'
7
+ end
8
+
9
+ if defined? Parser::Ruby25WithWithCLexer
10
+ class Opal::Parser::WithCLexer < Parser::Ruby25WithWithCLexer
11
+ include Opal::Parser::DefaultConfig
12
+ Opal::Parser.default_parser_class = self
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Opal::Parser::WithRubyLexer < Parser::Ruby25
4
+ include Opal::Parser::DefaultConfig
5
+ Opal::Parser.default_parser_class = self
6
+ end
@@ -1,11 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/regexp_anchors'
3
- require 'hike'
4
+ require 'opal/hike'
4
5
 
5
6
  module Opal
6
7
  class PathReader
7
- RELATIVE_PATH_REGEXP = %r{#{Opal::REGEXP_START}\.?\.#{Regexp.quote File::SEPARATOR}}
8
- DEFAULT_EXTENSIONS = ['.js', '.js.rb', '.rb', '.opalerb']
8
+ RELATIVE_PATH_REGEXP = /#{Opal::REGEXP_START}\.?\.#{Regexp.quote File::SEPARATOR}/
9
+ DEFAULT_EXTENSIONS = ['.js', '.js.rb', '.rb', '.opalerb'].freeze
9
10
 
10
11
  def initialize(paths = Opal.paths, extensions = DEFAULT_EXTENSIONS)
11
12
  @file_finder = Hike::Trail.new
@@ -16,7 +17,7 @@ module Opal
16
17
  def read(path)
17
18
  full_path = expand(path)
18
19
  return nil if full_path.nil?
19
- File.open(full_path, 'rb:UTF-8'){|f| f.read}
20
+ File.open(full_path, 'rb:UTF-8', &:read)
20
21
  end
21
22
 
22
23
  def expand(path)
@@ -43,7 +44,7 @@ module Opal
43
44
 
44
45
  def find_path(path)
45
46
  pathname = Pathname(path)
46
- return path if pathname.absolute? and pathname.exist?
47
+ return path if pathname.absolute? && pathname.exist?
47
48
  file_finder.find(path)
48
49
  end
49
50
 
@@ -1,15 +1,16 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Opal
3
4
  def self.gem_dir
4
- File.expand_path("../..", __FILE__.dup.untaint)
5
+ File.expand_path('../..', __FILE__.dup.untaint)
5
6
  end
6
7
 
7
8
  def self.core_dir
8
- File.expand_path("../../../opal", __FILE__.dup.untaint)
9
+ File.expand_path('../../../opal', __FILE__.dup.untaint)
9
10
  end
10
11
 
11
12
  def self.std_dir
12
- File.expand_path("../../../stdlib", __FILE__.dup.untaint)
13
+ File.expand_path('../../../stdlib', __FILE__.dup.untaint)
13
14
  end
14
15
 
15
16
  # Add a file path to opals load path. Any gem containing ruby code that Opal
@@ -48,9 +49,11 @@ module Opal
48
49
  spec = Gem::Specification.find_by_name(gem_name)
49
50
  raise GemNotFound, gem_name unless spec
50
51
 
51
- spec.runtime_dependencies.each do |dependency|
52
- paths += require_paths_for_gem(dependency.name, include_dependencies)
53
- end if include_dependencies
52
+ if include_dependencies
53
+ spec.runtime_dependencies.each do |dependency|
54
+ paths += require_paths_for_gem(dependency.name, include_dependencies)
55
+ end
56
+ end
54
57
 
55
58
  gem_dir = spec.gem_dir
56
59
  spec.require_paths.map do |path|
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Opal
3
- REGEXP_START = RUBY_ENGINE == 'opal' ? '^' : '\A'.freeze
4
- REGEXP_END = RUBY_ENGINE == 'opal' ? '$' : '\z'.freeze
4
+ REGEXP_START = RUBY_ENGINE == 'opal' ? '^' : '\A'
5
+ REGEXP_END = RUBY_ENGINE == 'opal' ? '$' : '\z'
5
6
 
6
7
  # Unicode characters in ranges
7
8
  # \u0001 - \u002F (blank unicode characters + space + !"#$%&'()*+,-./ chars)
@@ -10,7 +11,7 @@ module Opal
10
11
  # \u0060 (` char)
11
12
  # \u007B - \u007F ({|}~ chars})
12
13
  # are not allowed to be used in identifier in the beggining or middle of its name
13
- FORBIDDEN_STARTING_IDENTIFIER_CHARS = "\\u0001-\\u002F\\u003A-\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F"
14
+ FORBIDDEN_STARTING_IDENTIFIER_CHARS = '\u0001-\u002F\u003A-\u0040\u005B-\u005E\u0060\u007B-\u007F'
14
15
 
15
16
  # Unicode characters in ranges
16
17
  # \u0001 - \u0020 (blank unicode characters + space)
@@ -22,11 +23,11 @@ module Opal
22
23
  # \u007B - \u007F ({|}~ chars})
23
24
  # are not allowed to be used in identifier in the end of its name
24
25
  # In fact, FORBIDDEN_STARTING_IDENTIFIER_CHARS = FORBIDDEN_ENDING_IDENTIFIER_CHARS + \u0021 ('?') + \u003F ('!')
25
- FORBIDDEN_ENDING_IDENTIFIER_CHARS = "\\u0001-\\u0020\\u0022-\\u002F\\u003A-\\u003E\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F"
26
+ FORBIDDEN_ENDING_IDENTIFIER_CHARS = '\u0001-\u0020\u0022-\u002F\u003A-\u003E\u0040\u005B-\u005E\u0060\u007B-\u007F'
26
27
  INLINE_IDENTIFIER_REGEXP = Regexp.new("[^#{FORBIDDEN_STARTING_IDENTIFIER_CHARS}]*[^#{FORBIDDEN_ENDING_IDENTIFIER_CHARS}]")
27
28
 
28
29
  # For constants rules are pretty much the same, but ':' is allowed and '?!' are not.
29
30
  # Plus it may start with a '::' which indicates that the constant comes from toplevel.
30
- FORBIDDEN_CONST_NAME_CHARS = "\\u0001-\\u0020\\u0021-\\u002F\\u003B-\\u003F\\u0040\\u005B-\\u005E\\u0060\\u007B-\\u007F"
31
+ FORBIDDEN_CONST_NAME_CHARS = '\u0001-\u0020\u0021-\u002F\u003B-\u003F\u0040\u005B-\u005E\u0060\u007B-\u007F'
31
32
  CONST_NAME_REGEXP = Regexp.new("#{REGEXP_START}(::)?[A-Z][^#{FORBIDDEN_CONST_NAME_CHARS}]*#{REGEXP_END}")
32
33
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/rewriters/opal_engine_check'
3
4
  require 'opal/rewriters/for_rewriter'
4
5
  require 'opal/rewriters/explicit_writer_return'
@@ -8,6 +9,9 @@ require 'opal/rewriters/dot_js_syntax'
8
9
  require 'opal/rewriters/logical_operator_assignment'
9
10
  require 'opal/rewriters/binary_operator_assignment'
10
11
  require 'opal/rewriters/hashes/key_duplicates_rewriter'
12
+ require 'opal/rewriters/dump_args'
13
+ require 'opal/rewriters/mlhs_args'
14
+ require 'opal/rewriters/inline_args'
11
15
 
12
16
  module Opal
13
17
  class Rewriter
@@ -45,6 +49,9 @@ module Opal
45
49
  use Rewriters::BinaryOperatorAssignment
46
50
  use Rewriters::ExplicitWriterReturn
47
51
  use Rewriters::Hashes::KeyDuplicatesRewriter
52
+ use Rewriters::DumpArgs
53
+ use Rewriters::MlhsArgs
54
+ use Rewriters::InlineArgs
48
55
 
49
56
  def initialize(sexp)
50
57
  @sexp = sexp
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Opal
4
+ module Rewriters
5
+ class Arguments
6
+ attr_reader :args, :optargs, :restarg, :postargs,
7
+ :kwargs, :kwoptargs, :kwrestarg,
8
+ :shadowargs, :blockarg
9
+
10
+ def initialize(args)
11
+ @args = []
12
+ @optargs = []
13
+ @restarg = nil
14
+ @postargs = []
15
+ @kwargs = []
16
+ @kwoptargs = []
17
+ @kwrestarg = nil
18
+ @shadowargs = []
19
+ @blockarg = nil
20
+
21
+ args.each do |arg|
22
+ case arg.type
23
+ when :arg, :mlhs
24
+ (@restarg || @optargs.any? ? @postargs : @args) << arg
25
+ when :optarg
26
+ @optargs << arg
27
+ when :restarg
28
+ @restarg = arg
29
+ when :kwarg
30
+ @kwargs << arg
31
+ when :kwoptarg
32
+ @kwoptargs << arg
33
+ when :kwrestarg
34
+ @kwrestarg = arg
35
+ when :shadowarg
36
+ @shadowargs << arg
37
+ when :blockarg
38
+ @blockarg = arg
39
+ else
40
+ raise "Unsupported arg type #{arg.type}"
41
+ end
42
+ end
43
+ end
44
+
45
+ def has_post_args?
46
+ !@restarg.nil? || @postargs.any? || (has_any_kwargs? && !can_inline_kwargs?)
47
+ end
48
+
49
+ def has_any_kwargs?
50
+ @kwargs.any? || @kwoptargs.any? || !@kwrestarg.nil?
51
+ end
52
+
53
+ def can_inline_kwargs?
54
+ @optargs.empty? && @restarg.nil? && @postargs.empty?
55
+ end
56
+ end
57
+ end
58
+ end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'parser'
3
4
  require 'opal/ast/node'
4
5
 
@@ -7,6 +8,7 @@ module Opal
7
8
  class Base < ::Parser::AST::Processor
8
9
  class DummyLocation
9
10
  def node=(*)
11
+ # stub
10
12
  end
11
13
 
12
14
  def expression
@@ -66,13 +68,8 @@ module Opal
66
68
  # Returns a new body with +node+ injected as a first statement.
67
69
  #
68
70
  def prepend_to_body(body, node)
69
- if body.nil?
70
- node
71
- elsif [:begin, :kwbegin].include?(body.type)
72
- body.updated(nil, [node, *body])
73
- else
74
- s(:begin, node, body)
75
- end
71
+ stmts = stmts_of(node) + stmts_of(body)
72
+ begin_with_stmts(stmts)
76
73
  end
77
74
 
78
75
  # Appends given +node+ to +body+ node.
@@ -85,12 +82,28 @@ module Opal
85
82
  # Returns a new body with +node+ injected as a last statement.
86
83
  #
87
84
  def append_to_body(body, node)
88
- if body.nil?
89
- node
90
- elsif [:begin, :kwbegin].include?(body.type)
91
- body.updated(nil, [*body, node])
85
+ stmts = stmts_of(body) + stmts_of(node)
86
+ begin_with_stmts(stmts)
87
+ end
88
+
89
+ def stmts_of(node)
90
+ if node.nil?
91
+ []
92
+ elsif %i[begin kwbegin].include?(node.type)
93
+ node.children
92
94
  else
93
- s(:begin, body, node)
95
+ [node]
96
+ end
97
+ end
98
+
99
+ def begin_with_stmts(stmts)
100
+ case stmts.length
101
+ when 0
102
+ nil
103
+ when 1
104
+ stmts[0]
105
+ else
106
+ s(:begin, *stmts)
94
107
  end
95
108
  end
96
109
 
@@ -104,6 +117,13 @@ module Opal
104
117
  ensure
105
118
  self.current_node = nil
106
119
  end
120
+
121
+ # This is called when a rewriting error occurs.
122
+ def error(msg)
123
+ error = ::Opal::RewritingError.new(msg)
124
+ error.location = current_node.loc if current_node
125
+ raise error
126
+ end
107
127
  end
108
128
  end
109
129
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/rewriters/base'
3
4
 
4
5
  module Opal
@@ -15,14 +16,12 @@ module Opal
15
16
  end
16
17
 
17
18
  GET_SET = ->(get_type, set_type) {
19
+ ->(lhs, operation, rhs) {
20
+ get_node = lhs.updated(get_type) # lhs
21
+ set_node = s(:send, get_node, operation, rhs) # lhs + rhs
18
22
 
19
- ->(lhs, op, rhs) {
20
- get_node = lhs.updated(get_type) # lhs
21
- set_node = s(:send, get_node, op, rhs) # lhs + rhs
22
-
23
- lhs.updated(set_type, [*lhs, set_node]) # lhs = lhs + rhs
23
+ lhs.updated(set_type, [*lhs, set_node]) # lhs = lhs + rhs
24
24
  }
25
-
26
25
  }
27
26
 
28
27
  # Takes `lhs += rhs`
@@ -49,21 +48,21 @@ module Opal
49
48
  # Produces `recvr.meth = recvr.meth + rhs`
50
49
  # (lhs is a recvr.meth, op is :+)
51
50
  class SendHandler < self
52
- def self.call(lhs, op, rhs)
51
+ def self.call(lhs, operation, rhs)
53
52
  recvr, reader_method, *args = *lhs
54
53
 
55
54
  # If recvr is a complex expression it must be cached.
56
55
  # MRI calls recvr in `recvr.meth ||= rhs` only once.
57
56
  if recvr && recvr.type == :send
58
57
  recvr_tmp = new_temp
59
- cache_recvr = s(:lvasgn, recvr_tmp, recvr) # $tmp = recvr
58
+ cache_recvr = s(:lvasgn, recvr_tmp, recvr) # $tmp = recvr
60
59
  recvr = s(:js_tmp, recvr_tmp)
61
60
  end
62
61
 
63
62
  writer_method = :"#{reader_method}="
64
63
 
65
- call_reader = lhs.updated(:send, [recvr, reader_method, *args]) # $tmp.meth
66
- call_op = s(:send, call_reader, op, rhs) # $tmp.meth + rhs
64
+ call_reader = lhs.updated(:send, [recvr, reader_method, *args]) # $tmp.meth
65
+ call_op = s(:send, call_reader, operation, rhs) # $tmp.meth + rhs
67
66
  call_writer = lhs.updated(:send, [recvr, writer_method, *args, call_op]) # $tmp.meth = $tmp.meth + rhs
68
67
 
69
68
  if cache_recvr
@@ -79,24 +78,25 @@ module Opal
79
78
  # NOTE: Later output of this handler gets post-processed by this rewriter again
80
79
  # using SendHandler to `recvr.nil? ? nil : (recvr.meth = recvr.meth + rhs)`
81
80
  class ConditionalSendHandler < self
82
- def self.call(lhs, op, rhs)
81
+ def self.call(lhs, operation, rhs)
83
82
  recvr, meth, *args = *lhs
84
83
 
85
84
  recvr_tmp = new_temp
86
- cache_recvr = s(:lvasgn, recvr_tmp, recvr) # $tmp = recvr
85
+ cache_recvr = s(:lvasgn, recvr_tmp, recvr) # $tmp = recvr
87
86
  recvr = s(:js_tmp, recvr_tmp)
88
87
 
89
- recvr_is_nil = s(:send, recvr, :nil?) # recvr.nil?
90
- plain_send = lhs.updated(:send, [recvr, meth, *args]) # recvr.meth
91
- plain_op_asgn = s(:op_asgn, plain_send, op, rhs) # recvr.meth += rhs
88
+ recvr_is_nil = s(:send, recvr, :nil?) # recvr.nil?
89
+ plain_send = lhs.updated(:send, [recvr, meth, *args]) # recvr.meth
90
+ plain_op_asgn = s(:op_asgn, plain_send, operation, rhs) # recvr.meth += rhs
92
91
 
93
92
  s(:begin,
94
93
  cache_recvr,
95
94
  s(:if, recvr_is_nil, # if recvr.nil?
96
95
  s(:nil), # nil
97
96
  # else
98
- plain_op_asgn)) # recvr.meth ||= rhs
99
- # end
97
+ plain_op_asgn # recvr.meth ||= rhs
98
+ ),
99
+ ) # end
100
100
  end
101
101
  end
102
102
 
@@ -108,15 +108,15 @@ module Opal
108
108
  cvasgn: ClassVariableHandler,
109
109
  send: SendHandler,
110
110
  csend: ConditionalSendHandler
111
- }
111
+ }.freeze
112
112
 
113
113
  # lhs += rhs
114
114
  def on_op_asgn(node)
115
115
  lhs, op, rhs = *node
116
116
 
117
117
  result = HANDLERS
118
- .fetch(lhs.type) { raise NotImplementedError }
119
- .call(lhs, op, rhs)
118
+ .fetch(lhs.type) { error "cannot handle LHS type: #{lhs.type}" }
119
+ .call(lhs, op, rhs)
120
120
 
121
121
  process(result)
122
122
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/rewriters/base'
3
4
 
4
5
  module Opal
@@ -9,7 +10,7 @@ module Opal
9
10
  iter_node = s(:iter, args, body)
10
11
  recvr.updated(
11
12
  nil,
12
- recvr.children + [iter_node]
13
+ recvr.children + [iter_node],
13
14
  )
14
15
  end
15
16
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/rewriter'
3
4
 
4
5
  module Opal
@@ -18,6 +19,7 @@ module Opal
18
19
  end
19
20
 
20
21
  def stop_lookup(node)
22
+ # noop
21
23
  end
22
24
 
23
25
  # regular loops