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
@@ -12,7 +12,7 @@ class Hash
12
12
  include Enumerable
13
13
 
14
14
  # Mark all hash instances as valid hashes (used to check keyword args, etc)
15
- `def.$$is_hash = true`
15
+ `self.$$prototype.$$is_hash = true`
16
16
 
17
17
  def self.[](*argv)
18
18
  %x{
@@ -65,7 +65,7 @@ class Hash
65
65
 
66
66
  def self.allocate
67
67
  %x{
68
- var hash = new self.$$alloc();
68
+ var hash = new self.$$constructor();
69
69
 
70
70
  Opal.hash_init(hash);
71
71
 
@@ -87,8 +87,9 @@ class Hash
87
87
  }
88
88
  self.$$none = (defaults === undefined ? nil : defaults);
89
89
  self.$$proc = block;
90
+
91
+ return self;
90
92
  }
91
- self
92
93
  end
93
94
 
94
95
  def ==(other)
@@ -220,7 +221,7 @@ class Hash
220
221
 
221
222
  def clone
222
223
  %x{
223
- var hash = new self.$$class.$$alloc();
224
+ var hash = new self.$$class();
224
225
 
225
226
  Opal.hash_init(hash);
226
227
  Opal.hash_clone(self, hash);
@@ -365,7 +366,7 @@ class Hash
365
366
  }
366
367
 
367
368
  if (block !== nil) {
368
- return #{block.call(key)};
369
+ return #{yield key};
369
370
  }
370
371
 
371
372
  return nil;
@@ -373,7 +374,7 @@ class Hash
373
374
  end
374
375
 
375
376
  def delete_if(&block)
376
- return enum_for(:delete_if){self.size} unless block
377
+ return enum_for(:delete_if) { size } unless block
377
378
 
378
379
  %x{
379
380
  for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) {
@@ -419,7 +420,7 @@ class Hash
419
420
  end
420
421
 
421
422
  def each(&block)
422
- return enum_for(:each){self.size} unless block
423
+ return enum_for(:each) { size } unless block
423
424
 
424
425
  %x{
425
426
  for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) {
@@ -440,7 +441,7 @@ class Hash
440
441
  end
441
442
 
442
443
  def each_key(&block)
443
- return enum_for(:each_key){self.size} unless block
444
+ return enum_for(:each_key) { size } unless block
444
445
 
445
446
  %x{
446
447
  for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) {
@@ -456,7 +457,7 @@ class Hash
456
457
  alias each_pair each
457
458
 
458
459
  def each_value(&block)
459
- return enum_for(:each_value){self.size} unless block
460
+ return enum_for(:each_value) { size } unless block
460
461
 
461
462
  %x{
462
463
  for (var i = 0, keys = self.$$keys, length = keys.length, key; i < length; i++) {
@@ -492,7 +493,7 @@ class Hash
492
493
  }
493
494
  }
494
495
 
495
- raise KeyError, "key not found: #{key.inspect}"
496
+ raise KeyError.new("key not found: #{key.inspect}", key: key, receiver: self)
496
497
  end
497
498
 
498
499
  def fetch_values(*keys, &block)
@@ -642,7 +643,7 @@ class Hash
642
643
 
643
644
  alias indices indexes
644
645
 
645
- `var inspect_ids;`
646
+ `var inspect_ids`
646
647
 
647
648
  def inspect
648
649
  %x{
@@ -706,7 +707,7 @@ class Hash
706
707
  end
707
708
 
708
709
  def keep_if(&block)
709
- return enum_for(:keep_if){self.size} unless block
710
+ return enum_for(:keep_if) { size } unless block
710
711
 
711
712
  %x{
712
713
  for (var i = 0, keys = self.$$keys, length = keys.length, key, value, obj; i < length; i++) {
@@ -843,7 +844,7 @@ class Hash
843
844
  end
844
845
 
845
846
  def reject(&block)
846
- return enum_for(:reject){self.size} unless block
847
+ return enum_for(:reject) { size } unless block
847
848
 
848
849
  %x{
849
850
  var hash = Opal.hash();
@@ -870,7 +871,7 @@ class Hash
870
871
  end
871
872
 
872
873
  def reject!(&block)
873
- return enum_for(:reject!){self.size} unless block
874
+ return enum_for(:reject!) { size } unless block
874
875
 
875
876
  %x{
876
877
  var changes_were_made = false;
@@ -930,7 +931,7 @@ class Hash
930
931
  end
931
932
 
932
933
  def select(&block)
933
- return enum_for(:select){self.size} unless block
934
+ return enum_for(:select) { size } unless block
934
935
 
935
936
  %x{
936
937
  var hash = Opal.hash();
@@ -957,7 +958,7 @@ class Hash
957
958
  end
958
959
 
959
960
  def select!(&block)
960
- return enum_for(:select!){self.size} unless block
961
+ return enum_for(:select!) { size } unless block
961
962
 
962
963
  %x{
963
964
  var result = nil;
@@ -1006,7 +1007,23 @@ class Hash
1006
1007
 
1007
1008
  alias size length
1008
1009
 
1009
- alias_method :store, :[]=
1010
+ def slice(*keys)
1011
+ %x{
1012
+ var result = Opal.hash();
1013
+
1014
+ for (var i = 0, length = keys.length; i < length; i++) {
1015
+ var key = keys[i], value = Opal.hash_get(self, key);
1016
+
1017
+ if (value !== undefined) {
1018
+ Opal.hash_put(result, key, value);
1019
+ }
1020
+ }
1021
+
1022
+ return result;
1023
+ }
1024
+ end
1025
+
1026
+ alias store []=
1010
1027
 
1011
1028
  def to_a
1012
1029
  %x{
@@ -1035,7 +1052,7 @@ class Hash
1035
1052
  return self;
1036
1053
  }
1037
1054
 
1038
- var hash = new Opal.Hash.$$alloc();
1055
+ var hash = new Opal.Hash();
1039
1056
 
1040
1057
  Opal.hash_init(hash);
1041
1058
  Opal.hash_clone(self, hash);
@@ -1052,7 +1069,7 @@ class Hash
1052
1069
  proc do |key = undefined|
1053
1070
  %x{
1054
1071
  if (key == null) {
1055
- #{raise ArgumentError, "no key given"}
1072
+ #{raise ArgumentError, 'no key given'}
1056
1073
  }
1057
1074
  }
1058
1075
 
@@ -1062,8 +1079,60 @@ class Hash
1062
1079
 
1063
1080
  alias to_s inspect
1064
1081
 
1082
+ def transform_keys(&block)
1083
+ return enum_for(:transform_keys) { size } unless block
1084
+
1085
+ %x{
1086
+ var result = Opal.hash();
1087
+
1088
+ for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) {
1089
+ key = keys[i];
1090
+
1091
+ if (key.$$is_string) {
1092
+ value = self.$$smap[key];
1093
+ } else {
1094
+ value = key.value;
1095
+ key = key.key;
1096
+ }
1097
+
1098
+ key = Opal.yield1(block, key);
1099
+
1100
+ Opal.hash_put(result, key, value);
1101
+ }
1102
+
1103
+ return result;
1104
+ }
1105
+ end
1106
+
1107
+ def transform_keys!(&block)
1108
+ return enum_for(:transform_keys!) { size } unless block
1109
+
1110
+ %x{
1111
+ var keys = Opal.slice.call(self.$$keys),
1112
+ i, length = keys.length, key, value, new_key;
1113
+
1114
+ for (i = 0; i < length; i++) {
1115
+ key = keys[i];
1116
+
1117
+ if (key.$$is_string) {
1118
+ value = self.$$smap[key];
1119
+ } else {
1120
+ value = key.value;
1121
+ key = key.key;
1122
+ }
1123
+
1124
+ new_key = Opal.yield1(block, key);
1125
+
1126
+ Opal.hash_delete(self, key);
1127
+ Opal.hash_put(self, new_key, value);
1128
+ }
1129
+
1130
+ return self;
1131
+ }
1132
+ end
1133
+
1065
1134
  def transform_values(&block)
1066
- return enum_for(:transform_values){self.size} unless block
1135
+ return enum_for(:transform_values) { size } unless block
1067
1136
 
1068
1137
  %x{
1069
1138
  var result = Opal.hash();
@@ -1088,7 +1157,7 @@ class Hash
1088
1157
  end
1089
1158
 
1090
1159
  def transform_values!(&block)
1091
- return enum_for(:transform_values!){self.size} unless block
1160
+ return enum_for(:transform_values!) { size } unless block
1092
1161
 
1093
1162
  %x{
1094
1163
  for (var i = 0, keys = self.$$keys, length = keys.length, key, value; i < length; i++) {
@@ -1,11 +1,11 @@
1
1
  module Opal
2
- def self.bridge(klass, constructor)
3
- `Opal.bridge(klass, constructor)`
2
+ def self.bridge(constructor, klass)
3
+ `Opal.bridge(constructor, klass)`
4
4
  end
5
5
 
6
6
  def self.type_error(object, type, method = nil, coerced = nil)
7
7
  if method && coerced
8
- TypeError.new "can't convert #{object.class} into #{type} (#{object.class}##{method} gives #{coerced.class}"
8
+ TypeError.new "can't convert #{object.class} into #{type} (#{object.class}##{method} gives #{coerced.class})"
9
9
  else
10
10
  TypeError.new "no implicit conversion of #{object.class} into #{type}"
11
11
  end
@@ -80,14 +80,14 @@ module Opal
80
80
  }
81
81
  end
82
82
 
83
- def self.respond_to?(obj, method)
83
+ def self.respond_to?(obj, method, include_all = false)
84
84
  %x{
85
85
  if (obj == null || !obj.$$class) {
86
86
  return false;
87
87
  }
88
88
  }
89
89
 
90
- obj.respond_to? method
90
+ obj.respond_to?(method, include_all)
91
91
  end
92
92
 
93
93
  def self.inspect_obj(obj)
@@ -155,7 +155,8 @@ module Opal
155
155
  var method_name, method;
156
156
  for (var i = method_names.length - 1; i >= 0; i--) {
157
157
  method_name = method_names[i];
158
- method = owner_class.$$proto['$'+method_name];
158
+ method = owner_class.$$prototype['$'+method_name];
159
+
159
160
  if (method && !method.$$stub) {
160
161
  method.$$pristine = true;
161
162
  }
@@ -8,11 +8,11 @@ module Kernel
8
8
  end
9
9
 
10
10
  def !~(obj)
11
- not(self =~ obj)
11
+ !(self =~ obj)
12
12
  end
13
13
 
14
14
  def ===(other)
15
- self.object_id == other.object_id || self == other
15
+ object_id == other.object_id || self == other
16
16
  end
17
17
 
18
18
  def <=>(other)
@@ -44,26 +44,23 @@ module Kernel
44
44
 
45
45
  def methods(all = true)
46
46
  %x{
47
- var methods = [];
48
-
49
- for (var key in self) {
50
- if (key[0] == "$" && typeof(self[key]) === "function") {
51
- if (all == false || all === nil) {
52
- if (!Opal.hasOwnProperty.call(self, key)) {
53
- continue;
54
- }
55
- }
56
- if (self[key].$$stub === undefined) {
57
- methods.push(key.substr(1));
58
- }
59
- }
47
+ if (#{Opal.truthy?(all)}) {
48
+ return Opal.methods(self);
49
+ } else {
50
+ return Opal.own_methods(self);
60
51
  }
61
-
62
- return methods;
63
52
  }
64
53
  end
65
54
 
66
- alias public_methods methods
55
+ def public_methods(all = true)
56
+ %x{
57
+ if (#{Opal.truthy?(all)}) {
58
+ return Opal.methods(self);
59
+ } else {
60
+ return Opal.receiver_methods(self);
61
+ }
62
+ }
63
+ end
67
64
 
68
65
  def Array(object)
69
66
  %x{
@@ -116,20 +113,29 @@ module Kernel
116
113
 
117
114
  def copy_singleton_methods(other)
118
115
  %x{
119
- var name;
116
+ var i, name, names, length;
120
117
 
121
118
  if (other.hasOwnProperty('$$meta')) {
122
- var other_singleton_class_proto = Opal.get_singleton_class(other).$$proto;
123
- var self_singleton_class_proto = Opal.get_singleton_class(self).$$proto;
124
-
125
- for (name in other_singleton_class_proto) {
126
- if (name.charAt(0) === '$' && other_singleton_class_proto.hasOwnProperty(name)) {
127
- self_singleton_class_proto[name] = other_singleton_class_proto[name];
119
+ var other_singleton_class = Opal.get_singleton_class(other);
120
+ var self_singleton_class = Opal.get_singleton_class(self);
121
+ names = Object.getOwnPropertyNames(other_singleton_class.$$prototype);
122
+
123
+ for (i = 0, length = names.length; i < length; i++) {
124
+ name = names[i];
125
+ if (Opal.is_method(name)) {
126
+ self_singleton_class.$$prototype[name] = other_singleton_class.$$prototype[name];
128
127
  }
129
128
  }
129
+
130
+ self_singleton_class.$$const = Object.assign({}, other_singleton_class.$$const);
131
+ Object.setPrototypeOf(
132
+ self_singleton_class.$$prototype,
133
+ Object.getPrototypeOf(other_singleton_class.$$prototype)
134
+ );
130
135
  }
131
136
 
132
- for (name in other) {
137
+ for (i = 0, names = Object.getOwnPropertyNames(other), length = names.length; i < length; i++) {
138
+ name = names[i];
133
139
  if (name.charAt(0) === '$' && name.charAt(1) !== '$' && other.hasOwnProperty(name)) {
134
140
  self[name] = other[name];
135
141
  }
@@ -181,7 +187,7 @@ module Kernel
181
187
  def exit(status = true)
182
188
  $__at_exit__ ||= []
183
189
 
184
- while $__at_exit__.size > 0
190
+ until $__at_exit__.empty?
185
191
  block = $__at_exit__.pop
186
192
  block.call
187
193
  end
@@ -210,6 +216,7 @@ module Kernel
210
216
  }
211
217
 
212
218
  #{`mod`.append_features `singleton`};
219
+ #{`mod`.extend_object self};
213
220
  #{`mod`.extended self};
214
221
  }
215
222
  }
@@ -217,547 +224,6 @@ module Kernel
217
224
  self
218
225
  end
219
226
 
220
- def format(format_string, *args)
221
- if args.length == 1 && args[0].respond_to?(:to_ary)
222
- ary = Opal.coerce_to?(args[0], Array, :to_ary)
223
- args = ary.to_a unless ary.nil?
224
- end
225
-
226
- %x{
227
- var result = '',
228
- //used for slicing:
229
- begin_slice = 0,
230
- end_slice,
231
- //used for iterating over the format string:
232
- i,
233
- len = format_string.length,
234
- //used for processing field values:
235
- arg,
236
- str,
237
- //used for processing %g and %G fields:
238
- exponent,
239
- //used for keeping track of width and precision:
240
- width,
241
- precision,
242
- //used for holding temporary values:
243
- tmp_num,
244
- //used for processing %{} and %<> fileds:
245
- hash_parameter_key,
246
- closing_brace_char,
247
- //used for processing %b, %B, %o, %x, and %X fields:
248
- base_number,
249
- base_prefix,
250
- base_neg_zero_regex,
251
- base_neg_zero_digit,
252
- //used for processing arguments:
253
- next_arg,
254
- seq_arg_num = 1,
255
- pos_arg_num = 0,
256
- //used for keeping track of flags:
257
- flags,
258
- FNONE = 0,
259
- FSHARP = 1,
260
- FMINUS = 2,
261
- FPLUS = 4,
262
- FZERO = 8,
263
- FSPACE = 16,
264
- FWIDTH = 32,
265
- FPREC = 64,
266
- FPREC0 = 128;
267
-
268
- function CHECK_FOR_FLAGS() {
269
- if (flags&FWIDTH) { #{raise ArgumentError, 'flag after width'} }
270
- if (flags&FPREC0) { #{raise ArgumentError, 'flag after precision'} }
271
- }
272
-
273
- function CHECK_FOR_WIDTH() {
274
- if (flags&FWIDTH) { #{raise ArgumentError, 'width given twice'} }
275
- if (flags&FPREC0) { #{raise ArgumentError, 'width after precision'} }
276
- }
277
-
278
- function GET_NTH_ARG(num) {
279
- if (num >= args.length) { #{raise ArgumentError, 'too few arguments'} }
280
- return args[num];
281
- }
282
-
283
- function GET_NEXT_ARG() {
284
- switch (pos_arg_num) {
285
- case -1: #{raise ArgumentError, "unnumbered(#{`seq_arg_num`}) mixed with numbered"}
286
- case -2: #{raise ArgumentError, "unnumbered(#{`seq_arg_num`}) mixed with named"}
287
- }
288
- pos_arg_num = seq_arg_num++;
289
- return GET_NTH_ARG(pos_arg_num - 1);
290
- }
291
-
292
- function GET_POS_ARG(num) {
293
- if (pos_arg_num > 0) {
294
- #{raise ArgumentError, "numbered(#{`num`}) after unnumbered(#{`pos_arg_num`})"}
295
- }
296
- if (pos_arg_num === -2) {
297
- #{raise ArgumentError, "numbered(#{`num`}) after named"}
298
- }
299
- if (num < 1) {
300
- #{raise ArgumentError, "invalid index - #{`num`}$"}
301
- }
302
- pos_arg_num = -1;
303
- return GET_NTH_ARG(num - 1);
304
- }
305
-
306
- function GET_ARG() {
307
- return (next_arg === undefined ? GET_NEXT_ARG() : next_arg);
308
- }
309
-
310
- function READ_NUM(label) {
311
- var num, str = '';
312
- for (;; i++) {
313
- if (i === len) {
314
- #{raise ArgumentError, 'malformed format string - %*[0-9]'}
315
- }
316
- if (format_string.charCodeAt(i) < 48 || format_string.charCodeAt(i) > 57) {
317
- i--;
318
- num = parseInt(str, 10) || 0;
319
- if (num > 2147483647) {
320
- #{raise ArgumentError, "#{`label`} too big"}
321
- }
322
- return num;
323
- }
324
- str += format_string.charAt(i);
325
- }
326
- }
327
-
328
- function READ_NUM_AFTER_ASTER(label) {
329
- var arg, num = READ_NUM(label);
330
- if (format_string.charAt(i + 1) === '$') {
331
- i++;
332
- arg = GET_POS_ARG(num);
333
- } else {
334
- arg = GET_NEXT_ARG();
335
- }
336
- return #{`arg`.to_int};
337
- }
338
-
339
- for (i = format_string.indexOf('%'); i !== -1; i = format_string.indexOf('%', i)) {
340
- str = undefined;
341
-
342
- flags = FNONE;
343
- width = -1;
344
- precision = -1;
345
- next_arg = undefined;
346
-
347
- end_slice = i;
348
-
349
- i++;
350
-
351
- switch (format_string.charAt(i)) {
352
- case '%':
353
- begin_slice = i;
354
- case '':
355
- case '\n':
356
- case '\0':
357
- i++;
358
- continue;
359
- }
360
-
361
- format_sequence: for (; i < len; i++) {
362
- switch (format_string.charAt(i)) {
363
-
364
- case ' ':
365
- CHECK_FOR_FLAGS();
366
- flags |= FSPACE;
367
- continue format_sequence;
368
-
369
- case '#':
370
- CHECK_FOR_FLAGS();
371
- flags |= FSHARP;
372
- continue format_sequence;
373
-
374
- case '+':
375
- CHECK_FOR_FLAGS();
376
- flags |= FPLUS;
377
- continue format_sequence;
378
-
379
- case '-':
380
- CHECK_FOR_FLAGS();
381
- flags |= FMINUS;
382
- continue format_sequence;
383
-
384
- case '0':
385
- CHECK_FOR_FLAGS();
386
- flags |= FZERO;
387
- continue format_sequence;
388
-
389
- case '1':
390
- case '2':
391
- case '3':
392
- case '4':
393
- case '5':
394
- case '6':
395
- case '7':
396
- case '8':
397
- case '9':
398
- tmp_num = READ_NUM('width');
399
- if (format_string.charAt(i + 1) === '$') {
400
- if (i + 2 === len) {
401
- str = '%';
402
- i++;
403
- break format_sequence;
404
- }
405
- if (next_arg !== undefined) {
406
- #{raise ArgumentError, "value given twice - %#{`tmp_num`}$"}
407
- }
408
- next_arg = GET_POS_ARG(tmp_num);
409
- i++;
410
- } else {
411
- CHECK_FOR_WIDTH();
412
- flags |= FWIDTH;
413
- width = tmp_num;
414
- }
415
- continue format_sequence;
416
-
417
- case '<':
418
- case '\{':
419
- closing_brace_char = (format_string.charAt(i) === '<' ? '>' : '\}');
420
- hash_parameter_key = '';
421
-
422
- i++;
423
-
424
- for (;; i++) {
425
- if (i === len) {
426
- #{raise ArgumentError, 'malformed name - unmatched parenthesis'}
427
- }
428
- if (format_string.charAt(i) === closing_brace_char) {
429
-
430
- if (pos_arg_num > 0) {
431
- #{raise ArgumentError, "named #{`hash_parameter_key`} after unnumbered(#{`pos_arg_num`})"}
432
- }
433
- if (pos_arg_num === -1) {
434
- #{raise ArgumentError, "named #{`hash_parameter_key`} after numbered"}
435
- }
436
- pos_arg_num = -2;
437
-
438
- if (args[0] === undefined || !args[0].$$is_hash) {
439
- #{raise ArgumentError, 'one hash required'}
440
- }
441
-
442
- next_arg = #{`args[0]`.fetch(`hash_parameter_key`)};
443
-
444
- if (closing_brace_char === '>') {
445
- continue format_sequence;
446
- } else {
447
- str = next_arg.toString();
448
- if (precision !== -1) { str = str.slice(0, precision); }
449
- if (flags&FMINUS) {
450
- while (str.length < width) { str = str + ' '; }
451
- } else {
452
- while (str.length < width) { str = ' ' + str; }
453
- }
454
- break format_sequence;
455
- }
456
- }
457
- hash_parameter_key += format_string.charAt(i);
458
- }
459
-
460
- case '*':
461
- i++;
462
- CHECK_FOR_WIDTH();
463
- flags |= FWIDTH;
464
- width = READ_NUM_AFTER_ASTER('width');
465
- if (width < 0) {
466
- flags |= FMINUS;
467
- width = -width;
468
- }
469
- continue format_sequence;
470
-
471
- case '.':
472
- if (flags&FPREC0) {
473
- #{raise ArgumentError, 'precision given twice'}
474
- }
475
- flags |= FPREC|FPREC0;
476
- precision = 0;
477
- i++;
478
- if (format_string.charAt(i) === '*') {
479
- i++;
480
- precision = READ_NUM_AFTER_ASTER('precision');
481
- if (precision < 0) {
482
- flags &= ~FPREC;
483
- }
484
- continue format_sequence;
485
- }
486
- precision = READ_NUM('precision');
487
- continue format_sequence;
488
-
489
- case 'd':
490
- case 'i':
491
- case 'u':
492
- arg = #{Integer(`GET_ARG()`)};
493
- if (arg >= 0) {
494
- str = arg.toString();
495
- while (str.length < precision) { str = '0' + str; }
496
- if (flags&FMINUS) {
497
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
498
- while (str.length < width) { str = str + ' '; }
499
- } else {
500
- if (flags&FZERO && precision === -1) {
501
- while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; }
502
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
503
- } else {
504
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
505
- while (str.length < width) { str = ' ' + str; }
506
- }
507
- }
508
- } else {
509
- str = (-arg).toString();
510
- while (str.length < precision) { str = '0' + str; }
511
- if (flags&FMINUS) {
512
- str = '-' + str;
513
- while (str.length < width) { str = str + ' '; }
514
- } else {
515
- if (flags&FZERO && precision === -1) {
516
- while (str.length < width - 1) { str = '0' + str; }
517
- str = '-' + str;
518
- } else {
519
- str = '-' + str;
520
- while (str.length < width) { str = ' ' + str; }
521
- }
522
- }
523
- }
524
- break format_sequence;
525
-
526
- case 'b':
527
- case 'B':
528
- case 'o':
529
- case 'x':
530
- case 'X':
531
- switch (format_string.charAt(i)) {
532
- case 'b':
533
- case 'B':
534
- base_number = 2;
535
- base_prefix = '0b';
536
- base_neg_zero_regex = /^1+/;
537
- base_neg_zero_digit = '1';
538
- break;
539
- case 'o':
540
- base_number = 8;
541
- base_prefix = '0';
542
- base_neg_zero_regex = /^3?7+/;
543
- base_neg_zero_digit = '7';
544
- break;
545
- case 'x':
546
- case 'X':
547
- base_number = 16;
548
- base_prefix = '0x';
549
- base_neg_zero_regex = /^f+/;
550
- base_neg_zero_digit = 'f';
551
- break;
552
- }
553
- arg = #{Integer(`GET_ARG()`)};
554
- if (arg >= 0) {
555
- str = arg.toString(base_number);
556
- while (str.length < precision) { str = '0' + str; }
557
- if (flags&FMINUS) {
558
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
559
- if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
560
- while (str.length < width) { str = str + ' '; }
561
- } else {
562
- if (flags&FZERO && precision === -1) {
563
- while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0) - ((flags&FSHARP && arg !== 0) ? base_prefix.length : 0)) { str = '0' + str; }
564
- if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
565
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
566
- } else {
567
- if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
568
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
569
- while (str.length < width) { str = ' ' + str; }
570
- }
571
- }
572
- } else {
573
- if (flags&FPLUS || flags&FSPACE) {
574
- str = (-arg).toString(base_number);
575
- while (str.length < precision) { str = '0' + str; }
576
- if (flags&FMINUS) {
577
- if (flags&FSHARP) { str = base_prefix + str; }
578
- str = '-' + str;
579
- while (str.length < width) { str = str + ' '; }
580
- } else {
581
- if (flags&FZERO && precision === -1) {
582
- while (str.length < width - 1 - (flags&FSHARP ? 2 : 0)) { str = '0' + str; }
583
- if (flags&FSHARP) { str = base_prefix + str; }
584
- str = '-' + str;
585
- } else {
586
- if (flags&FSHARP) { str = base_prefix + str; }
587
- str = '-' + str;
588
- while (str.length < width) { str = ' ' + str; }
589
- }
590
- }
591
- } else {
592
- str = (arg >>> 0).toString(base_number).replace(base_neg_zero_regex, base_neg_zero_digit);
593
- while (str.length < precision - 2) { str = base_neg_zero_digit + str; }
594
- if (flags&FMINUS) {
595
- str = '..' + str;
596
- if (flags&FSHARP) { str = base_prefix + str; }
597
- while (str.length < width) { str = str + ' '; }
598
- } else {
599
- if (flags&FZERO && precision === -1) {
600
- while (str.length < width - 2 - (flags&FSHARP ? base_prefix.length : 0)) { str = base_neg_zero_digit + str; }
601
- str = '..' + str;
602
- if (flags&FSHARP) { str = base_prefix + str; }
603
- } else {
604
- str = '..' + str;
605
- if (flags&FSHARP) { str = base_prefix + str; }
606
- while (str.length < width) { str = ' ' + str; }
607
- }
608
- }
609
- }
610
- }
611
- if (format_string.charAt(i) === format_string.charAt(i).toUpperCase()) {
612
- str = str.toUpperCase();
613
- }
614
- break format_sequence;
615
-
616
- case 'f':
617
- case 'e':
618
- case 'E':
619
- case 'g':
620
- case 'G':
621
- arg = #{Float(`GET_ARG()`)};
622
- if (arg >= 0 || isNaN(arg)) {
623
- if (arg === Infinity) {
624
- str = 'Inf';
625
- } else {
626
- switch (format_string.charAt(i)) {
627
- case 'f':
628
- str = arg.toFixed(precision === -1 ? 6 : precision);
629
- break;
630
- case 'e':
631
- case 'E':
632
- str = arg.toExponential(precision === -1 ? 6 : precision);
633
- break;
634
- case 'g':
635
- case 'G':
636
- str = arg.toExponential();
637
- exponent = parseInt(str.split('e')[1], 10);
638
- if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) {
639
- str = arg.toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision);
640
- }
641
- break;
642
- }
643
- }
644
- if (flags&FMINUS) {
645
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
646
- while (str.length < width) { str = str + ' '; }
647
- } else {
648
- if (flags&FZERO && arg !== Infinity && !isNaN(arg)) {
649
- while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; }
650
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
651
- } else {
652
- if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
653
- while (str.length < width) { str = ' ' + str; }
654
- }
655
- }
656
- } else {
657
- if (arg === -Infinity) {
658
- str = 'Inf';
659
- } else {
660
- switch (format_string.charAt(i)) {
661
- case 'f':
662
- str = (-arg).toFixed(precision === -1 ? 6 : precision);
663
- break;
664
- case 'e':
665
- case 'E':
666
- str = (-arg).toExponential(precision === -1 ? 6 : precision);
667
- break;
668
- case 'g':
669
- case 'G':
670
- str = (-arg).toExponential();
671
- exponent = parseInt(str.split('e')[1], 10);
672
- if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) {
673
- str = (-arg).toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision);
674
- }
675
- break;
676
- }
677
- }
678
- if (flags&FMINUS) {
679
- str = '-' + str;
680
- while (str.length < width) { str = str + ' '; }
681
- } else {
682
- if (flags&FZERO && arg !== -Infinity) {
683
- while (str.length < width - 1) { str = '0' + str; }
684
- str = '-' + str;
685
- } else {
686
- str = '-' + str;
687
- while (str.length < width) { str = ' ' + str; }
688
- }
689
- }
690
- }
691
- if (format_string.charAt(i) === format_string.charAt(i).toUpperCase() && arg !== Infinity && arg !== -Infinity && !isNaN(arg)) {
692
- str = str.toUpperCase();
693
- }
694
- str = str.replace(/([eE][-+]?)([0-9])$/, '$10$2');
695
- break format_sequence;
696
-
697
- case 'a':
698
- case 'A':
699
- // Not implemented because there are no specs for this field type.
700
- #{raise NotImplementedError, '`A` and `a` format field types are not implemented in Opal yet'}
701
-
702
- case 'c':
703
- arg = GET_ARG();
704
- if (#{`arg`.respond_to?(:to_ary)}) { arg = #{`arg`.to_ary}[0]; }
705
- if (#{`arg`.respond_to?(:to_str)}) {
706
- str = #{`arg`.to_str};
707
- } else {
708
- str = String.fromCharCode(#{Opal.coerce_to(`arg`, Integer, :to_int)});
709
- }
710
- if (str.length !== 1) {
711
- #{raise ArgumentError, '%c requires a character'}
712
- }
713
- if (flags&FMINUS) {
714
- while (str.length < width) { str = str + ' '; }
715
- } else {
716
- while (str.length < width) { str = ' ' + str; }
717
- }
718
- break format_sequence;
719
-
720
- case 'p':
721
- str = #{`GET_ARG()`.inspect};
722
- if (precision !== -1) { str = str.slice(0, precision); }
723
- if (flags&FMINUS) {
724
- while (str.length < width) { str = str + ' '; }
725
- } else {
726
- while (str.length < width) { str = ' ' + str; }
727
- }
728
- break format_sequence;
729
-
730
- case 's':
731
- str = #{`GET_ARG()`.to_s};
732
- if (precision !== -1) { str = str.slice(0, precision); }
733
- if (flags&FMINUS) {
734
- while (str.length < width) { str = str + ' '; }
735
- } else {
736
- while (str.length < width) { str = ' ' + str; }
737
- }
738
- break format_sequence;
739
-
740
- default:
741
- #{raise ArgumentError, "malformed format string - %#{`format_string.charAt(i)`}"}
742
- }
743
- }
744
-
745
- if (str === undefined) {
746
- #{raise ArgumentError, 'malformed format string - %'}
747
- }
748
-
749
- result += format_string.slice(begin_slice, end_slice) + str;
750
- begin_slice = i + 1;
751
- }
752
-
753
- if (#{$DEBUG} && pos_arg_num >= 0 && seq_arg_num < args.length) {
754
- #{raise ArgumentError, 'too many arguments for format string'}
755
- }
756
-
757
- return result + format_string.slice(begin_slice);
758
- }
759
- end
760
-
761
227
  def hash
762
228
  __id__
763
229
  end
@@ -842,7 +308,7 @@ module Kernel
842
308
 
843
309
  if (!value.$$is_string) {
844
310
  if (base !== undefined) {
845
- #{raise ArgumentError, "base specified for non string value"}
311
+ #{raise ArgumentError, 'base specified for non string value'}
846
312
  }
847
313
  if (value === nil) {
848
314
  #{raise TypeError, "can't convert nil into Integer"}
@@ -956,7 +422,7 @@ module Kernel
956
422
  def Hash(arg)
957
423
  return {} if arg.nil? || arg == []
958
424
  return arg if Hash === arg
959
- return Opal.coerce_to!(arg, Hash, :to_hash)
425
+ Opal.coerce_to!(arg, Hash, :to_hash)
960
426
  end
961
427
 
962
428
  def is_a?(klass)
@@ -976,9 +442,7 @@ module Kernel
976
442
  alias kind_of? is_a?
977
443
 
978
444
  def lambda(&block)
979
- `block.$$is_lambda = true`
980
-
981
- block
445
+ `Opal.lambda(block)`
982
446
  end
983
447
 
984
448
  def load(file)
@@ -989,7 +453,7 @@ module Kernel
989
453
  def loop
990
454
  return enum_for(:loop) { Float::INFINITY } unless block_given?
991
455
 
992
- while true do
456
+ while true
993
457
  begin
994
458
  yield
995
459
  rescue StopIteration => e
@@ -1007,7 +471,7 @@ module Kernel
1007
471
  alias object_id __id__
1008
472
 
1009
473
  def printf(*args)
1010
- if args.length > 0
474
+ if args.any?
1011
475
  print format(*args)
1012
476
  end
1013
477
 
@@ -1016,7 +480,7 @@ module Kernel
1016
480
 
1017
481
  def proc(&block)
1018
482
  unless block
1019
- raise ArgumentError, "tried to create Proc object without a block"
483
+ raise ArgumentError, 'tried to create Proc object without a block'
1020
484
  end
1021
485
 
1022
486
  `block.$$is_lambda = false`
@@ -1043,8 +507,8 @@ module Kernel
1043
507
 
1044
508
  def raise(exception = undefined, string = nil, _backtrace = nil)
1045
509
  %x{
1046
- if (exception == null && #$! !== nil) {
1047
- throw #$!;
510
+ if (exception == null && #{$!} !== nil) {
511
+ throw #{$!};
1048
512
  }
1049
513
  if (exception == null) {
1050
514
  exception = #{RuntimeError.new};
@@ -1056,18 +520,18 @@ module Kernel
1056
520
  else if (exception.$$is_class && #{exception.respond_to?(:exception)}) {
1057
521
  exception = #{exception.exception string};
1058
522
  }
1059
- else if (#{exception.kind_of?(Exception)}) {
523
+ else if (#{exception.is_a?(Exception)}) {
1060
524
  // exception is fine
1061
525
  }
1062
526
  else {
1063
527
  exception = #{TypeError.new 'exception class/object expected'};
1064
528
  }
1065
529
 
1066
- if (#$! !== nil) {
1067
- Opal.exceptions.push(#$!);
530
+ if (#{$!} !== nil) {
531
+ Opal.exceptions.push(#{$!});
1068
532
  }
1069
533
 
1070
- #$! = exception;
534
+ #{$!} = exception;
1071
535
 
1072
536
  throw exception;
1073
537
  }
@@ -1162,7 +626,7 @@ module Kernel
1162
626
  #{raise TypeError, "can't convert #{seconds.class} into time interval"}
1163
627
  }
1164
628
  if (seconds < 0) {
1165
- #{raise ArgumentError, "time interval must be positive"}
629
+ #{raise ArgumentError, 'time interval must be positive'}
1166
630
  }
1167
631
  var get_time = Opal.global.performance ?
1168
632
  function() {return performance.now()} :
@@ -1174,8 +638,6 @@ module Kernel
1174
638
  }
1175
639
  end
1176
640
 
1177
- alias sprintf format
1178
-
1179
641
  def srand(seed = Random.new_seed)
1180
642
  Random.srand(seed)
1181
643
  end
@@ -1206,13 +668,18 @@ module Kernel
1206
668
  end
1207
669
 
1208
670
  def throw(*args)
1209
- raise UncaughtThrowError.new(args)
671
+ raise UncaughtThrowError, args
1210
672
  end
1211
673
 
1212
674
  # basic implementation of open, delegate to File.open
1213
675
  def open(*args, &block)
1214
676
  File.open(*args, &block)
1215
677
  end
678
+
679
+ def yield_self
680
+ return enum_for(:yield_self) { 1 } unless block_given?
681
+ yield self
682
+ end
1216
683
  end
1217
684
 
1218
685
  class Object