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
@@ -20,7 +20,7 @@ class Template
20
20
  end
21
21
 
22
22
  def inspect
23
- "#<Template: '#@name'>"
23
+ "#<Template: '#{@name}'>"
24
24
  end
25
25
 
26
26
  def render(ctx = self)
@@ -43,4 +43,3 @@ class Template
43
43
  end
44
44
  end
45
45
  end
46
-
@@ -21,7 +21,7 @@ class Thread
21
21
 
22
22
  # Do not allow creation of new instances.
23
23
  def initialize(*args)
24
- fail NotImplementedError, "Thread creation not available"
24
+ raise NotImplementedError, 'Thread creation not available'
25
25
  end
26
26
 
27
27
  # fiber-local attribute access.
@@ -59,6 +59,7 @@ class Thread
59
59
  end
60
60
 
61
61
  private
62
+
62
63
  def core_initialize!
63
64
  @thread_locals = {}
64
65
  @fiber_locals = {}
@@ -68,7 +69,6 @@ class Thread
68
69
  Opal.coerce_to!(key, String, :to_s)
69
70
  end
70
71
 
71
- public
72
72
  class Queue
73
73
  def initialize
74
74
  clear
@@ -90,8 +90,8 @@ class Thread
90
90
 
91
91
  def pop(non_block = false)
92
92
  if empty?
93
- fail ThreadError, "Queue empty" if non_block
94
- fail ThreadError, "Deadlock"
93
+ raise ThreadError, 'Queue empty' if non_block
94
+ raise ThreadError, 'Deadlock'
95
95
  end
96
96
 
97
97
  @storage.shift
@@ -111,7 +111,6 @@ class Thread
111
111
  @storage.each(&block)
112
112
  end
113
113
  end
114
-
115
114
  end
116
115
 
117
116
  Queue = Thread::Queue
@@ -124,7 +123,7 @@ class Mutex
124
123
  end
125
124
 
126
125
  def lock
127
- fail ThreadError, "Deadlock" if @locked
126
+ raise ThreadError, 'Deadlock' if @locked
128
127
  @locked = true
129
128
  self
130
129
  end
@@ -148,7 +147,7 @@ class Mutex
148
147
  end
149
148
 
150
149
  def unlock
151
- fail ThreadError, "Mutex not locked" unless @locked
150
+ raise ThreadError, 'Mutex not locked' unless @locked
152
151
  @locked = false
153
152
  self
154
153
  end
@@ -107,7 +107,7 @@ namespace :bench do
107
107
  raise ArgumentError, "no files provided" if files.empty?
108
108
  puts "=== Files: #{files.join ', '}"
109
109
  files.each do |bm_path|
110
- sh "bundle exec opal -ropal/platform -gbenchmark-ips -rbenchmark/ips -A #{bm_path}"
110
+ sh "bundle exec opal --dynamic-require ignore --missing-require ignore -ropal/platform -gbenchmark-ips -rbenchmark/ips -A #{bm_path}"
111
111
  end
112
112
  end
113
113
  end
@@ -17,9 +17,7 @@ task :dist do
17
17
  Opal::Config.arity_check_enabled = false
18
18
  Opal::Config.const_missing_enabled = false
19
19
  Opal::Config.dynamic_require_severity = :warning
20
-
21
- # Hike gem is required to build opal-builder
22
- Opal.use_gem 'hike'
20
+ Opal::Config.missing_require_severity = :error
23
21
 
24
22
  build_dir = ENV['DIR'] || 'build'
25
23
  files = ENV['FILES'] ? ENV['FILES'].split(',') :
@@ -34,9 +32,9 @@ task :dist do
34
32
  log << "* building #{lib}...".ljust(width+'* building ... '.size)
35
33
  $stdout.flush
36
34
 
37
- # Set requirable to true to be consistent with previous builds, generated
38
- # with sprockets.
39
- src = Opal::Builder.build(lib, requirable: true).to_s
35
+ # Set requirable to true, unless building opal. This allows opal to be auto-loaded.
36
+ requirable = (lib != 'opal')
37
+ src = Opal::Builder.build(lib, requirable: requirable).to_s
40
38
  min = Opal::Util.uglify src
41
39
  gzp = Opal::Util.gzip min
42
40
 
@@ -54,12 +52,6 @@ task :dist do
54
52
  end.map(&:value).map(&method(:puts))
55
53
  end
56
54
 
57
- desc 'Rebuild grammar.rb for opal parser'
58
- task :racc do
59
- debug_option = '--debug' if ENV['RACC_DEBUG']
60
- sh "racc #{debug_option} -l -o lib/opal/parser/grammar.rb lib/opal/parser/grammar.y"
61
- end
62
-
63
55
  desc 'Remove any generated file.'
64
56
  task :clobber do
65
57
  rm_r './build'
@@ -1,3 +1,4 @@
1
+ import 'tasks/building.rake'
1
2
  desc "Build *corelib* and *stdlib* and lint the result"
2
3
  task :jshint do
3
4
  dir = 'tmp/lint'
@@ -5,7 +6,8 @@ task :jshint do
5
6
  puts "= Checking distributed files..."
6
7
  unless ENV['SKIP_BUILD']
7
8
  rm_rf dir if File.exist? dir
8
- sh "bundle exec rake dist DIR=#{dir}"
9
+ ENV['DIR'] = dir
10
+ Rake::Task[:dist].invoke
9
11
  end
10
12
 
11
13
  Dir["#{dir}/*.js"].each {|path|
@@ -19,7 +21,8 @@ task :jshint do
19
21
  js_paths = []
20
22
  Dir['opal/{opal,corelib}/*.rb'].each do |path|
21
23
  js_path = "#{dir}/#{path.tr('/', '-')}.js"
22
- sh "bundle exec opal -Dignore -cEO #{path} > #{js_path}"
24
+ Bundler::SharedHelpers.set_bundle_environment
25
+ File.write js_path, Opal.compile(File.read(path), file: path, dynamic_require_severity: :ignore)
23
26
  js_paths << js_path
24
27
  end
25
28
  js_paths.each do |js_path|
@@ -27,3 +30,15 @@ task :jshint do
27
30
  end
28
31
  sh "jshint --verbose opal/corelib/runtime.js"
29
32
  end
33
+
34
+ require 'rubocop/rake_task'
35
+ desc 'Run RuboCop on lib/, opal/ and stdlib/ directories'
36
+ RuboCop::RakeTask.new(:rubocop) do |task|
37
+ # TODO: enable it back after releasing https://github.com/bbatsov/rubocop/pull/5633
38
+ # task.options << '--fail-fast'
39
+ task.options << '--extra-details'
40
+ task.options << '--display-style-guide'
41
+ task.options << '--parallel'
42
+ end
43
+
44
+ task :lint => [:jshint, :rubocop]
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler.require
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ # Let the release process update the changelog from github
8
+ task :release => :changelog
9
+
10
+ github_releases = -> do
11
+ require 'date'
12
+ require 'octokit'
13
+ Octokit.auto_paginate = true
14
+
15
+ Octokit.releases('opal/opal').sort_by do |r|
16
+ Gem::Version.new(r[:tag_name][1..-1])
17
+ end.select do |release|
18
+ release[:tag_name] =~ /^v(\d+)(\.\d+)*$/
19
+ end
20
+ end
21
+
22
+ expand_pull_request_links = -> string {
23
+ string.gsub(/\(#(\d+)\)/, '([#\1](https://github.com/opal/opal/pull/\1))')
24
+ }
25
+
26
+ changelog_entry = -> (
27
+ tag_name:,
28
+ release_date:,
29
+ previous_tag_name:,
30
+ body:
31
+ ) do
32
+ compare_url = "https://github.com/opal/opal/compare/#{previous_tag_name}...#{tag_name}"
33
+ version_name = tag_name == 'HEAD' ? 'Unreleased' : tag_name.sub(/^v/, '')
34
+ [
35
+ "## [#{version_name}](#{compare_url}) - #{release_date}\n\n\n",
36
+ expand_pull_request_links[body.gsub("\r\n", "\n").strip],
37
+ ].join('')
38
+ end
39
+
40
+ CHANGELOG_HEADING = <<~MARKDOWN
41
+ # Change Log
42
+
43
+ All notable changes to this project will be documented in this file.
44
+ This project *tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
45
+
46
+ Changes are grouped as follows:
47
+ - **Added** for new features.
48
+ - **Changed** for changes in existing functionality.
49
+ - **Deprecated** for once-stable features removed in upcoming releases.
50
+ - **Removed** for deprecated features removed in this release.
51
+ - **Fixed** for any bug fixes.
52
+ - **Security** to invite users to upgrade in case of vulnerabilities.
53
+ MARKDOWN
54
+
55
+ desc "Update CHANGELOG.md usign info from published GitHub releases (the first unreleased section is preserved)"
56
+ task :changelog do
57
+ changelog_path = "#{__dir__}/../CHANGELOG.md"
58
+ unreleased_path = "#{__dir__}/../UNRELEASED.md"
59
+ changelog_entries = []
60
+ previous_tag_name = '000000'
61
+
62
+ github_releases.call.each do |release|
63
+ changelog_entries.unshift changelog_entry.call(
64
+ tag_name: release[:tag_name],
65
+ release_date: release[:created_at].to_date.iso8601, # YYYY-MM-DD
66
+ previous_tag_name: previous_tag_name,
67
+ body: release[:body],
68
+ )
69
+ previous_tag_name = release[:tag_name]
70
+ end
71
+
72
+ changelog_entries.unshift changelog_entry.call(
73
+ tag_name: 'HEAD',
74
+ release_date: 'unreleased',
75
+ previous_tag_name: previous_tag_name,
76
+ body: File.read(unreleased_path),
77
+ )
78
+
79
+ changelog_entries.unshift CHANGELOG_HEADING
80
+
81
+ changelog_entries << nil # for the final newlines
82
+
83
+ File.write changelog_path, changelog_entries.join("\n\n\n\n\n")
84
+ end
@@ -3,6 +3,11 @@ RSpec::Core::RakeTask.new(:rspec) do |t|
3
3
  t.pattern = 'spec/lib/**/*_spec.rb'
4
4
  end
5
5
 
6
+ if ENV.key?('RUBYSPEC')
7
+ warn "Did you mean RUBYSPECS=...? (RUBYSPEC was found among ENV variables)"
8
+ exit 1
9
+ end
10
+
6
11
  module Testing
7
12
  extend self
8
13
 
@@ -20,7 +25,6 @@ module Testing
20
25
  mspec/helpers/tmp
21
26
  mspec/helpers/environment
22
27
  mspec/guards/block_device
23
- mspec/guards/endian
24
28
  a_file
25
29
  lib/spec_helper
26
30
  mspec/commands/mspec-run
@@ -32,6 +36,7 @@ module Testing
32
36
  suite = env['SUITE']
33
37
  pattern = env['PATTERN']
34
38
  whitelist_pattern = !!env['RUBYSPECS']
39
+ env['OPAL_PLATFORM_NAME'] = RbConfig::CONFIG['host_os'] unless env['OPAL_PLATFORM_NAME']
35
40
 
36
41
  excepting = []
37
42
  rubyspecs = File.read('spec/ruby_specs').lines.reject do |l|
@@ -139,6 +144,7 @@ module Testing
139
144
 
140
145
  module Minitest
141
146
  extend self
147
+ extend FileUtils
142
148
 
143
149
  def write_file(filename, files = [], env = {})
144
150
  env_data = env.map{ |k,v| "ENV[#{k.inspect}] = #{v.to_s.inspect}" unless v.nil? }.join("\n")
@@ -227,6 +233,38 @@ module Testing
227
233
  end
228
234
  end
229
235
 
236
+ class HTTPServer
237
+ def with_server
238
+ begin
239
+ server = Process.spawn 'ruby test/opal/http_server.rb'
240
+ puts 'Waiting for server…'
241
+ sleep 0.1 until sinatra_server_running?
242
+ puts 'Server ready.'
243
+ yield self
244
+ ensure
245
+ if windows?
246
+ # https://blog.simplificator.com/2016/01/18/how-to-kill-processes-on-windows-using-ruby/
247
+ # system("taskkill /f /pid #{pid}")
248
+ Process.kill("KILL", server)
249
+ else
250
+ Process.kill(:TERM, server)
251
+ end
252
+ Process.wait(server)
253
+ end
254
+ end
255
+
256
+ def windows?
257
+ (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
258
+ end
259
+
260
+ def sinatra_server_running?
261
+ puts "Connecting to localhost:4567..."
262
+ TCPSocket.new('localhost', '4567').close
263
+ true
264
+ rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL
265
+ false
266
+ end
267
+ end
230
268
  end
231
269
 
232
270
 
@@ -235,8 +273,8 @@ Use PATTERN environment variable to manually set the glob for specs:
235
273
 
236
274
  # Will run all specs matching the specified pattern.
237
275
  # (Note: the ruby_specs filters will still apply)
238
- bundle exec rake mspec_node PATTERN=spec/ruby/core/module/class_variable*_spec.rb
239
- bundle exec rake mspec_node PATTERN=spec/ruby/core/numeric/**_spec.rb
276
+ bundle exec rake mspec_nodejs PATTERN=spec/ruby/core/module/class_variable*_spec.rb
277
+ bundle exec rake mspec_nodejs PATTERN=spec/ruby/core/numeric/**_spec.rb
240
278
  DESC
241
279
 
242
280
  platforms = %w[nodejs server chrome]
@@ -261,7 +299,7 @@ platforms.each do |platform|
261
299
  stubs = Testing::MSpec.stubs.map{|s| "-s#{s}"}.join(' ')
262
300
 
263
301
  sh "ruby -w -rbundler/setup -r#{__dir__}/testing/mspec_special_calls "\
264
- "exe/opal -gmspec -Ispec -Ilib #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
302
+ "exe/opal -Ispec/mspec/lib -Ispec -Ilib #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
265
303
 
266
304
  if bm_filepath
267
305
  puts "Benchmark results have been written to #{bm_filepath}"
@@ -283,18 +321,22 @@ platforms.each do |platform|
283
321
  ruby/test_call.rb
284
322
  opal/test_keyword.rb
285
323
  opal/test_base64.rb
324
+ opal/test_openuri.rb
286
325
  opal/unsupported_and_bugs.rb
326
+ opal/test_matrix.rb
287
327
  ]
288
328
  end
329
+ Testing::HTTPServer.new.with_server do |session|
330
+ filename = "tmp/minitest_#{suite}_#{platform}.rb"
331
+ files.push('nodejs') if platform == 'nodejs'
332
+ Testing::Minitest.write_file(filename, files, ENV)
289
333
 
290
- filename = "tmp/minitest_#{suite}_#{platform}.rb"
291
- Testing::Minitest.write_file(filename, files, ENV)
292
-
293
- stubs = "-soptparse -sio/console -stimeout -smutex_m -srubygems -stempfile -smonitor"
294
- includes = "-Itest -Ilib -Ivendored-minitest #{includes}"
334
+ stubs = "-soptparse -sio/console -stimeout -smutex_m -srubygems -stempfile -smonitor"
335
+ includes = "-Itest -Ilib -Ivendored-minitest #{includes}"
295
336
 
296
- sh "ruby -rbundler/setup "\
297
- "exe/opal -ghike #{includes} #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
337
+ sh "ruby -rbundler/setup "\
338
+ "exe/opal #{includes} #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
339
+ end
298
340
  end
299
341
  end
300
342
  end
@@ -302,15 +344,15 @@ end
302
344
  # The name ends with the platform, which is of course mandated in this case
303
345
  desc "Run the Node.js Minitest suite on Node.js"
304
346
  task :minitest_node_nodejs do
305
- Opal.use_gem 'hike'
306
-
307
347
  platform = 'nodejs'
308
348
  files = %w[
309
349
  nodejs
310
350
  opal-parser
311
351
  nodejs/test_file.rb
312
352
  nodejs/test_dir.rb
353
+ nodejs/test_env.rb
313
354
  nodejs/test_io.rb
355
+ nodejs/test_file_encoding.rb
314
356
  nodejs/test_opal_builder.rb
315
357
  ]
316
358
 
@@ -321,7 +363,7 @@ task :minitest_node_nodejs do
321
363
  includes = "-Itest -Ilib -Ivendored-minitest"
322
364
 
323
365
  sh "ruby -rbundler/setup "\
324
- "exe/opal -ghike #{includes} #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
366
+ "exe/opal #{includes} #{stubs} -R#{platform} -Dwarning -A --enable-source-location #{filename}"
325
367
  end
326
368
 
327
369
  desc 'Run smoke tests with opal-rspec to see if something is broken'
@@ -340,7 +382,7 @@ task :smoke_test do
340
382
 
341
383
  cd opal_rspec_dir do
342
384
  Bundler.with_clean_env do
343
- sh 'bundle install'
385
+ sh 'bundle check && bundle update opal-rspec || bundle install'
344
386
  sh %{bundle exec opal-rspec --color --default-path=../../spec ../../spec/lib/deprecations_spec.rb > #{actual_output_path}}
345
387
 
346
388
  actual_output = File.read(actual_output_path)
@@ -1,4 +1,5 @@
1
1
  require 'opal/nodes/call'
2
+ require 'opal/ast/builder'
2
3
 
3
4
  class Opal::Nodes::CallNode
4
5
  # Rubyspec uses this call to load in language specific features at runtime.
@@ -28,14 +29,20 @@ class Opal::Nodes::CallNode
28
29
  end
29
30
  end
30
31
 
32
+ has_xstring = -> node {
33
+ next if node.nil? || !node.respond_to?(:type)
34
+ node.type == :xstr || (node.children && node.children.any?(&has_xstring))
35
+ }
36
+
31
37
  add_special :platform_is_not do |compile_default|
32
- unless arglist.children.include?(s(:sym, :opal))
33
- compile_default.call
34
- end
38
+ next if arglist.children.include?(s(:sym, :opal))
39
+ next if children.any?(&has_xstring)
40
+
41
+ compile_default.call
35
42
  end
36
43
 
37
44
  add_special :platform_is do |compile_default|
38
- if arglist.children.include?(s(:sym, :opal))
45
+ if arglist.children.include?(s(:sym, :opal)) || !children.any?(&has_xstring)
39
46
  compile_default.call
40
47
  end
41
48
  end
@@ -69,5 +76,17 @@ def opal_unsupported_filter(filter_name, &block)
69
76
  Opal::Rubyspec::FiltersRewriter.instance_eval(&block)
70
77
  end
71
78
 
79
+ # In the test environment we have to parse invalid characters
80
+ # Otherwise the parser throws an error and the whole suites aborts
81
+ class Opal::AST::Builder
82
+ def string_value(token)
83
+ unless token[0].valid_encoding?
84
+ diagnostic(:warning, :invalid_encoding, nil, token[1])
85
+ end
86
+
87
+ token[0]
88
+ end
89
+ end
90
+
72
91
  Dir[File.expand_path('../../../spec/filters/unsupported/**/*.rb', __FILE__)].each { |f| require f }
73
92
  Dir[File.expand_path('../../../spec/filters/bugs/**/*.rb', __FILE__)].each { |f| require f }