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,544 @@
1
+ module Kernel
2
+ def format(format_string, *args)
3
+ if args.length == 1 && args[0].respond_to?(:to_ary)
4
+ ary = Opal.coerce_to?(args[0], Array, :to_ary)
5
+ args = ary.to_a unless ary.nil?
6
+ end
7
+
8
+ %x{
9
+ var result = '',
10
+ //used for slicing:
11
+ begin_slice = 0,
12
+ end_slice,
13
+ //used for iterating over the format string:
14
+ i,
15
+ len = format_string.length,
16
+ //used for processing field values:
17
+ arg,
18
+ str,
19
+ //used for processing %g and %G fields:
20
+ exponent,
21
+ //used for keeping track of width and precision:
22
+ width,
23
+ precision,
24
+ //used for holding temporary values:
25
+ tmp_num,
26
+ //used for processing %{} and %<> fileds:
27
+ hash_parameter_key,
28
+ closing_brace_char,
29
+ //used for processing %b, %B, %o, %x, and %X fields:
30
+ base_number,
31
+ base_prefix,
32
+ base_neg_zero_regex,
33
+ base_neg_zero_digit,
34
+ //used for processing arguments:
35
+ next_arg,
36
+ seq_arg_num = 1,
37
+ pos_arg_num = 0,
38
+ //used for keeping track of flags:
39
+ flags,
40
+ FNONE = 0,
41
+ FSHARP = 1,
42
+ FMINUS = 2,
43
+ FPLUS = 4,
44
+ FZERO = 8,
45
+ FSPACE = 16,
46
+ FWIDTH = 32,
47
+ FPREC = 64,
48
+ FPREC0 = 128;
49
+
50
+ function CHECK_FOR_FLAGS() {
51
+ if (flags&FWIDTH) { #{raise ArgumentError, 'flag after width'} }
52
+ if (flags&FPREC0) { #{raise ArgumentError, 'flag after precision'} }
53
+ }
54
+
55
+ function CHECK_FOR_WIDTH() {
56
+ if (flags&FWIDTH) { #{raise ArgumentError, 'width given twice'} }
57
+ if (flags&FPREC0) { #{raise ArgumentError, 'width after precision'} }
58
+ }
59
+
60
+ function GET_NTH_ARG(num) {
61
+ if (num >= args.length) { #{raise ArgumentError, 'too few arguments'} }
62
+ return args[num];
63
+ }
64
+
65
+ function GET_NEXT_ARG() {
66
+ switch (pos_arg_num) {
67
+ case -1: #{raise ArgumentError, "unnumbered(#{`seq_arg_num`}) mixed with numbered"}
68
+ case -2: #{raise ArgumentError, "unnumbered(#{`seq_arg_num`}) mixed with named"}
69
+ }
70
+ pos_arg_num = seq_arg_num++;
71
+ return GET_NTH_ARG(pos_arg_num - 1);
72
+ }
73
+
74
+ function GET_POS_ARG(num) {
75
+ if (pos_arg_num > 0) {
76
+ #{raise ArgumentError, "numbered(#{`num`}) after unnumbered(#{`pos_arg_num`})"}
77
+ }
78
+ if (pos_arg_num === -2) {
79
+ #{raise ArgumentError, "numbered(#{`num`}) after named"}
80
+ }
81
+ if (num < 1) {
82
+ #{raise ArgumentError, "invalid index - #{`num`}$"}
83
+ }
84
+ pos_arg_num = -1;
85
+ return GET_NTH_ARG(num - 1);
86
+ }
87
+
88
+ function GET_ARG() {
89
+ return (next_arg === undefined ? GET_NEXT_ARG() : next_arg);
90
+ }
91
+
92
+ function READ_NUM(label) {
93
+ var num, str = '';
94
+ for (;; i++) {
95
+ if (i === len) {
96
+ #{raise ArgumentError, 'malformed format string - %*[0-9]'}
97
+ }
98
+ if (format_string.charCodeAt(i) < 48 || format_string.charCodeAt(i) > 57) {
99
+ i--;
100
+ num = parseInt(str, 10) || 0;
101
+ if (num > 2147483647) {
102
+ #{raise ArgumentError, "#{`label`} too big"}
103
+ }
104
+ return num;
105
+ }
106
+ str += format_string.charAt(i);
107
+ }
108
+ }
109
+
110
+ function READ_NUM_AFTER_ASTER(label) {
111
+ var arg, num = READ_NUM(label);
112
+ if (format_string.charAt(i + 1) === '$') {
113
+ i++;
114
+ arg = GET_POS_ARG(num);
115
+ } else {
116
+ arg = GET_NEXT_ARG();
117
+ }
118
+ return #{`arg`.to_int};
119
+ }
120
+
121
+ for (i = format_string.indexOf('%'); i !== -1; i = format_string.indexOf('%', i)) {
122
+ str = undefined;
123
+
124
+ flags = FNONE;
125
+ width = -1;
126
+ precision = -1;
127
+ next_arg = undefined;
128
+
129
+ end_slice = i;
130
+
131
+ i++;
132
+
133
+ switch (format_string.charAt(i)) {
134
+ case '%':
135
+ begin_slice = i;
136
+ case '':
137
+ case '\n':
138
+ case '\0':
139
+ i++;
140
+ continue;
141
+ }
142
+
143
+ format_sequence: for (; i < len; i++) {
144
+ switch (format_string.charAt(i)) {
145
+
146
+ case ' ':
147
+ CHECK_FOR_FLAGS();
148
+ flags |= FSPACE;
149
+ continue format_sequence;
150
+
151
+ case '#':
152
+ CHECK_FOR_FLAGS();
153
+ flags |= FSHARP;
154
+ continue format_sequence;
155
+
156
+ case '+':
157
+ CHECK_FOR_FLAGS();
158
+ flags |= FPLUS;
159
+ continue format_sequence;
160
+
161
+ case '-':
162
+ CHECK_FOR_FLAGS();
163
+ flags |= FMINUS;
164
+ continue format_sequence;
165
+
166
+ case '0':
167
+ CHECK_FOR_FLAGS();
168
+ flags |= FZERO;
169
+ continue format_sequence;
170
+
171
+ case '1':
172
+ case '2':
173
+ case '3':
174
+ case '4':
175
+ case '5':
176
+ case '6':
177
+ case '7':
178
+ case '8':
179
+ case '9':
180
+ tmp_num = READ_NUM('width');
181
+ if (format_string.charAt(i + 1) === '$') {
182
+ if (i + 2 === len) {
183
+ str = '%';
184
+ i++;
185
+ break format_sequence;
186
+ }
187
+ if (next_arg !== undefined) {
188
+ #{raise ArgumentError, "value given twice - %#{`tmp_num`}$"}
189
+ }
190
+ next_arg = GET_POS_ARG(tmp_num);
191
+ i++;
192
+ } else {
193
+ CHECK_FOR_WIDTH();
194
+ flags |= FWIDTH;
195
+ width = tmp_num;
196
+ }
197
+ continue format_sequence;
198
+
199
+ case '<':
200
+ case '\{':
201
+ closing_brace_char = (format_string.charAt(i) === '<' ? '>' : '\}');
202
+ hash_parameter_key = '';
203
+
204
+ i++;
205
+
206
+ for (;; i++) {
207
+ if (i === len) {
208
+ #{raise ArgumentError, 'malformed name - unmatched parenthesis'}
209
+ }
210
+ if (format_string.charAt(i) === closing_brace_char) {
211
+
212
+ if (pos_arg_num > 0) {
213
+ #{raise ArgumentError, "named #{`hash_parameter_key`} after unnumbered(#{`pos_arg_num`})"}
214
+ }
215
+ if (pos_arg_num === -1) {
216
+ #{raise ArgumentError, "named #{`hash_parameter_key`} after numbered"}
217
+ }
218
+ pos_arg_num = -2;
219
+
220
+ if (args[0] === undefined || !args[0].$$is_hash) {
221
+ #{raise ArgumentError, 'one hash required'}
222
+ }
223
+
224
+ next_arg = #{`args[0]`.fetch(`hash_parameter_key`)};
225
+
226
+ if (closing_brace_char === '>') {
227
+ continue format_sequence;
228
+ } else {
229
+ str = next_arg.toString();
230
+ if (precision !== -1) { str = str.slice(0, precision); }
231
+ if (flags&FMINUS) {
232
+ while (str.length < width) { str = str + ' '; }
233
+ } else {
234
+ while (str.length < width) { str = ' ' + str; }
235
+ }
236
+ break format_sequence;
237
+ }
238
+ }
239
+ hash_parameter_key += format_string.charAt(i);
240
+ }
241
+
242
+ case '*':
243
+ i++;
244
+ CHECK_FOR_WIDTH();
245
+ flags |= FWIDTH;
246
+ width = READ_NUM_AFTER_ASTER('width');
247
+ if (width < 0) {
248
+ flags |= FMINUS;
249
+ width = -width;
250
+ }
251
+ continue format_sequence;
252
+
253
+ case '.':
254
+ if (flags&FPREC0) {
255
+ #{raise ArgumentError, 'precision given twice'}
256
+ }
257
+ flags |= FPREC|FPREC0;
258
+ precision = 0;
259
+ i++;
260
+ if (format_string.charAt(i) === '*') {
261
+ i++;
262
+ precision = READ_NUM_AFTER_ASTER('precision');
263
+ if (precision < 0) {
264
+ flags &= ~FPREC;
265
+ }
266
+ continue format_sequence;
267
+ }
268
+ precision = READ_NUM('precision');
269
+ continue format_sequence;
270
+
271
+ case 'd':
272
+ case 'i':
273
+ case 'u':
274
+ arg = #{Integer(`GET_ARG()`)};
275
+ if (arg >= 0) {
276
+ str = arg.toString();
277
+ while (str.length < precision) { str = '0' + str; }
278
+ if (flags&FMINUS) {
279
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
280
+ while (str.length < width) { str = str + ' '; }
281
+ } else {
282
+ if (flags&FZERO && precision === -1) {
283
+ while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; }
284
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
285
+ } else {
286
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
287
+ while (str.length < width) { str = ' ' + str; }
288
+ }
289
+ }
290
+ } else {
291
+ str = (-arg).toString();
292
+ while (str.length < precision) { str = '0' + str; }
293
+ if (flags&FMINUS) {
294
+ str = '-' + str;
295
+ while (str.length < width) { str = str + ' '; }
296
+ } else {
297
+ if (flags&FZERO && precision === -1) {
298
+ while (str.length < width - 1) { str = '0' + str; }
299
+ str = '-' + str;
300
+ } else {
301
+ str = '-' + str;
302
+ while (str.length < width) { str = ' ' + str; }
303
+ }
304
+ }
305
+ }
306
+ break format_sequence;
307
+
308
+ case 'b':
309
+ case 'B':
310
+ case 'o':
311
+ case 'x':
312
+ case 'X':
313
+ switch (format_string.charAt(i)) {
314
+ case 'b':
315
+ case 'B':
316
+ base_number = 2;
317
+ base_prefix = '0b';
318
+ base_neg_zero_regex = /^1+/;
319
+ base_neg_zero_digit = '1';
320
+ break;
321
+ case 'o':
322
+ base_number = 8;
323
+ base_prefix = '0';
324
+ base_neg_zero_regex = /^3?7+/;
325
+ base_neg_zero_digit = '7';
326
+ break;
327
+ case 'x':
328
+ case 'X':
329
+ base_number = 16;
330
+ base_prefix = '0x';
331
+ base_neg_zero_regex = /^f+/;
332
+ base_neg_zero_digit = 'f';
333
+ break;
334
+ }
335
+ arg = #{Integer(`GET_ARG()`)};
336
+ if (arg >= 0) {
337
+ str = arg.toString(base_number);
338
+ while (str.length < precision) { str = '0' + str; }
339
+ if (flags&FMINUS) {
340
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
341
+ if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
342
+ while (str.length < width) { str = str + ' '; }
343
+ } else {
344
+ if (flags&FZERO && precision === -1) {
345
+ while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0) - ((flags&FSHARP && arg !== 0) ? base_prefix.length : 0)) { str = '0' + str; }
346
+ if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
347
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
348
+ } else {
349
+ if (flags&FSHARP && arg !== 0) { str = base_prefix + str; }
350
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
351
+ while (str.length < width) { str = ' ' + str; }
352
+ }
353
+ }
354
+ } else {
355
+ if (flags&FPLUS || flags&FSPACE) {
356
+ str = (-arg).toString(base_number);
357
+ while (str.length < precision) { str = '0' + str; }
358
+ if (flags&FMINUS) {
359
+ if (flags&FSHARP) { str = base_prefix + str; }
360
+ str = '-' + str;
361
+ while (str.length < width) { str = str + ' '; }
362
+ } else {
363
+ if (flags&FZERO && precision === -1) {
364
+ while (str.length < width - 1 - (flags&FSHARP ? 2 : 0)) { str = '0' + str; }
365
+ if (flags&FSHARP) { str = base_prefix + str; }
366
+ str = '-' + str;
367
+ } else {
368
+ if (flags&FSHARP) { str = base_prefix + str; }
369
+ str = '-' + str;
370
+ while (str.length < width) { str = ' ' + str; }
371
+ }
372
+ }
373
+ } else {
374
+ str = (arg >>> 0).toString(base_number).replace(base_neg_zero_regex, base_neg_zero_digit);
375
+ while (str.length < precision - 2) { str = base_neg_zero_digit + str; }
376
+ if (flags&FMINUS) {
377
+ str = '..' + str;
378
+ if (flags&FSHARP) { str = base_prefix + str; }
379
+ while (str.length < width) { str = str + ' '; }
380
+ } else {
381
+ if (flags&FZERO && precision === -1) {
382
+ while (str.length < width - 2 - (flags&FSHARP ? base_prefix.length : 0)) { str = base_neg_zero_digit + str; }
383
+ str = '..' + str;
384
+ if (flags&FSHARP) { str = base_prefix + str; }
385
+ } else {
386
+ str = '..' + str;
387
+ if (flags&FSHARP) { str = base_prefix + str; }
388
+ while (str.length < width) { str = ' ' + str; }
389
+ }
390
+ }
391
+ }
392
+ }
393
+ if (format_string.charAt(i) === format_string.charAt(i).toUpperCase()) {
394
+ str = str.toUpperCase();
395
+ }
396
+ break format_sequence;
397
+
398
+ case 'f':
399
+ case 'e':
400
+ case 'E':
401
+ case 'g':
402
+ case 'G':
403
+ arg = #{Float(`GET_ARG()`)};
404
+ if (arg >= 0 || isNaN(arg)) {
405
+ if (arg === Infinity) {
406
+ str = 'Inf';
407
+ } else {
408
+ switch (format_string.charAt(i)) {
409
+ case 'f':
410
+ str = arg.toFixed(precision === -1 ? 6 : precision);
411
+ break;
412
+ case 'e':
413
+ case 'E':
414
+ str = arg.toExponential(precision === -1 ? 6 : precision);
415
+ break;
416
+ case 'g':
417
+ case 'G':
418
+ str = arg.toExponential();
419
+ exponent = parseInt(str.split('e')[1], 10);
420
+ if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) {
421
+ str = arg.toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision);
422
+ }
423
+ break;
424
+ }
425
+ }
426
+ if (flags&FMINUS) {
427
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
428
+ while (str.length < width) { str = str + ' '; }
429
+ } else {
430
+ if (flags&FZERO && arg !== Infinity && !isNaN(arg)) {
431
+ while (str.length < width - ((flags&FPLUS || flags&FSPACE) ? 1 : 0)) { str = '0' + str; }
432
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
433
+ } else {
434
+ if (flags&FPLUS || flags&FSPACE) { str = (flags&FPLUS ? '+' : ' ') + str; }
435
+ while (str.length < width) { str = ' ' + str; }
436
+ }
437
+ }
438
+ } else {
439
+ if (arg === -Infinity) {
440
+ str = 'Inf';
441
+ } else {
442
+ switch (format_string.charAt(i)) {
443
+ case 'f':
444
+ str = (-arg).toFixed(precision === -1 ? 6 : precision);
445
+ break;
446
+ case 'e':
447
+ case 'E':
448
+ str = (-arg).toExponential(precision === -1 ? 6 : precision);
449
+ break;
450
+ case 'g':
451
+ case 'G':
452
+ str = (-arg).toExponential();
453
+ exponent = parseInt(str.split('e')[1], 10);
454
+ if (!(exponent < -4 || exponent >= (precision === -1 ? 6 : precision))) {
455
+ str = (-arg).toPrecision(precision === -1 ? (flags&FSHARP ? 6 : undefined) : precision);
456
+ }
457
+ break;
458
+ }
459
+ }
460
+ if (flags&FMINUS) {
461
+ str = '-' + str;
462
+ while (str.length < width) { str = str + ' '; }
463
+ } else {
464
+ if (flags&FZERO && arg !== -Infinity) {
465
+ while (str.length < width - 1) { str = '0' + str; }
466
+ str = '-' + str;
467
+ } else {
468
+ str = '-' + str;
469
+ while (str.length < width) { str = ' ' + str; }
470
+ }
471
+ }
472
+ }
473
+ if (format_string.charAt(i) === format_string.charAt(i).toUpperCase() && arg !== Infinity && arg !== -Infinity && !isNaN(arg)) {
474
+ str = str.toUpperCase();
475
+ }
476
+ str = str.replace(/([eE][-+]?)([0-9])$/, '$10$2');
477
+ break format_sequence;
478
+
479
+ case 'a':
480
+ case 'A':
481
+ // Not implemented because there are no specs for this field type.
482
+ #{raise NotImplementedError, '`A` and `a` format field types are not implemented in Opal yet'}
483
+
484
+ case 'c':
485
+ arg = GET_ARG();
486
+ if (#{`arg`.respond_to?(:to_ary)}) { arg = #{`arg`.to_ary}[0]; }
487
+ if (#{`arg`.respond_to?(:to_str)}) {
488
+ str = #{`arg`.to_str};
489
+ } else {
490
+ str = String.fromCharCode(#{Opal.coerce_to(`arg`, Integer, :to_int)});
491
+ }
492
+ if (str.length !== 1) {
493
+ #{raise ArgumentError, '%c requires a character'}
494
+ }
495
+ if (flags&FMINUS) {
496
+ while (str.length < width) { str = str + ' '; }
497
+ } else {
498
+ while (str.length < width) { str = ' ' + str; }
499
+ }
500
+ break format_sequence;
501
+
502
+ case 'p':
503
+ str = #{`GET_ARG()`.inspect};
504
+ if (precision !== -1) { str = str.slice(0, precision); }
505
+ if (flags&FMINUS) {
506
+ while (str.length < width) { str = str + ' '; }
507
+ } else {
508
+ while (str.length < width) { str = ' ' + str; }
509
+ }
510
+ break format_sequence;
511
+
512
+ case 's':
513
+ str = #{`GET_ARG()`.to_s};
514
+ if (precision !== -1) { str = str.slice(0, precision); }
515
+ if (flags&FMINUS) {
516
+ while (str.length < width) { str = str + ' '; }
517
+ } else {
518
+ while (str.length < width) { str = ' ' + str; }
519
+ }
520
+ break format_sequence;
521
+
522
+ default:
523
+ #{raise ArgumentError, "malformed format string - %#{`format_string.charAt(i)`}"}
524
+ }
525
+ }
526
+
527
+ if (str === undefined) {
528
+ #{raise ArgumentError, 'malformed format string - %'}
529
+ }
530
+
531
+ result += format_string.slice(begin_slice, end_slice) + str;
532
+ begin_slice = i + 1;
533
+ }
534
+
535
+ if (#{$DEBUG} && pos_arg_num >= 0 && seq_arg_num < args.length) {
536
+ #{raise ArgumentError, 'too many arguments for format string'}
537
+ }
538
+
539
+ return result + format_string.slice(begin_slice);
540
+ }
541
+ end
542
+
543
+ alias sprintf format
544
+ end