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,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'pathname'
3
4
  require 'opal/version'
4
5
  require 'opal/nodes/scope'
@@ -26,6 +27,8 @@ module Opal
26
27
  add_temp '$nesting = []'
27
28
  end
28
29
  add_temp 'nil = Opal.nil'
30
+ add_temp '$$$ = Opal.const_get_qualified'
31
+ add_temp '$$ = Opal.const_get_relative'
29
32
 
30
33
  add_used_helpers
31
34
  add_used_operators
@@ -43,12 +46,11 @@ module Opal
43
46
 
44
47
  def opening
45
48
  if compiler.requirable?
46
- path = Pathname(compiler.file).cleanpath.to_s
47
- line "Opal.modules[#{path.inspect}] = function(Opal) {"
49
+ line "Opal.modules[#{Opal::Compiler.module_name(compiler.file).inspect}] = function(Opal) {"
48
50
  elsif compiler.eval?
49
- line "(function(Opal, self) {"
51
+ line '(function(Opal, self) {'
50
52
  else
51
- line "(function(Opal) {"
53
+ line '(function(Opal) {'
52
54
  end
53
55
  end
54
56
 
@@ -56,7 +58,7 @@ module Opal
56
58
  if compiler.requirable?
57
59
  line "};\n"
58
60
  elsif compiler.eval?
59
- line "})(Opal, self)"
61
+ line '})(Opal, self)'
60
62
  else
61
63
  line "})(Opal);\n"
62
64
  end
@@ -68,7 +70,7 @@ module Opal
68
70
 
69
71
  def compile_irb_vars
70
72
  if compiler.irb?
71
- line "if (!Opal.irb_vars) { Opal.irb_vars = {}; }"
73
+ line 'if (!Opal.irb_vars) { Opal.irb_vars = {}; }'
72
74
  end
73
75
  end
74
76
 
@@ -83,7 +85,7 @@ module Opal
83
85
  name = Nodes::CallNode::OPERATORS[op]
84
86
  line "function $rb_#{name}(lhs, rhs) {"
85
87
  line " return (typeof(lhs) === 'number' && typeof(rhs) === 'number') ? lhs #{op} rhs : lhs['$#{op}'](rhs);"
86
- line "}"
88
+ line '}'
87
89
  end
88
90
  end
89
91
 
@@ -98,7 +100,7 @@ module Opal
98
100
  # Any special __END__ content in code
99
101
  def compile_end_construct
100
102
  if content = compiler.eof_content
101
- line "var $__END__ = Opal.Object.$new();"
103
+ line 'var $__END__ = Opal.Object.$new();'
102
104
  line "$__END__.$read = function() { return #{content.inspect}; };"
103
105
  end
104
106
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/nodes/base'
3
4
 
4
5
  module Opal
@@ -9,7 +10,7 @@ module Opal
9
10
  children :var_name
10
11
 
11
12
  def using_irb?
12
- compiler.irb? and scope.top?
13
+ compiler.irb? && scope.top?
13
14
  end
14
15
 
15
16
  def compile
@@ -28,7 +29,7 @@ module Opal
28
29
  children :var_name, :value
29
30
 
30
31
  def using_irb?
31
- compiler.irb? and scope.top?
32
+ compiler.irb? && scope.top?
32
33
  end
33
34
 
34
35
  def compile
@@ -87,7 +88,7 @@ module Opal
87
88
  push "self#{name} = "
88
89
  push expr(value)
89
90
 
90
- wrap '(', ')' if (recv? || expr?) && value
91
+ wrap '(', ')' if (recv? || expr?) && value
91
92
  end
92
93
  end
93
94
 
@@ -107,7 +108,6 @@ module Opal
107
108
  add_gvar name
108
109
  push "$gvars#{name}"
109
110
  end
110
-
111
111
  end
112
112
 
113
113
  # back_ref can be:
@@ -169,7 +169,7 @@ module Opal
169
169
  push "$gvars#{name} = "
170
170
  push expr(value)
171
171
 
172
- wrap '(', ')' if (recv? || expr?) && value
172
+ wrap '(', ')' if (recv? || expr?) && value
173
173
  end
174
174
  end
175
175
 
@@ -206,7 +206,7 @@ module Opal
206
206
  children :name, :value
207
207
 
208
208
  def compile
209
- push "(Opal.class_variable_set(#{class_variable_owner}, '#{name}', ", expr(value), "))"
209
+ push "(Opal.class_variable_set(#{class_variable_owner}, '#{name}', ", expr(value), '))'
210
210
  end
211
211
  end
212
212
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/nodes/base'
3
4
 
4
5
  module Opal
@@ -29,18 +30,18 @@ module Opal
29
30
  push "#{redo_var} = false;" if uses_redo?
30
31
  line body_code
31
32
  end
32
- line "}"
33
+ line '}'
33
34
  end
34
35
 
35
36
  wrap '(function() {', '; return nil; })()' if wrap_in_closure?
36
37
  end
37
38
 
38
39
  def while_open
39
- "while ("
40
+ 'while ('
40
41
  end
41
42
 
42
43
  def while_close
43
- ") {"
44
+ ') {'
44
45
  end
45
46
 
46
47
  def uses_redo?
@@ -48,7 +49,7 @@ module Opal
48
49
  end
49
50
 
50
51
  def wrap_in_closure?
51
- expr? or recv?
52
+ expr? || recv?
52
53
  end
53
54
  end
54
55
 
@@ -60,11 +61,11 @@ module Opal
60
61
  handle :until
61
62
 
62
63
  def while_open
63
- "while (!("
64
+ 'while (!('
64
65
  end
65
66
 
66
67
  def while_close
67
- ")) {"
68
+ ')) {'
68
69
  end
69
70
  end
70
71
 
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Opal
4
+ module Nodes
5
+ class XStringNode < Base
6
+ handle :xstr
7
+
8
+ def compile
9
+ @should_add_semicolon = false
10
+ unpacked_children = unpack_return(children)
11
+ stripped_children = strip_empty_children(unpacked_children)
12
+
13
+ if single_line?(stripped_children)
14
+ # If it's a single line we'll try to:
15
+ #
16
+ # - strip empty lines
17
+ # - remove a trailing `;`
18
+ # - detect an embedded `return`
19
+ # - prepend a `return` when needed
20
+ # - append a `;` when needed
21
+ # - warn the user not to use the semicolon in single-line x-strings
22
+ compile_single_line(stripped_children)
23
+ else
24
+ # Here we leave to the user the responsibility to add
25
+ # a return where it's due.
26
+ unpacked_children.each { |c| compile_child(c) }
27
+ end
28
+
29
+ wrap '(', ')' if recv?
30
+ push ';' if @should_add_semicolon
31
+ end
32
+
33
+
34
+ private
35
+
36
+ def compile_child(child)
37
+ case child.type
38
+ when :str
39
+ value = child.loc.expression.source
40
+ push Fragment.new(value, scope, child)
41
+ when :begin, :gvar, :ivar, :nil
42
+ push expr(child)
43
+ else
44
+ raise "Unsupported xstr part: #{child.type}"
45
+ end
46
+ end
47
+
48
+ def compile_single_line(children)
49
+ has_embeded_return = false
50
+
51
+ first_child = children.shift
52
+ single_child = children.empty?
53
+
54
+ first_child ||= s(:nil)
55
+
56
+ if first_child.type == :str
57
+ first_value = first_child.loc.expression.source.strip
58
+ has_embeded_return = first_value =~ /^return\b/
59
+ end
60
+
61
+ push('return ') if @returning && !has_embeded_return
62
+
63
+ last_child = children.pop || first_child
64
+ last_value = extract_last_value(last_child) if last_child.type == :str
65
+
66
+ unless single_child
67
+ # assuming there's an interpolation somewhere (type != :str)
68
+ @should_add_semicolon = false
69
+ compile_child(first_child)
70
+ children.each { |c| compile_child(c) }
71
+ end
72
+
73
+ if last_child.type == :str
74
+ push Fragment.new(last_value, scope, last_child)
75
+ else
76
+ compile_child(last_child)
77
+ end
78
+ end
79
+
80
+ # Will drop the trailing semicolon if all conditions are met
81
+ def extract_last_value(last_child)
82
+ last_value = last_child.loc.expression.source.rstrip
83
+
84
+ if (@returning || expr?) && last_value.end_with?(';')
85
+ compiler.warning(
86
+ 'Removed semicolon ending x-string expression, interpreted as unintentional',
87
+ last_child.line,
88
+ )
89
+ last_value = last_value[0..-2]
90
+ end
91
+
92
+ @should_add_semicolon = true if @returning
93
+
94
+ last_value
95
+ end
96
+
97
+ # Check if there's only one child or if they're all part of
98
+ # the same line (e.g. because of interpolations)
99
+ def single_line?(children)
100
+ (children.size == 1) || children.none? do |c|
101
+ c.type == :str && c.loc.expression.source.end_with?("\n")
102
+ end
103
+ end
104
+
105
+ # A case for manually created :js_return statement in Compiler#returns
106
+ # Since we need to take original source of :str we have to use raw source
107
+ # so we need to combine "return" with "raw_source"
108
+ def unpack_return(children)
109
+ first_child = children.first
110
+ @returning = false
111
+
112
+ if first_child.type == :js_return
113
+ @returning = true
114
+ children = first_child.children
115
+ end
116
+
117
+ children
118
+ end
119
+
120
+ # Will remove empty :str lines coming from cosmetic newlines in x-strings
121
+ #
122
+ # @example
123
+ # # this will generate two additional empty
124
+ # # children before and after `foo()`
125
+ # %x{
126
+ # foo()
127
+ # }
128
+ def strip_empty_children(children)
129
+ children = children.dup
130
+ empty_line = ->(child) { child.nil? || (child.type == :str && child.loc.expression.source.rstrip.empty?) }
131
+
132
+ children.shift while children.any? && empty_line[children.first]
133
+ children.pop while children.any? && empty_line[children.last]
134
+
135
+ children
136
+ end
137
+ end
138
+ end
139
+ end
@@ -1,14 +1,17 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/nodes/base'
3
4
 
4
5
  module Opal
5
6
  module Nodes
6
7
  class BaseYieldNode < Base
7
- def compile_call(children, level)
8
+ def compile_call
8
9
  yielding_scope = find_yielding_scope
9
10
 
10
11
  yielding_scope.uses_block!
11
- block_name = yielding_scope.block_name || '$yield'
12
+ yielding_scope.block_name ||= '$yield'
13
+
14
+ block_name = yielding_scope.block_name
12
15
 
13
16
  if yields_single_arg?(children)
14
17
  push expr(children.first)
@@ -27,7 +30,7 @@ module Opal
27
30
  def find_yielding_scope
28
31
  working = scope
29
32
  while working
30
- if working.block_name or working.def?
33
+ if working.block_name || working.def?
31
34
  break
32
35
  end
33
36
  working = working.parent
@@ -37,7 +40,7 @@ module Opal
37
40
  end
38
41
 
39
42
  def yields_single_arg?(children)
40
- !uses_splat?(children) and children.size == 1
43
+ !uses_splat?(children) && children.size == 1
41
44
  end
42
45
 
43
46
  def uses_splat?(children)
@@ -49,7 +52,7 @@ module Opal
49
52
  handle :yield
50
53
 
51
54
  def compile
52
- compile_call(children, @level)
55
+ compile_call
53
56
  end
54
57
  end
55
58
 
@@ -59,9 +62,9 @@ module Opal
59
62
  handle :returnable_yield
60
63
 
61
64
  def compile
62
- compile_call children, @level
65
+ compile_call
63
66
 
64
- wrap "return ", ";"
67
+ wrap 'return ', ';'
65
68
  end
66
69
  end
67
70
  end
@@ -1,50 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'opal/ast/builder'
3
4
  require 'opal/rewriter'
4
-
5
- module Opal
6
- module Source
7
- class Buffer < Parser::Source::Buffer
8
- def self.recognize_encoding(string)
9
- super || Encoding::UTF_8
10
- end
11
- end
12
- end
13
-
14
- class Parser < ::Parser::Ruby23
15
- class << self
16
- attr_accessor :diagnostics_consumer
17
-
18
- def default_parser
19
- parser = super
20
-
21
- parser.diagnostics.all_errors_are_fatal = true
22
- parser.diagnostics.ignore_warnings = false
23
-
24
- if RUBY_ENGINE == 'opal'
25
- parser.diagnostics.consumer = ->(diag){}
26
- else
27
- parser.diagnostics.consumer = diagnostics_consumer
28
- end
29
-
30
- parser
31
- end
32
- end
33
-
34
- self.diagnostics_consumer = ->(diagnostic) { $stderr.puts(diagnostic.render) }
35
-
36
- def initialize(*)
37
- super(Opal::AST::Builder.new)
38
- end
39
-
40
- def parse(source_buffer)
41
- parsed = super
42
- rewriten = rewrite(parsed)
43
- rewriten
44
- end
45
-
46
- def rewrite(node)
47
- Opal::Rewriter.new(node).process
48
- end
49
- end
5
+ require 'opal/parser/source_buffer'
6
+ require 'opal/parser/default_config'
7
+ require 'opal/parser/with_ruby_lexer'
8
+
9
+ if RUBY_ENGINE == 'opal'
10
+ require 'opal/parser/patch'
11
+ else
12
+ require 'opal/parser/with_c_lexer'
50
13
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Opal
4
+ module Parser
5
+ module DefaultConfig
6
+ module ClassMethods
7
+ attr_accessor :diagnostics_consumer
8
+
9
+ def default_parser
10
+ parser = super
11
+ parser.diagnostics.all_errors_are_fatal = true
12
+ parser.diagnostics.ignore_warnings = false
13
+ parser.diagnostics.consumer = diagnostics_consumer
14
+ parser
15
+ end
16
+ end
17
+
18
+ def self.included(klass)
19
+ klass.extend(ClassMethods)
20
+ klass.diagnostics_consumer = ->(diagnostic) do
21
+ if RUBY_ENGINE != 'opal'
22
+ $stderr.puts(diagnostic.render)
23
+ end
24
+ end
25
+ end
26
+
27
+ def initialize(*)
28
+ super(Opal::AST::Builder.new)
29
+ end
30
+
31
+ def parse(source_buffer)
32
+ parsed = super
33
+ rewriten = rewrite(parsed)
34
+ rewriten
35
+ end
36
+
37
+ def rewrite(node)
38
+ Opal::Rewriter.new(node).process
39
+ end
40
+ end
41
+
42
+ class << self
43
+ attr_accessor :default_parser_class
44
+
45
+ def default_parser
46
+ default_parser_class.default_parser
47
+ end
48
+ end
49
+ end
50
+ end