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,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "opal"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/opal CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'bundler/setup'
4
-
5
4
  load "#{__dir__}/../exe/opal"
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ file = ARGV.shift
4
+ if ARGV.any?
5
+ warn "usage example:\n\n #{$0} benchmark-ips/bm_case.rb\n"
6
+ exit 1
7
+ end
8
+ exec 'bundle', 'exec', 'rake', 'bench:ips', "FILE=#{file}"
@@ -1,3 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- exec "#{__dir__}/../exe/#{File.basename($0)}", *ARGV
3
+ specs = ARGV.map do |s|
4
+ s.end_with?('.rb') ? s : "#{s}/**/*_spec.rb"
5
+ end
6
+
7
+ env = {}
8
+ env['MSPEC_PATTERN'] = "{#{specs.join(',')}}" if specs.any?
9
+ exec env, 'rake', 'mspec'
10
+
11
+ # RUBYOPT="-rbundler/setup -rmspec/opal/special_calls" bundle exec mspec run -t opal -pspec/ruby/spec_helper spec/ruby/core/true/*
@@ -1,3 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- exec "#{__dir__}/../exe/#{File.basename($0)}", *ARGV
3
+ require 'bundler/setup'
4
+ load "#{__dir__}/../exe/opal-repl"
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "rubygems"
5
+ require "bundler/setup"
6
+
7
+ load Gem.bin_path("rake", "rake")
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle update
7
+
8
+ git submodule update --init
@@ -478,26 +478,107 @@ If you want to integrate a JavaScript library with Opal, so that you can make Ru
478
478
  ## Ruby from JavaScript
479
479
 
480
480
  Accessing classes and methods defined in Opal from the JavaScript runtime is
481
- possible via the `Opal` js object. The following class:
481
+ possible via the `Opal` JS object. Consider following code:
482
482
 
483
483
  ```ruby
484
+ module Bar
485
+ BAR = 123
486
+ end
487
+
484
488
  class Foo
485
- def bar
486
- puts "called bar on class Foo defined in Ruby code"
489
+ include Bar
490
+ FOO = 456
491
+
492
+ def foo
493
+ puts "called #foo on class ::Foo defined in Ruby code"
487
494
  end
488
495
  end
496
+
497
+ BAZ = 789
498
+ ```
499
+
500
+ ### Navigating constants
501
+
502
+ Top level constants can be accessed as properties of `Opal`:
503
+
504
+
505
+ ```javascript
506
+ Opal.Object; // => Object
507
+ Opal.Kernel; // => Kernel
508
+ Opal.Array; // => Array
509
+ Opal.RUBY_VERSION; // => "2.3"
510
+ Opal.Foo; // => Foo
511
+ Opal.BAZ; // => 789
512
+ ```
513
+
514
+ To reach nested constants the safest way is to call `#const_get` on `Object`:
515
+
516
+ ```javascript
517
+ Opal.Object.$$const_get('Bar::BAR'); // => 123
518
+ Opal.Object.$$const_get('Foo::BAR'); // => 123
519
+ Opal.Object.$$const_get('Foo::FOO'); // => 456
520
+ Opal.Object.$$const_get('BAZ'); // => 789
521
+ ```
522
+
523
+ Constants can also be navigated using the `$$` property, although this is limited to constants defined directly under the current object:
524
+
525
+ ```javascript
526
+ Opal.Bar.$$.BAR // => 123
527
+ Opal.Foo.$$.FOO // => 456
528
+ Opal.Foo.$$.BAR // => undefined
489
529
  ```
490
530
 
491
- Can be accessed from JavaScript like this:
531
+
532
+ ### Calling methods
533
+
534
+ **Methods** are always prefixed by a single `$`:
492
535
 
493
536
  ```javascript
494
- Opal.Foo.$new().$bar();
495
- // => "called bar on class Foo defined in Ruby code"
537
+ // Equivalent to:
538
+ // Foo.new.foo
539
+ Opal.Foo.$new().$foo(); // => "called #foo on class ::Foo defined in Ruby code"
540
+
541
+ // Equivalent to:
542
+ // "hello there".sub('there', 'world')
543
+ ("hello there").$sub('there', 'world'); // => "hello world"
496
544
  ```
497
545
 
498
- Remember that all Ruby methods are prefixed with a `$`.
546
+ **Methods names unsupported in JS** should be called using the JS bracket notation:
547
+
548
+ ```javascript
549
+ // Equivalent to:
550
+ // hash = Hash.new["key"] = "value"
551
+ // hash["key"] = "value"
552
+ var hash = Opal.Hash.$new(); // => {}
553
+ hash["$[]="]("key", "value"); // => "value"
554
+
555
+ // Equivalent to:
556
+ // [1,2,3].reverse!
557
+ [1,2,3]['$reverse!'](); // => [3,2,1]
558
+
559
+ // Equivalent to:
560
+ // 1 == 2
561
+ (1)['$=='](2); // => false
562
+ ```
563
+
564
+ **Passing blocks** from JS is a bit more tricky, so the suggested solution is to use `Opal.send(…)`:
565
+
566
+ ```javascript
567
+ // Equivalent to:
568
+ // [1,2,3].map {|n| n * 2}
569
+ Opal.send([1,2,3], 'map', [], function(n) {return n * 2}); // => [2,4,6]
570
+ ```
571
+
572
+ Alternatively blocks can also be called *the hard way* by assigning the block-function to the property `$$p` of the method:
573
+
574
+ ```javascript
575
+ // Equivalent to:
576
+ // [1,2,3].map {|n| n * 2}
577
+ array = [1,2,3]
578
+ array.$map.$$p = function(n) {return n * 2}; // "$$p" stands for "proc"
579
+ array.$map(); // => [2,4,6]
580
+ ```
499
581
 
500
- In the case that a method name can't be called directly due to a JavaScript syntax error, you will need to call the method using bracket notation. For example, you can call `foo.$merge(...)` but not `foo.$merge!(...)`, `bar.$fetch('somekey')` but not `bar.$[]('somekey')`. Instead you would write it like this: `foo['$merge!'](...)` or `bar['$[]']('somekey')`.
501
582
 
502
583
 
503
584
  ### Hash
@@ -9,27 +9,12 @@ other runtime helpers.
9
9
 
10
10
  The compiler can be broken down into 3 separate stages:
11
11
 
12
- * lexing
13
- * parsing
12
+ * lexing/parsing
14
13
  * code generation
15
14
 
16
- ### Lexer
15
+ ### Lexer/Parser
17
16
 
18
- The [opal lexer][lexer] is implemented in pure ruby using
19
- the `StringScanner` class from the opal stdlib. The source code is scanned
20
- and tokens are then provided to the parser. This process simply converts
21
- the ruby code given as a string, into a list of tokens representing the
22
- parts of the ruby code.
23
-
24
- ### Parser
25
-
26
- The [opal parser][parser] is implemented using a standard
27
- bison like syntax, but relies on `racc`, a ruby implementation of yacc/bison
28
- which is again available in the standard library. The parser takes these tokens
29
- generated by the lexer and builds a syntax tree representing the ruby code.
30
- This syntax tree is represented by [sexps][sexps]. As
31
- ruby is such a complex and dynamic language, there is a lot of interaction
32
- between the parser and the lexer, namely through a preserved `lex_state`.
17
+ The [opal parser][parser] relies on the `parser` gem, see debug/development documentation there to know more about its internals: https://whitequark.github.io/parser/.
33
18
 
34
19
  ### Code generation
35
20
 
@@ -42,8 +27,6 @@ code as well as a reference back to the original sexp which is useful for
42
27
  generating source maps afterwards.
43
28
 
44
29
 
45
- [lexer]: https://github.com/opal/opal/tree/master/lib/opal/parser/lexer.rb
46
- [parser]: https://github.com/opal/opal/tree/master/lib/opal/parser/grammar.y
47
30
  [sexps]: https://github.com/opal/opal/tree/master/lib/opal/parser/sexp.rb
48
31
  [compiler]: https://github.com/opal/opal/tree/master/lib/opal/compiler.rb
49
32
  [fragments]: https://github.com/opal/opal/tree/master/lib/opal/fragment.rb
@@ -30,27 +30,60 @@ gem 'opal-jquery'
30
30
 
31
31
  #### Usage
32
32
 
33
- `opal-jquery` can now be easily added to your opal application sources using a
34
- standard require:
33
+ `opal-jquery` can now be easily added to your opal application sources:
35
34
 
36
35
  ```ruby
37
36
  # app/application.rb
38
- require 'opal'
39
- require 'jquery'
40
- require 'opal-jquery'
37
+
38
+ # Remember to compile opal-jquery with your javascript application.
39
+ # See "Compiling" below for an example on compiling dependencies.
40
+ require 'opal/jquery'
41
41
 
42
42
  alert "Hello from jquery + opal"
43
43
  ```
44
44
 
45
- NOTE: this file requires two important dependencies, `jquery` and `opal-jquery`.
46
- You need to bring your own `jquery.js` file as the gem does not include one. If
47
- you are using the asset pipeline with rails, then this should be available
48
- already, otherwise download a copy and place it into `app/` or whichever directory
49
- you are compiling assets from. You can alternatively require a zepto instance.
50
-
51
45
  The `#alert` method is provided by `opal-jquery`. If the message displays, then
52
46
  `jquery` support should be working.
53
47
 
48
+
49
+ #### Compiling
50
+
51
+ When compiling your application to javascript, you must be sure to include both
52
+ Opal and Opal-JQuery so they'll be available to your application:
53
+
54
+ ```ruby
55
+ require 'opal'
56
+ require 'opal-jquery'
57
+
58
+ builder = Opal::Builder.new
59
+ builder.build('opal')
60
+ builder.build('opal-jquery')
61
+ builder.build('./app/application.rb')
62
+
63
+ File.write('application.js', builder.to_s)
64
+ ```
65
+
66
+ then simply load the compiled file in your html:
67
+
68
+ ```html
69
+ <!DOCTYPE html>
70
+ <html>
71
+ <head>
72
+ <script src='https://code.jquery.com/jquery-3.3.1.min.js' integrity='sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=' crossorigin='anonymous'></script>
73
+ <script type='text/javascript' src='./application.js'></script>
74
+ </head>
75
+ <body></body>
76
+ </html>
77
+ ```
78
+
79
+ NOTE: opal-jquery expects a jquery library to be loaded. This example loads it
80
+ remotely from jquery.com, but a locally downloaded copy works just as well, or-
81
+ if you're using rails- jquery may be included automatically.
82
+
83
+ This example builds opal, opal-jquery and the application into a single `.js` file,
84
+ but you may build them separately, if you so choose. Just remember to include
85
+ each respective script in your html!
86
+
54
87
  ### How does opal-jquery work
55
88
 
56
89
  `opal-jquery` provides an `Element` class, whose instances are toll-free
@@ -38,7 +38,7 @@ A promise can only be resolved or rejected once.
38
38
 
39
39
  ### Chaining Promises
40
40
 
41
- Promises become useful when chained together. The prevous example could be extended to get another object from the result of the first request.
41
+ Promises become useful when chained together. The previous example could be extended to get another object from the result of the first request.
42
42
 
43
43
  ```ruby
44
44
  get_json('/users/1.json').then do |json|
@@ -1,26 +1,30 @@
1
1
  # Opal in a Rails application
2
2
 
3
- Add Opal to your Gemfile:
3
+ Add Opal to your Rails app's Gemfile:
4
4
 
5
5
  ``` ruby
6
6
  gem 'opal-rails'
7
7
  ```
8
8
 
9
- Or to start off with Opal when you build your new Rails app:
9
+ ## Basic usage through the asset pipeline
10
10
 
11
- ```bash
12
- rails new <app-name> --javascript=opal
13
- ```
11
+ To configure your asset pipeline to use opal-rails, make sure to `bundle install`, then rename
12
+ `app/assets/application.js` to `app/assets/application.js.rb` and set its contents to:
14
13
 
15
- ## Basic usage through the asset pipeline
14
+ ```ruby
15
+ # app/assets/application.js.rb
16
+
17
+ # Require the opal runtime and core library
18
+ require 'opal'
19
+
20
+ # For Rails 5.1 and above, otherwise use 'opal_ujs'
21
+ require 'rails_ujs'
16
22
 
17
- ```js
18
- // app/assets/application.js.rb
23
+ # Require of JS libraries will be forwarded to sprockets as is
24
+ require 'turbolinks'
19
25
 
20
- //= require opal
21
- //= require opal_ujs
22
- //= require turbolinks
23
- //= require_tree .
26
+ # a Ruby equivalent of the require_tree Sprockets directive is available
27
+ require_tree '.'
24
28
  ```
25
29
 
26
30
  Opal requires are forwarded to the Asset Pipeline at compile time (similarly to what happens for RubyMotion). You can use either the `.rb` or `.opal` extension:
@@ -1,14 +1,14 @@
1
1
  # Using Opal with Sinatra
2
2
 
3
- Add Opal to your Gemfile (or install using `gem`):
3
+ Add Opal-Sprockets to your Gemfile (or install using `gem`):
4
4
 
5
5
  ```ruby
6
6
  # Gemfile
7
7
  gem 'sinatra'
8
- gem 'opal', '~> 0.6.2'
8
+ gem 'opal-sprockets'
9
9
  ```
10
10
 
11
- Opal uses `sprockets` as its default build system, so the asset-pipeline
11
+ Opal-Sprockets uses `sprockets` as its default build system, so the asset-pipeline
12
12
  from rails can be mimicked here to map all ruby assets in the `/assets`
13
13
  path to be compiled using opal.
14
14
 
@@ -16,16 +16,21 @@ path to be compiled using opal.
16
16
 
17
17
  ```ruby
18
18
  # config.ru
19
- require 'opal'
19
+ require 'opal-sprockets'
20
20
  require 'sinatra'
21
21
 
22
- opal = Opal::Server.new {|s|
22
+ opal = Opal::Sprockets::Server.new {|s|
23
23
  s.append_path 'app'
24
24
  s.main = 'application'
25
25
  }
26
26
 
27
- map opal.source_maps.prefix do
28
- run opal.source_maps
27
+ maps_prefix = Opal::Sprockets::Server::SOURCE_MAPS_PREFIX_PATH
28
+ maps_app = Opal::SourceMapServer.new(opal.sprockets, maps_prefix)
29
+
30
+ map maps_prefix do
31
+ use Rack::ConditionalGet
32
+ use Rack::ETag
33
+ run maps_app
29
34
  end
30
35
 
31
36
  map '/assets' do
@@ -37,7 +42,9 @@ get '/' do
37
42
  <!doctype html>
38
43
  <html>
39
44
  <head>
40
- <script src="/assets/application.js"></script>
45
+ <script src="/assets/opal.js"></script>
46
+ <script src="/assets/application.self.js"></script>
47
+ <script type="text/javascript">Opal.load("application")</script>
41
48
  </head>
42
49
  </html>
43
50
  HTML
@@ -1,19 +1,20 @@
1
1
  # Opal & Sprockets
2
2
 
3
- Opal comes with built-in sprockets support, and provides a simple `Opal::Server`
4
- class to make it easy to get a rack server up and running for trying out opal.
5
- This server will automatically recompile ruby sources when they change, meaning
6
- you just need to refresh your page to autorun.
3
+ The `opal-sprockets` gem adds sprockets support to Opal, providing a simple
4
+ `Opal::Sprockets::server` class to make it easy to get a rack server up and
5
+ running for trying out opal. This server will automatically recompile ruby
6
+ sources when they change, meaning you just need to refresh your page to autorun.
7
7
 
8
8
  ## Getting setup
9
9
 
10
- Add `opal` to a `Gemfile`:
10
+ Add `rack` & `opal-sprockets` to your `Gemfile`:
11
11
 
12
12
  ```ruby
13
13
  #Gemfile
14
14
  source 'https://rubygems.org'
15
15
 
16
- gem 'opal', '>= 0.6.0'
16
+ gem 'rack'
17
+ gem 'opal-sprockets'
17
18
  ```
18
19
 
19
20
  And install with `bundle install`.
@@ -28,17 +29,21 @@ require 'opal'
28
29
  puts "hello world"
29
30
  ```
30
31
 
31
- Finally, we need a html page to run, so create `index.html`:
32
+
33
+ If we do not provide an HTML index, sprockets will generate one automatically;
34
+ however, it is often useful to override the default with a custom `erb` file:
32
35
 
33
36
  ```html
37
+ <%# index.erb %>
34
38
  <!DOCTYPE html>
35
39
  <html>
36
40
  <head>
37
41
  <meta charset="utf-8">
38
42
  <title>opal server example</title>
39
- <script src="/assets/application.js"></script>
43
+ <%= javascript_include_tag @server.main %>
40
44
  </head>
41
45
  <body>
46
+ you've reached the custom index!
42
47
  </body>
43
48
  </html>
44
49
  ```
@@ -49,15 +54,15 @@ Finally, we need a html page to run, so create `index.html`:
49
54
 
50
55
  ```ruby
51
56
  # config.ru
52
- require 'bundler'
53
- Bundler.require
57
+ require 'opal-sprockets'
54
58
 
55
59
  run Opal::Server.new { |s|
56
60
  s.append_path 'app'
57
61
 
58
62
  s.main = 'application'
59
63
 
60
- s.index_path = 'index.html'
64
+ # override the default index with our custom index
65
+ s.index_path = 'index.erb'
61
66
  }
62
67
  ```
63
68