opal-wedge 0.9.0.dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (830) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.gitmodules +7 -0
  4. data/.inch.yml +19 -0
  5. data/.jshintrc +48 -0
  6. data/.rspec +3 -0
  7. data/.spectator +2 -0
  8. data/.spectator-mspec +3 -0
  9. data/.travis.yml +60 -0
  10. data/.yardopts +6 -0
  11. data/CHANGELOG.md +571 -0
  12. data/CODE_OF_CONDUCT.md +15 -0
  13. data/CONTRIBUTING.md +192 -0
  14. data/Gemfile +26 -0
  15. data/Guardfile +77 -0
  16. data/LICENSE +19 -0
  17. data/README.md +167 -0
  18. data/Rakefile +15 -0
  19. data/benchmark/benchmarks +103 -0
  20. data/benchmark/bm_array_intersection_numbers.rb +7 -0
  21. data/benchmark/bm_array_intersection_objects.rb +7 -0
  22. data/benchmark/bm_array_intersection_strings.rb +7 -0
  23. data/benchmark/bm_array_minus_numbers.rb +7 -0
  24. data/benchmark/bm_array_minus_objects.rb +7 -0
  25. data/benchmark/bm_array_minus_strings.rb +7 -0
  26. data/benchmark/bm_array_union_numbers.rb +7 -0
  27. data/benchmark/bm_array_union_objects.rb +7 -0
  28. data/benchmark/bm_array_union_strings.rb +7 -0
  29. data/benchmark/bm_array_uniq_bang_numbers.rb +5 -0
  30. data/benchmark/bm_array_uniq_bang_objects.rb +5 -0
  31. data/benchmark/bm_array_uniq_bang_strings.rb +5 -0
  32. data/benchmark/bm_array_uniq_numbers.rb +5 -0
  33. data/benchmark/bm_array_uniq_objects.rb +5 -0
  34. data/benchmark/bm_array_uniq_strings.rb +5 -0
  35. data/benchmark/bm_dispatch_bind_table.rb +57 -0
  36. data/benchmark/bm_dispatch_code_gen.rb +65 -0
  37. data/benchmark/bm_dispatch_code_gen_if.rb +64 -0
  38. data/benchmark/bm_dispatch_hardcoded.rb +44 -0
  39. data/benchmark/bm_dispatch_send.rb +38 -0
  40. data/benchmark/bm_dispatch_send_table.rb +57 -0
  41. data/benchmark/bm_hash_assoc_object.rb +11 -0
  42. data/benchmark/bm_hash_assoc_string.rb +9 -0
  43. data/benchmark/bm_hash_clone_object.rb +9 -0
  44. data/benchmark/bm_hash_clone_string.rb +9 -0
  45. data/benchmark/bm_hash_delete_object.rb +11 -0
  46. data/benchmark/bm_hash_delete_string.rb +9 -0
  47. data/benchmark/bm_hash_each_key_object.rb +9 -0
  48. data/benchmark/bm_hash_each_key_string.rb +9 -0
  49. data/benchmark/bm_hash_each_object.rb +9 -0
  50. data/benchmark/bm_hash_each_string.rb +9 -0
  51. data/benchmark/bm_hash_each_value_object.rb +9 -0
  52. data/benchmark/bm_hash_each_value_string.rb +9 -0
  53. data/benchmark/bm_hash_element_reference_object.rb +11 -0
  54. data/benchmark/bm_hash_element_reference_string.rb +9 -0
  55. data/benchmark/bm_hash_element_set_object.rb +5 -0
  56. data/benchmark/bm_hash_element_set_string.rb +5 -0
  57. data/benchmark/bm_hash_equal_value_object.rb +14 -0
  58. data/benchmark/bm_hash_equal_value_string.rb +11 -0
  59. data/benchmark/bm_hash_fetch_object.rb +11 -0
  60. data/benchmark/bm_hash_fetch_string.rb +9 -0
  61. data/benchmark/bm_hash_flatten_object.rb +9 -0
  62. data/benchmark/bm_hash_flatten_string.rb +9 -0
  63. data/benchmark/bm_hash_has_key_object.rb +11 -0
  64. data/benchmark/bm_hash_has_key_string.rb +9 -0
  65. data/benchmark/bm_hash_has_value_object.rb +9 -0
  66. data/benchmark/bm_hash_has_value_string.rb +9 -0
  67. data/benchmark/bm_hash_hash_object.rb +9 -0
  68. data/benchmark/bm_hash_hash_string.rb +9 -0
  69. data/benchmark/bm_hash_inspect_object.rb +9 -0
  70. data/benchmark/bm_hash_inspect_string.rb +9 -0
  71. data/benchmark/bm_hash_invert_object.rb +9 -0
  72. data/benchmark/bm_hash_invert_string.rb +9 -0
  73. data/benchmark/bm_hash_keep_if_object.rb +9 -0
  74. data/benchmark/bm_hash_keep_if_string.rb +9 -0
  75. data/benchmark/bm_hash_key_object.rb +9 -0
  76. data/benchmark/bm_hash_key_string.rb +9 -0
  77. data/benchmark/bm_hash_keys_object.rb +9 -0
  78. data/benchmark/bm_hash_keys_string.rb +9 -0
  79. data/benchmark/bm_hash_literal_mixed_large.rb +3 -0
  80. data/benchmark/bm_hash_literal_mixed_small.rb +3 -0
  81. data/benchmark/bm_hash_literal_object_large.rb +4 -0
  82. data/benchmark/bm_hash_literal_object_small.rb +3 -0
  83. data/benchmark/bm_hash_literal_string_large.rb +4 -0
  84. data/benchmark/bm_hash_literal_string_small.rb +3 -0
  85. data/benchmark/bm_hash_merge_object.rb +22 -0
  86. data/benchmark/bm_hash_merge_string.rb +18 -0
  87. data/benchmark/bm_hash_rassoc_object.rb +9 -0
  88. data/benchmark/bm_hash_rassoc_string.rb +9 -0
  89. data/benchmark/bm_hash_rehash_object.rb +9 -0
  90. data/benchmark/bm_hash_rehash_string.rb +9 -0
  91. data/benchmark/bm_hash_reject_bang_object.rb +9 -0
  92. data/benchmark/bm_hash_reject_bang_string.rb +9 -0
  93. data/benchmark/bm_hash_reject_object.rb +9 -0
  94. data/benchmark/bm_hash_reject_string.rb +9 -0
  95. data/benchmark/bm_hash_replace_object.rb +18 -0
  96. data/benchmark/bm_hash_replace_string.rb +14 -0
  97. data/benchmark/bm_hash_select_bang_object.rb +9 -0
  98. data/benchmark/bm_hash_select_bang_string.rb +9 -0
  99. data/benchmark/bm_hash_select_object.rb +9 -0
  100. data/benchmark/bm_hash_select_string.rb +9 -0
  101. data/benchmark/bm_hash_shift_object.rb +10 -0
  102. data/benchmark/bm_hash_shift_string.rb +10 -0
  103. data/benchmark/bm_hash_to_a_object.rb +9 -0
  104. data/benchmark/bm_hash_to_a_string.rb +9 -0
  105. data/benchmark/bm_hash_to_h_object.rb +10 -0
  106. data/benchmark/bm_hash_to_h_string.rb +10 -0
  107. data/benchmark/bm_hash_values_object.rb +9 -0
  108. data/benchmark/bm_hash_values_string.rb +9 -0
  109. data/benchmark/run.rb +37 -0
  110. data/bin/opal +27 -0
  111. data/bin/opal-build +77 -0
  112. data/bin/opal-mspec +10 -0
  113. data/bin/opal-repl +72 -0
  114. data/config.ru +14 -0
  115. data/docs/compiler_directives.md +127 -0
  116. data/examples/rack/.gitignore +1 -0
  117. data/examples/rack/Gemfile +3 -0
  118. data/examples/rack/app/application.rb +13 -0
  119. data/examples/rack/app/user.rb +22 -0
  120. data/examples/rack/config.ru +20 -0
  121. data/examples/rack/index.html.erb +10 -0
  122. data/examples/sinatra/Gemfile +5 -0
  123. data/examples/sinatra/app/application.rb +7 -0
  124. data/examples/sinatra/config.ru +38 -0
  125. data/lib/mspec/opal/main.rb.erb +9 -0
  126. data/lib/mspec/opal/new.html.erb +1 -0
  127. data/lib/mspec/opal/rake_task.rb +248 -0
  128. data/lib/mspec/opal/runner.rb +281 -0
  129. data/lib/mspec/opal/special_calls.rb +44 -0
  130. data/lib/mspec/opal/sprockets.js +57 -0
  131. data/lib/opal-wedge.rb +4 -0
  132. data/lib/opal.rb +11 -0
  133. data/lib/opal/builder.rb +161 -0
  134. data/lib/opal/builder_processors.rb +149 -0
  135. data/lib/opal/cli.rb +162 -0
  136. data/lib/opal/cli_options.rb +158 -0
  137. data/lib/opal/cli_runners.rb +11 -0
  138. data/lib/opal/cli_runners/apple_script.rb +65 -0
  139. data/lib/opal/cli_runners/nodejs.rb +63 -0
  140. data/lib/opal/cli_runners/phantom.js +44 -0
  141. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  142. data/lib/opal/cli_runners/server.rb +56 -0
  143. data/lib/opal/compiler.rb +381 -0
  144. data/lib/opal/config.rb +48 -0
  145. data/lib/opal/erb.rb +84 -0
  146. data/lib/opal/fragment.rb +53 -0
  147. data/lib/opal/hike_path_finder.rb +18 -0
  148. data/lib/opal/nodes.rb +26 -0
  149. data/lib/opal/nodes/arglist.rb +56 -0
  150. data/lib/opal/nodes/array.rb +54 -0
  151. data/lib/opal/nodes/base.rb +151 -0
  152. data/lib/opal/nodes/call.rb +290 -0
  153. data/lib/opal/nodes/call_special.rb +252 -0
  154. data/lib/opal/nodes/case.rb +96 -0
  155. data/lib/opal/nodes/class.rb +42 -0
  156. data/lib/opal/nodes/constants.rb +78 -0
  157. data/lib/opal/nodes/def.rb +281 -0
  158. data/lib/opal/nodes/defined.rb +113 -0
  159. data/lib/opal/nodes/definitions.rb +168 -0
  160. data/lib/opal/nodes/for.rb +48 -0
  161. data/lib/opal/nodes/hash.rb +67 -0
  162. data/lib/opal/nodes/helpers.rb +116 -0
  163. data/lib/opal/nodes/if.rb +81 -0
  164. data/lib/opal/nodes/iter.rb +136 -0
  165. data/lib/opal/nodes/literal.rb +247 -0
  166. data/lib/opal/nodes/logic.rb +217 -0
  167. data/lib/opal/nodes/masgn.rb +62 -0
  168. data/lib/opal/nodes/module.rb +45 -0
  169. data/lib/opal/nodes/rescue.rb +143 -0
  170. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  171. data/lib/opal/nodes/scope.rb +281 -0
  172. data/lib/opal/nodes/singleton_class.rb +26 -0
  173. data/lib/opal/nodes/super.rb +97 -0
  174. data/lib/opal/nodes/top.rb +103 -0
  175. data/lib/opal/nodes/variables.rb +191 -0
  176. data/lib/opal/nodes/while.rb +65 -0
  177. data/lib/opal/nodes/yield.rb +95 -0
  178. data/lib/opal/parser.rb +742 -0
  179. data/lib/opal/parser/grammar.rb +5723 -0
  180. data/lib/opal/parser/grammar.y +1787 -0
  181. data/lib/opal/parser/keywords.rb +66 -0
  182. data/lib/opal/parser/lexer.rb +1260 -0
  183. data/lib/opal/parser/parser_scope.rb +28 -0
  184. data/lib/opal/parser/sexp.rb +81 -0
  185. data/lib/opal/path_reader.rb +35 -0
  186. data/lib/opal/paths.rb +55 -0
  187. data/lib/opal/regexp_anchors.rb +5 -0
  188. data/lib/opal/source_map.rb +70 -0
  189. data/lib/opal/sprockets.rb +3 -0
  190. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  191. data/lib/opal/sprockets/environment.rb +31 -0
  192. data/lib/opal/sprockets/erb.rb +23 -0
  193. data/lib/opal/sprockets/path_reader.rb +36 -0
  194. data/lib/opal/sprockets/processor.rb +167 -0
  195. data/lib/opal/sprockets/server.rb +160 -0
  196. data/lib/opal/sprockets/source_map_header_patch.rb +41 -0
  197. data/lib/opal/sprockets/source_map_server.rb +115 -0
  198. data/lib/opal/util.rb +69 -0
  199. data/lib/opal/version.rb +5 -0
  200. data/lib/tilt/opal.rb +54 -0
  201. data/opal.gemspec +37 -0
  202. data/opal/README.md +6 -0
  203. data/opal/corelib/array.rb +2073 -0
  204. data/opal/corelib/array/inheritance.rb +127 -0
  205. data/opal/corelib/basic_object.rb +82 -0
  206. data/opal/corelib/boolean.rb +47 -0
  207. data/opal/corelib/class.rb +55 -0
  208. data/opal/corelib/comparable.rb +57 -0
  209. data/opal/corelib/complex.rb +3 -0
  210. data/opal/corelib/dir.rb +20 -0
  211. data/opal/corelib/enumerable.rb +1138 -0
  212. data/opal/corelib/enumerator.rb +426 -0
  213. data/opal/corelib/error.rb +77 -0
  214. data/opal/corelib/file.rb +59 -0
  215. data/opal/corelib/hash.rb +951 -0
  216. data/opal/corelib/helpers.rb +102 -0
  217. data/opal/corelib/io.rb +73 -0
  218. data/opal/corelib/kernel.rb +1124 -0
  219. data/opal/corelib/main.rb +7 -0
  220. data/opal/corelib/match_data.rb +128 -0
  221. data/opal/corelib/method.rb +62 -0
  222. data/opal/corelib/module.rb +553 -0
  223. data/opal/corelib/nil_class.rb +57 -0
  224. data/opal/corelib/numeric.rb +564 -0
  225. data/opal/corelib/proc.rb +105 -0
  226. data/opal/corelib/process.rb +27 -0
  227. data/opal/corelib/range.rb +116 -0
  228. data/opal/corelib/rational.rb +3 -0
  229. data/opal/corelib/regexp.rb +203 -0
  230. data/opal/corelib/runtime.js +1637 -0
  231. data/opal/corelib/string.rb +1762 -0
  232. data/opal/corelib/string/inheritance.rb +117 -0
  233. data/opal/corelib/struct.rb +159 -0
  234. data/opal/corelib/time.rb +746 -0
  235. data/opal/corelib/variables.rb +28 -0
  236. data/opal/opal.rb +33 -0
  237. data/spec/README.md +8 -0
  238. data/spec/filters/bugs/array.rb +77 -0
  239. data/spec/filters/bugs/basicobject.rb +33 -0
  240. data/spec/filters/bugs/class.rb +15 -0
  241. data/spec/filters/bugs/comparable.rb +4 -0
  242. data/spec/filters/bugs/date.rb +173 -0
  243. data/spec/filters/bugs/enumerable.rb +62 -0
  244. data/spec/filters/bugs/enumerator.rb +45 -0
  245. data/spec/filters/bugs/exception.rb +84 -0
  246. data/spec/filters/bugs/fixnum.rb +35 -0
  247. data/spec/filters/bugs/float.rb +100 -0
  248. data/spec/filters/bugs/hash.rb +17 -0
  249. data/spec/filters/bugs/integer.rb +63 -0
  250. data/spec/filters/bugs/kernel.rb +395 -0
  251. data/spec/filters/bugs/language.rb +246 -0
  252. data/spec/filters/bugs/math.rb +89 -0
  253. data/spec/filters/bugs/method.rb +5 -0
  254. data/spec/filters/bugs/module.rb +372 -0
  255. data/spec/filters/bugs/nil.rb +7 -0
  256. data/spec/filters/bugs/numeric.rb +123 -0
  257. data/spec/filters/bugs/proc.rb +65 -0
  258. data/spec/filters/bugs/range.rb +148 -0
  259. data/spec/filters/bugs/regexp.rb +252 -0
  260. data/spec/filters/bugs/set.rb +51 -0
  261. data/spec/filters/bugs/singleton.rb +6 -0
  262. data/spec/filters/bugs/string.rb +99 -0
  263. data/spec/filters/bugs/strscan.rb +106 -0
  264. data/spec/filters/bugs/struct.rb +22 -0
  265. data/spec/filters/bugs/time.rb +28 -0
  266. data/spec/filters/bugs/unboundmethod.rb +22 -0
  267. data/spec/filters/unsupported/array.rb +176 -0
  268. data/spec/filters/unsupported/basicobject.rb +12 -0
  269. data/spec/filters/unsupported/class.rb +4 -0
  270. data/spec/filters/unsupported/delegator.rb +5 -0
  271. data/spec/filters/unsupported/enumerable.rb +8 -0
  272. data/spec/filters/unsupported/enumerator.rb +13 -0
  273. data/spec/filters/unsupported/fixnum.rb +15 -0
  274. data/spec/filters/unsupported/float.rb +6 -0
  275. data/spec/filters/unsupported/hash.rb +55 -0
  276. data/spec/filters/unsupported/integer.rb +3 -0
  277. data/spec/filters/unsupported/kernel.rb +22 -0
  278. data/spec/filters/unsupported/language.rb +31 -0
  279. data/spec/filters/unsupported/matchdata.rb +33 -0
  280. data/spec/filters/unsupported/math.rb +3 -0
  281. data/spec/filters/unsupported/module.rb +36 -0
  282. data/spec/filters/unsupported/pathname.rb +3 -0
  283. data/spec/filters/unsupported/regexp.rb +94 -0
  284. data/spec/filters/unsupported/set.rb +4 -0
  285. data/spec/filters/unsupported/singleton.rb +6 -0
  286. data/spec/filters/unsupported/string.rb +538 -0
  287. data/spec/filters/unsupported/struct.rb +3 -0
  288. data/spec/filters/unsupported/time.rb +208 -0
  289. data/spec/lib/builder_processors_spec.rb +27 -0
  290. data/spec/lib/builder_spec.rb +72 -0
  291. data/spec/lib/cli_spec.rb +150 -0
  292. data/spec/lib/compiler/pre_processed_conditionals_spec.rb +87 -0
  293. data/spec/lib/compiler_spec.rb +131 -0
  294. data/spec/lib/dependency_resolver_spec.rb +40 -0
  295. data/spec/lib/fixtures/complex_sprockets.js.rb.erb +4 -0
  296. data/spec/lib/fixtures/file_with_directives.js +2 -0
  297. data/spec/lib/fixtures/jst_file.js.jst +1 -0
  298. data/spec/lib/fixtures/no_requires.rb +1 -0
  299. data/spec/lib/fixtures/opal_file.rb +2 -0
  300. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  301. data/spec/lib/fixtures/required_file.js +1 -0
  302. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  303. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  304. data/spec/lib/fixtures/requires.rb +7 -0
  305. data/spec/lib/fixtures/source_map.rb +1 -0
  306. data/spec/lib/fixtures/source_map/subfolder/other_file.rb +1 -0
  307. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  308. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  309. data/spec/lib/hike_path_finder_spec.rb +23 -0
  310. data/spec/lib/lexer_spec.rb +110 -0
  311. data/spec/lib/parser/alias_spec.rb +26 -0
  312. data/spec/lib/parser/and_spec.rb +13 -0
  313. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  314. data/spec/lib/parser/begin_spec.rb +42 -0
  315. data/spec/lib/parser/block_spec.rb +12 -0
  316. data/spec/lib/parser/break_spec.rb +17 -0
  317. data/spec/lib/parser/call_spec.rb +165 -0
  318. data/spec/lib/parser/class_spec.rb +35 -0
  319. data/spec/lib/parser/comments_spec.rb +11 -0
  320. data/spec/lib/parser/def_spec.rb +80 -0
  321. data/spec/lib/parser/if_spec.rb +26 -0
  322. data/spec/lib/parser/iter_spec.rb +59 -0
  323. data/spec/lib/parser/lambda_spec.rb +64 -0
  324. data/spec/lib/parser/literal_spec.rb +118 -0
  325. data/spec/lib/parser/masgn_spec.rb +37 -0
  326. data/spec/lib/parser/module_spec.rb +27 -0
  327. data/spec/lib/parser/not_spec.rb +21 -0
  328. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  329. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  330. data/spec/lib/parser/or_spec.rb +13 -0
  331. data/spec/lib/parser/return_spec.rb +17 -0
  332. data/spec/lib/parser/sclass_spec.rb +21 -0
  333. data/spec/lib/parser/string_spec.rb +276 -0
  334. data/spec/lib/parser/super_spec.rb +20 -0
  335. data/spec/lib/parser/unary_spec.rb +48 -0
  336. data/spec/lib/parser/undef_spec.rb +15 -0
  337. data/spec/lib/parser/unless_spec.rb +13 -0
  338. data/spec/lib/parser/variables_spec.rb +92 -0
  339. data/spec/lib/parser/while_spec.rb +15 -0
  340. data/spec/lib/parser/yield_spec.rb +20 -0
  341. data/spec/lib/path_reader_spec.rb +36 -0
  342. data/spec/lib/shared/path_finder_shared.rb +19 -0
  343. data/spec/lib/shared/path_reader_shared.rb +31 -0
  344. data/spec/lib/spec_helper.rb +9 -0
  345. data/spec/lib/sprockets/erb_spec.rb +38 -0
  346. data/spec/lib/sprockets/path_reader_spec.rb +41 -0
  347. data/spec/lib/sprockets/processor_spec.rb +67 -0
  348. data/spec/lib/sprockets/server_spec.rb +102 -0
  349. data/spec/lib/tilt/opal_spec.rb +37 -0
  350. data/spec/opal/compiler/irb_spec.rb +44 -0
  351. data/spec/opal/core/array/intersection_spec.rb +38 -0
  352. data/spec/opal/core/array/minus_spec.rb +38 -0
  353. data/spec/opal/core/array/select_spec.rb +14 -0
  354. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  355. data/spec/opal/core/array/union_spec.rb +38 -0
  356. data/spec/opal/core/array/uniq_spec.rb +49 -0
  357. data/spec/opal/core/date_spec.rb +177 -0
  358. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  359. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  360. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  361. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  362. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  363. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  364. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  365. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  366. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  367. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  368. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  369. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  370. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  371. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  372. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  373. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  374. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  375. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  376. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  377. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  378. data/spec/opal/core/exception_spec.rb +13 -0
  379. data/spec/opal/core/fixtures/class.rb +124 -0
  380. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  381. data/spec/opal/core/fixtures/constants.rb +33 -0
  382. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  383. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  384. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  385. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  386. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  387. data/spec/opal/core/fixtures/require_tree_files/nested/nested 1.rb +1 -0
  388. data/spec/opal/core/fixtures/require_tree_files/nested/nested 2.rb +1 -0
  389. data/spec/opal/core/fixtures/require_tree_files/other/other 1.rb +1 -0
  390. data/spec/opal/core/fixtures/require_tree_with_dot/file 1.rb +1 -0
  391. data/spec/opal/core/fixtures/require_tree_with_dot/file 2.rb +1 -0
  392. data/spec/opal/core/fixtures/require_tree_with_dot/file 3.rb +1 -0
  393. data/spec/opal/core/fixtures/require_tree_with_dot/index.rb +3 -0
  394. data/spec/opal/core/hash/has_value_spec.rb +13 -0
  395. data/spec/opal/core/hash/internals_spec.rb +332 -0
  396. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  397. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  398. data/spec/opal/core/kernel/class_spec.rb +6 -0
  399. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  400. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  401. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  402. data/spec/opal/core/kernel/format_spec.rb +122 -0
  403. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  404. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  405. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  406. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  407. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  408. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  409. data/spec/opal/core/kernel/match_spec.rb +5 -0
  410. data/spec/opal/core/kernel/method_spec.rb +31 -0
  411. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  412. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  413. data/spec/opal/core/kernel/p_spec.rb +15 -0
  414. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  415. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  416. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  417. data/spec/opal/core/kernel/require_tree_spec.rb +18 -0
  418. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  419. data/spec/opal/core/kernel/send_spec.rb +56 -0
  420. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  421. data/spec/opal/core/language/block_spec.rb +538 -0
  422. data/spec/opal/core/language/fixtures/array.rb +11 -0
  423. data/spec/opal/core/language/fixtures/block.rb +57 -0
  424. data/spec/opal/core/language/fixtures/break.rb +240 -0
  425. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  426. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  427. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  428. data/spec/opal/core/language/fixtures/module.rb +24 -0
  429. data/spec/opal/core/language/fixtures/next.rb +128 -0
  430. data/spec/opal/core/language/fixtures/return.rb +118 -0
  431. data/spec/opal/core/language/fixtures/send.rb +110 -0
  432. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  433. data/spec/opal/core/language/fixtures/super.rb +308 -0
  434. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  435. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  436. data/spec/opal/core/language/predefined_spec.rb +138 -0
  437. data/spec/opal/core/language/proc_spec.rb +263 -0
  438. data/spec/opal/core/language/regexp_spec.rb +20 -0
  439. data/spec/opal/core/language/send_spec.rb +225 -0
  440. data/spec/opal/core/language/string_spec.rb +44 -0
  441. data/spec/opal/core/language/variables_spec.rb +1366 -0
  442. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  443. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  444. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  445. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  446. data/spec/opal/core/language/versions/def_2_0_spec.rb +62 -0
  447. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  448. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  449. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  450. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  451. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  452. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  453. data/spec/opal/core/language_spec.rb +23 -0
  454. data/spec/opal/core/method/to_proc_spec.rb +28 -0
  455. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  456. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  457. data/spec/opal/core/module/append_features_spec.rb +14 -0
  458. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  459. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  460. data/spec/opal/core/module/const_get_spec.rb +85 -0
  461. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  462. data/spec/opal/core/module/const_set_spec.rb +64 -0
  463. data/spec/opal/core/module/constants_spec.rb +49 -0
  464. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  465. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  466. data/spec/opal/core/module/module_function_spec.rb +25 -0
  467. data/spec/opal/core/module/name_spec.rb +52 -0
  468. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  469. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  470. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  471. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  472. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  473. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  474. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  475. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  476. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  477. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  478. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  479. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  480. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  481. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  482. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  483. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  484. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  485. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  486. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  487. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  488. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  489. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  490. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  491. data/spec/opal/core/numeric/next_spec.rb +9 -0
  492. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  493. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  494. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  495. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  496. data/spec/opal/core/numeric/step_spec.rb +11 -0
  497. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  498. data/spec/opal/core/numeric/times_spec.rb +36 -0
  499. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  500. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  501. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  502. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  503. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  504. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  505. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  506. data/spec/opal/core/object_id_spec.rb +56 -0
  507. data/spec/opal/core/proc/call_spec.rb +21 -0
  508. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  509. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  510. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  511. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  512. data/spec/opal/core/runtime/block_spec.rb +23 -0
  513. data/spec/opal/core/runtime/bridged_classes_spec.rb +111 -0
  514. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  515. data/spec/opal/core/runtime/donate_spec.rb +53 -0
  516. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  517. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  518. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  519. data/spec/opal/core/runtime/method_spec.rb +31 -0
  520. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  521. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  522. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  523. data/spec/opal/core/runtime/return_spec.rb +38 -0
  524. data/spec/opal/core/runtime/send_spec.rb +34 -0
  525. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  526. data/spec/opal/core/runtime/super_spec.rb +212 -0
  527. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  528. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  529. data/spec/opal/core/runtime_spec.rb +58 -0
  530. data/spec/opal/core/source_map_spec.rb +15 -0
  531. data/spec/opal/core/string_spec.rb +11 -0
  532. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  533. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  534. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  535. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  536. data/spec/opal/stdlib/js_spec.rb +66 -0
  537. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  538. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  539. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  540. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  541. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  542. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  543. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  544. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  545. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  546. data/spec/opal/stdlib/native/native_alias_spec.rb +19 -0
  547. data/spec/opal/stdlib/native/native_class_spec.rb +18 -0
  548. data/spec/opal/stdlib/native/native_module_spec.rb +13 -0
  549. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  550. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  551. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  552. data/spec/opal/stdlib/promise/always_spec.rb +30 -0
  553. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  554. data/spec/opal/stdlib/promise/rescue_spec.rb +44 -0
  555. data/spec/opal/stdlib/promise/then_spec.rb +71 -0
  556. data/spec/opal/stdlib/promise/trace_spec.rb +52 -0
  557. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  558. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  559. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  560. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  561. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  562. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  563. data/spec/rubyspecs +144 -0
  564. data/spec/spec_helper.rb +53 -0
  565. data/spec/support/mspec_rspec_adapter.rb +33 -0
  566. data/spec/support/parser_helpers.rb +37 -0
  567. data/stdlib/README.md +3 -0
  568. data/stdlib/base64.rb +152 -0
  569. data/stdlib/benchmark.rb +557 -0
  570. data/stdlib/buffer.rb +41 -0
  571. data/stdlib/buffer/array.rb +66 -0
  572. data/stdlib/buffer/view.rb +70 -0
  573. data/stdlib/date.rb +248 -0
  574. data/stdlib/delegate.rb +29 -0
  575. data/stdlib/dir.rb +1 -0
  576. data/stdlib/encoding.rb +170 -0
  577. data/stdlib/enumerator.rb +1 -0
  578. data/stdlib/erb.rb +16 -0
  579. data/stdlib/file.rb +1 -0
  580. data/stdlib/fileutils.rb +0 -0
  581. data/stdlib/forwardable.rb +71 -0
  582. data/stdlib/iconv.rb +0 -0
  583. data/stdlib/js.rb +56 -0
  584. data/stdlib/json.rb +190 -0
  585. data/stdlib/math.rb +370 -0
  586. data/stdlib/native.rb +530 -0
  587. data/stdlib/nodejs.rb +7 -0
  588. data/stdlib/nodejs/dir.rb +13 -0
  589. data/stdlib/nodejs/file.rb +98 -0
  590. data/stdlib/nodejs/fileutils.rb +26 -0
  591. data/stdlib/nodejs/io.rb +2 -0
  592. data/stdlib/nodejs/irb.rb +45 -0
  593. data/stdlib/nodejs/kernel.rb +33 -0
  594. data/stdlib/nodejs/node_modules/.bin/js-yaml +140 -0
  595. data/stdlib/nodejs/node_modules/glob/LICENSE +15 -0
  596. data/stdlib/nodejs/node_modules/glob/README.md +357 -0
  597. data/stdlib/nodejs/node_modules/glob/common.js +177 -0
  598. data/stdlib/nodejs/node_modules/glob/glob.js +649 -0
  599. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/.eslintrc +17 -0
  600. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/LICENSE +15 -0
  601. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/README.md +37 -0
  602. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/inflight.js +44 -0
  603. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/LICENSE +15 -0
  604. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/README.md +36 -0
  605. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/package.json +52 -0
  606. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/test/basic.js +51 -0
  607. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/node_modules/wrappy/wrappy.js +33 -0
  608. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/package.json +61 -0
  609. data/stdlib/nodejs/node_modules/glob/node_modules/inflight/test.js +97 -0
  610. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/LICENSE +16 -0
  611. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/README.md +42 -0
  612. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits.js +1 -0
  613. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/inherits_browser.js +23 -0
  614. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/package.json +51 -0
  615. data/stdlib/nodejs/node_modules/glob/node_modules/inherits/test.js +25 -0
  616. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.npmignore +1 -0
  617. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/.travis.yml +4 -0
  618. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/LICENSE +23 -0
  619. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/README.md +216 -0
  620. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/benchmark.js +15 -0
  621. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/browser.js +1181 -0
  622. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/minimatch.js +845 -0
  623. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.npmignore +2 -0
  624. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/.travis.yml +3 -0
  625. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/README.md +121 -0
  626. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/example.js +8 -0
  627. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/index.js +191 -0
  628. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.npmignore +2 -0
  629. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/.travis.yml +4 -0
  630. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/Makefile +6 -0
  631. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/README.md +80 -0
  632. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/example.js +5 -0
  633. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/index.js +38 -0
  634. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/package.json +73 -0
  635. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/balanced-match/test/balanced.js +56 -0
  636. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/.travis.yml +4 -0
  637. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/LICENSE +18 -0
  638. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/README.markdown +62 -0
  639. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/example/map.js +6 -0
  640. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/index.js +13 -0
  641. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/package.json +83 -0
  642. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/node_modules/concat-map/test/map.js +39 -0
  643. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/package.json +75 -0
  644. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-comparison.js +32 -0
  645. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/bash-results.txt +1075 -0
  646. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/cases.txt +182 -0
  647. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/dollar.js +9 -0
  648. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/empty-option.js +10 -0
  649. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/generate.sh +24 -0
  650. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/negative-increment.js +15 -0
  651. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/nested.js +16 -0
  652. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/order.js +10 -0
  653. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/pad.js +13 -0
  654. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/same-type.js +7 -0
  655. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/node_modules/brace-expansion/test/sequence.js +50 -0
  656. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/package.json +60 -0
  657. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/basic.js +399 -0
  658. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/brace-expand.js +45 -0
  659. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/defaults.js +274 -0
  660. data/stdlib/nodejs/node_modules/glob/node_modules/minimatch/test/extglob-ending-with-state-char.js +8 -0
  661. data/stdlib/nodejs/node_modules/glob/node_modules/once/LICENSE +27 -0
  662. data/stdlib/nodejs/node_modules/glob/node_modules/once/README.md +51 -0
  663. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/LICENSE +15 -0
  664. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/README.md +36 -0
  665. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/package.json +52 -0
  666. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/test/basic.js +51 -0
  667. data/stdlib/nodejs/node_modules/glob/node_modules/once/node_modules/wrappy/wrappy.js +33 -0
  668. data/stdlib/nodejs/node_modules/glob/node_modules/once/once.js +21 -0
  669. data/stdlib/nodejs/node_modules/glob/node_modules/once/package.json +60 -0
  670. data/stdlib/nodejs/node_modules/glob/node_modules/once/test/once.js +23 -0
  671. data/stdlib/nodejs/node_modules/glob/package.json +72 -0
  672. data/stdlib/nodejs/node_modules/glob/sync.js +409 -0
  673. data/stdlib/nodejs/node_modules/js-yaml/HISTORY.md +277 -0
  674. data/stdlib/nodejs/node_modules/js-yaml/LICENSE +21 -0
  675. data/stdlib/nodejs/node_modules/js-yaml/README.md +288 -0
  676. data/stdlib/nodejs/node_modules/js-yaml/bin/js-yaml.js +140 -0
  677. data/stdlib/nodejs/node_modules/js-yaml/bower.json +23 -0
  678. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.js +3666 -0
  679. data/stdlib/nodejs/node_modules/js-yaml/dist/js-yaml.min.js +3 -0
  680. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.js +102 -0
  681. data/stdlib/nodejs/node_modules/js-yaml/examples/custom_types.yml +18 -0
  682. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.js +31 -0
  683. data/stdlib/nodejs/node_modules/js-yaml/examples/dumper.json +22 -0
  684. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.js +18 -0
  685. data/stdlib/nodejs/node_modules/js-yaml/examples/sample_document.yml +197 -0
  686. data/stdlib/nodejs/node_modules/js-yaml/index.js +7 -0
  687. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml.js +39 -0
  688. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/common.js +62 -0
  689. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/dumper.js +554 -0
  690. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/exception.js +25 -0
  691. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/loader.js +1581 -0
  692. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/mark.js +78 -0
  693. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema.js +103 -0
  694. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
  695. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
  696. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
  697. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
  698. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
  699. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
  700. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/binary.js +133 -0
  701. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/bool.js +37 -0
  702. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/float.js +110 -0
  703. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/int.js +183 -0
  704. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/function.js +85 -0
  705. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +84 -0
  706. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +27 -0
  707. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
  708. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
  709. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/null.js +36 -0
  710. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/omap.js +56 -0
  711. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/pairs.js +61 -0
  712. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
  713. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/set.js +33 -0
  714. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
  715. data/stdlib/nodejs/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +98 -0
  716. data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esparse +117 -0
  717. data/stdlib/nodejs/node_modules/js-yaml/node_modules/.bin/esvalidate +177 -0
  718. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/HISTORY.md +115 -0
  719. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/LICENSE +21 -0
  720. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/README.md +239 -0
  721. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +36 -0
  722. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/choice.js +22 -0
  723. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/constants.js +59 -0
  724. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/help.js +13 -0
  725. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +33 -0
  726. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/parents.js +28 -0
  727. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +23 -0
  728. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +49 -0
  729. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/sum.js +35 -0
  730. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +270 -0
  731. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/index.js +1 -0
  732. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action.js +146 -0
  733. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +55 -0
  734. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +47 -0
  735. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +40 -0
  736. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +48 -0
  737. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +50 -0
  738. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +43 -0
  739. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +27 -0
  740. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +26 -0
  741. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +148 -0
  742. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +50 -0
  743. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +481 -0
  744. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +14 -0
  745. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +50 -0
  746. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +54 -0
  747. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +75 -0
  748. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +1168 -0
  749. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/const.js +18 -0
  750. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +88 -0
  751. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +798 -0
  752. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +77 -0
  753. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.npmignore +2 -0
  754. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +8 -0
  755. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +825 -0
  756. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/bower.json +33 -0
  757. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +11 -0
  758. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/foo.js +10 -0
  759. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/gulpfile.js +26 -0
  760. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +673 -0
  761. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +0 -0
  762. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +107 -0
  763. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +23 -0
  764. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +22 -0
  765. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +69 -0
  766. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +6 -0
  767. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +1415 -0
  768. data/stdlib/nodejs/node_modules/js-yaml/node_modules/argparse/package.json +62 -0
  769. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/README.md +73 -0
  770. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +117 -0
  771. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +177 -0
  772. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/esprima.js +3908 -0
  773. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/package.json +69 -0
  774. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/compat.js +239 -0
  775. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/reflect.js +422 -0
  776. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/run.js +66 -0
  777. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/runner.js +387 -0
  778. data/stdlib/nodejs/node_modules/js-yaml/node_modules/esprima/test/test.js +20238 -0
  779. data/stdlib/nodejs/node_modules/js-yaml/package.json +83 -0
  780. data/stdlib/nodejs/package.json +6 -0
  781. data/stdlib/nodejs/require.rb +30 -0
  782. data/stdlib/nodejs/rubygems.rb +68 -0
  783. data/stdlib/nodejs/yaml.rb +11 -0
  784. data/stdlib/observer.rb +202 -0
  785. data/stdlib/opal-parser.rb +54 -0
  786. data/stdlib/opal-source-maps.rb +2 -0
  787. data/stdlib/ostruct.rb +69 -0
  788. data/stdlib/pathname.rb +55 -0
  789. data/stdlib/phantomjs.rb +3 -0
  790. data/stdlib/pp.rb +35 -0
  791. data/stdlib/promise.rb +427 -0
  792. data/stdlib/racc/parser.rb +215 -0
  793. data/stdlib/rbconfig.rb +18 -0
  794. data/stdlib/securerandom.rb +12 -0
  795. data/stdlib/set.rb +170 -0
  796. data/stdlib/singleton.rb +40 -0
  797. data/stdlib/source_map.rb +5 -0
  798. data/stdlib/source_map/map.rb +220 -0
  799. data/stdlib/source_map/mapping.rb +26 -0
  800. data/stdlib/source_map/offset.rb +88 -0
  801. data/stdlib/source_map/version.rb +3 -0
  802. data/stdlib/source_map/vlq.rb +98 -0
  803. data/stdlib/sourcemap.rb +1 -0
  804. data/stdlib/stringio.rb +181 -0
  805. data/stdlib/strscan.rb +166 -0
  806. data/stdlib/template.rb +46 -0
  807. data/stdlib/thread.rb +164 -0
  808. data/stdlib/time.rb +9 -0
  809. data/stdlib/yaml.rb +1 -0
  810. data/tasks/benchmarking.rake +88 -0
  811. data/tasks/building.rake +58 -0
  812. data/tasks/documenting.rake +37 -0
  813. data/tasks/github.rake +19 -0
  814. data/tasks/linting.rake +18 -0
  815. data/tasks/testing.rake +125 -0
  816. data/vendored-minitest/minitest.rb +780 -0
  817. data/vendored-minitest/minitest/assertions.rb +662 -0
  818. data/vendored-minitest/minitest/autorun.rb +12 -0
  819. data/vendored-minitest/minitest/benchmark.rb +426 -0
  820. data/vendored-minitest/minitest/expectations.rb +281 -0
  821. data/vendored-minitest/minitest/hell.rb +11 -0
  822. data/vendored-minitest/minitest/mock.rb +220 -0
  823. data/vendored-minitest/minitest/parallel.rb +65 -0
  824. data/vendored-minitest/minitest/pride.rb +4 -0
  825. data/vendored-minitest/minitest/pride_plugin.rb +142 -0
  826. data/vendored-minitest/minitest/spec.rb +310 -0
  827. data/vendored-minitest/minitest/test.rb +293 -0
  828. data/vendored-minitest/minitest/unit.rb +45 -0
  829. data/vendored-minitest/test/unit.rb +28 -0
  830. metadata +1058 -0
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'opal/version'
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = 'opal-wedge'
8
+ s.version = Opal::VERSION
9
+ s.author = 'Adam Beynon'
10
+ s.email = 'adam.beynon@gmail.com'
11
+ s.homepage = 'http://opalrb.org'
12
+ s.summary = 'Ruby runtime and core library for JavaScript'
13
+ s.description = 'Ruby runtime and core library for JavaScript.'
14
+ s.license = 'MIT'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.require_paths = ['lib']
20
+
21
+ s.required_ruby_version = '>= 1.9.3'
22
+
23
+ s.add_dependency 'sourcemap', '~> 0.1.0'
24
+ s.add_dependency 'sprockets', '>= 2'
25
+ s.add_dependency 'hike', '~> 1.2'
26
+ s.add_dependency 'tilt', '>= 1.4'
27
+
28
+ s.add_development_dependency 'mspec', '1.5.20'
29
+ s.add_development_dependency 'rake'
30
+ s.add_development_dependency 'racc'
31
+ s.add_development_dependency 'rspec', '~> 2.99'
32
+ s.add_development_dependency 'octokit', '~> 2.4.0'
33
+ s.add_development_dependency 'bundler', '~> 1.5'
34
+ s.add_development_dependency 'yard', '~> 0.8.7'
35
+ s.add_development_dependency 'rack-test'
36
+ s.add_development_dependency 'opal-minitest'
37
+ end
@@ -0,0 +1,6 @@
1
+ # Opal corelib
2
+
3
+ This is the Opal corelib implementation API documentation.
4
+ The whole corelib is loaded upon `require 'opal'`.
5
+
6
+ The `runtime.js` documentation is [available here](runtime.js.html)
@@ -0,0 +1,2073 @@
1
+ require 'corelib/enumerable'
2
+
3
+ class Array
4
+ include Enumerable
5
+
6
+ # Mark all javascript arrays as being valid ruby arrays
7
+ `def.$$is_array = true`
8
+
9
+ def self.[](*objects)
10
+ objects
11
+ end
12
+
13
+ def initialize(*args)
14
+ self.class.new(*args)
15
+ end
16
+
17
+ def self.new(size = nil, obj = nil, &block)
18
+ if `arguments.length > 2`
19
+ raise ArgumentError, "wrong number of arguments (#{`arguments.length`} for 0..2)"
20
+ end
21
+
22
+ if `arguments.length === 0`
23
+ return []
24
+ end
25
+
26
+ if `arguments.length === 1`
27
+ if Array === size
28
+ return size.to_a
29
+ elsif size.respond_to? :to_ary
30
+ return size.to_ary
31
+ end
32
+ end
33
+
34
+ size = Opal.coerce_to size, Integer, :to_int
35
+
36
+ if `size < 0`
37
+ raise ArgumentError, "negative array size"
38
+ end
39
+
40
+ %x{
41
+ var result = [], i, value;
42
+
43
+ if (block === nil) {
44
+ for (i = 0; i < size; i++) {
45
+ result.push(obj);
46
+ }
47
+ }
48
+ else {
49
+ for (i = 0, value; i < size; i++) {
50
+ value = block(i);
51
+
52
+ if (value === $breaker) {
53
+ return $breaker.$v;
54
+ }
55
+
56
+ result[i] = value;
57
+ }
58
+ }
59
+
60
+ return result;
61
+ }
62
+ end
63
+
64
+ def self.try_convert(obj)
65
+ Opal.coerce_to? obj, Array, :to_ary
66
+ end
67
+
68
+ def &(other)
69
+ if Array === other
70
+ other = other.to_a
71
+ else
72
+ other = Opal.coerce_to(other, Array, :to_ary).to_a
73
+ end
74
+
75
+ %x{
76
+ var result = [], hash = #{{}}, i, length, item;
77
+
78
+ for (i = 0, length = other.length; i < length; i++) {
79
+ Opal.hash_put(hash, other[i], true);
80
+ }
81
+
82
+ for (i = 0, length = self.length; i < length; i++) {
83
+ item = self[i];
84
+ if (Opal.hash_delete(hash, item) !== undefined) {
85
+ result.push(item);
86
+ }
87
+ }
88
+
89
+ return result;
90
+ }
91
+ end
92
+
93
+ def |(other)
94
+ if Array === other
95
+ other = other.to_a
96
+ else
97
+ other = Opal.coerce_to(other, Array, :to_ary).to_a
98
+ end
99
+
100
+ %x{
101
+ var hash = #{{}}, i, length, item;
102
+
103
+ for (i = 0, length = self.length; i < length; i++) {
104
+ Opal.hash_put(hash, self[i], true);
105
+ }
106
+
107
+ for (i = 0, length = other.length; i < length; i++) {
108
+ Opal.hash_put(hash, other[i], true);
109
+ }
110
+
111
+ return hash.$keys();
112
+ }
113
+ end
114
+
115
+ def *(other)
116
+ return join(other.to_str) if other.respond_to? :to_str
117
+
118
+ unless other.respond_to? :to_int
119
+ raise TypeError, "no implicit conversion of #{other.class} into Integer"
120
+ end
121
+
122
+ other = Opal.coerce_to other, Integer, :to_int
123
+
124
+ if `other < 0`
125
+ raise ArgumentError, "negative argument"
126
+ end
127
+
128
+ %x{
129
+ var result = [];
130
+
131
+ for (var i = 0; i < other; i++) {
132
+ result = result.concat(self);
133
+ }
134
+
135
+ return result;
136
+ }
137
+ end
138
+
139
+ def +(other)
140
+ if Array === other
141
+ other = other.to_a
142
+ else
143
+ other = Opal.coerce_to(other, Array, :to_ary).to_a
144
+ end
145
+
146
+ `self.concat(other)`
147
+ end
148
+
149
+ def -(other)
150
+ if Array === other
151
+ other = other.to_a
152
+ else
153
+ other = Opal.coerce_to(other, Array, :to_ary).to_a
154
+ end
155
+
156
+ return [] if `self.length === 0`
157
+ return clone if `other.length === 0`
158
+
159
+ %x{
160
+ var result = [], hash = #{{}}, i, length, item;
161
+
162
+ for (i = 0, length = other.length; i < length; i++) {
163
+ Opal.hash_put(hash, other[i], true);
164
+ }
165
+
166
+ for (i = 0, length = self.length; i < length; i++) {
167
+ item = self[i];
168
+ if (Opal.hash_get(hash, item) === undefined) {
169
+ result.push(item);
170
+ }
171
+ }
172
+
173
+ return result;
174
+ }
175
+ end
176
+
177
+ def <<(object)
178
+ `self.push(object);`
179
+
180
+ self
181
+ end
182
+
183
+ def <=>(other)
184
+ if Array === other
185
+ other = other.to_a
186
+ elsif other.respond_to? :to_ary
187
+ other = other.to_ary.to_a
188
+ else
189
+ return
190
+ end
191
+
192
+ %x{
193
+ if (#{hash} === #{other.hash}) {
194
+ return 0;
195
+ }
196
+
197
+ if (self.length != other.length) {
198
+ return (self.length > other.length) ? 1 : -1;
199
+ }
200
+
201
+ for (var i = 0, length = self.length; i < length; i++) {
202
+ var tmp = #{`self[i]` <=> `other[i]`};
203
+
204
+ if (tmp !== 0) {
205
+ return tmp;
206
+ }
207
+ }
208
+
209
+ return 0;
210
+ }
211
+ end
212
+
213
+ def ==(other)
214
+ %x{
215
+ var recursed = {};
216
+
217
+ function _eqeq(array, other) {
218
+ var i, length, a, b;
219
+
220
+ if (!other.$$is_array) {
221
+ if (#{Opal.respond_to? `other`, :to_ary}) {
222
+ return #{`other` == `array`};
223
+ } else {
224
+ return false;
225
+ }
226
+ }
227
+
228
+ other = #{other.to_a};
229
+
230
+ if (array.length !== other.length) {
231
+ return false;
232
+ }
233
+
234
+ recursed[#{`array`.object_id}] = true;
235
+
236
+ for (i = 0, length = array.length; i < length; i++) {
237
+ a = array[i];
238
+ b = other[i];
239
+ if (a.$$is_array) {
240
+ if (b.$$is_array && b.length !== a.length) {
241
+ return false;
242
+ }
243
+ if (!recursed.hasOwnProperty(#{`a`.object_id})) {
244
+ if (!_eqeq(a, b)) {
245
+ return false;
246
+ }
247
+ }
248
+ } else {
249
+ if (!#{`a` == `b`}) {
250
+ return false;
251
+ }
252
+ }
253
+ }
254
+
255
+ return true;
256
+ }
257
+
258
+ return _eqeq(self, other);
259
+ }
260
+ end
261
+
262
+ def [](index, length = undefined)
263
+ %x{
264
+ var size = self.length,
265
+ exclude, from, to;
266
+
267
+ if (index.$$is_range) {
268
+ exclude = index.exclude;
269
+ from = #{Opal.coerce_to `index.begin`, Integer, :to_int};
270
+ to = #{Opal.coerce_to `index.end`, Integer, :to_int};
271
+
272
+ if (from < 0) {
273
+ from += size;
274
+
275
+ if (from < 0) {
276
+ return nil;
277
+ }
278
+ }
279
+
280
+ if (from > size) {
281
+ return nil;
282
+ }
283
+
284
+ if (to < 0) {
285
+ to += size;
286
+
287
+ if (to < 0) {
288
+ return [];
289
+ }
290
+ }
291
+
292
+ if (!exclude) {
293
+ to += 1;
294
+ }
295
+
296
+ return self.slice(from, to);
297
+ }
298
+ else {
299
+ index = #{Opal.coerce_to(index, Integer, :to_int)};
300
+
301
+ if (index < 0) {
302
+ index += size;
303
+
304
+ if (index < 0) {
305
+ return nil;
306
+ }
307
+ }
308
+
309
+ if (length === undefined) {
310
+ if (index >= size || index < 0) {
311
+ return nil;
312
+ }
313
+
314
+ return self[index];
315
+ }
316
+ else {
317
+ length = #{Opal.coerce_to length, Integer, :to_int};
318
+
319
+ if (length < 0 || index > size || index < 0) {
320
+ return nil;
321
+ }
322
+
323
+ return self.slice(index, index + length);
324
+ }
325
+ }
326
+ }
327
+ end
328
+
329
+ def []=(index, value, extra = undefined)
330
+ %x{
331
+ var i, size = self.length;
332
+ }
333
+
334
+ if Range === index
335
+ if Array === value
336
+ data = value.to_a
337
+ elsif value.respond_to? :to_ary
338
+ data = value.to_ary.to_a
339
+ else
340
+ data = [value]
341
+ end
342
+
343
+ %x{
344
+ var exclude = index.exclude,
345
+ from = #{Opal.coerce_to `index.begin`, Integer, :to_int},
346
+ to = #{Opal.coerce_to `index.end`, Integer, :to_int};
347
+
348
+ if (from < 0) {
349
+ from += size;
350
+
351
+ if (from < 0) {
352
+ #{raise RangeError, "#{index.inspect} out of range"};
353
+ }
354
+ }
355
+
356
+ if (to < 0) {
357
+ to += size;
358
+ }
359
+
360
+ if (!exclude) {
361
+ to += 1;
362
+ }
363
+
364
+ if (from > size) {
365
+ for (i = size; i < from; i++) {
366
+ self[i] = nil;
367
+ }
368
+ }
369
+
370
+ if (to < 0) {
371
+ self.splice.apply(self, [from, 0].concat(data));
372
+ }
373
+ else {
374
+ self.splice.apply(self, [from, to - from].concat(data));
375
+ }
376
+
377
+ return value;
378
+ }
379
+ else
380
+ if `extra === undefined`
381
+ length = 1
382
+ else
383
+ length = value
384
+ value = extra
385
+
386
+ if Array === value
387
+ data = value.to_a
388
+ elsif value.respond_to? :to_ary
389
+ data = value.to_ary.to_a
390
+ else
391
+ data = [value]
392
+ end
393
+ end
394
+
395
+ %x{
396
+ var old;
397
+
398
+ index = #{Opal.coerce_to index, Integer, :to_int};
399
+ length = #{Opal.coerce_to length, Integer, :to_int};
400
+
401
+ if (index < 0) {
402
+ old = index;
403
+ index += size;
404
+
405
+ if (index < 0) {
406
+ #{raise IndexError, "index #{`old`} too small for array; minimum #{`-self.length`}"};
407
+ }
408
+ }
409
+
410
+ if (length < 0) {
411
+ #{raise IndexError, "negative length (#{length})"}
412
+ }
413
+
414
+ if (index > size) {
415
+ for (i = size; i < index; i++) {
416
+ self[i] = nil;
417
+ }
418
+ }
419
+
420
+ if (extra === undefined) {
421
+ self[index] = value;
422
+ }
423
+ else {
424
+ self.splice.apply(self, [index, length].concat(data));
425
+ }
426
+
427
+ return value;
428
+ }
429
+ end
430
+ end
431
+
432
+ def assoc(object)
433
+ %x{
434
+ for (var i = 0, length = self.length, item; i < length; i++) {
435
+ if (item = self[i], item.length && #{`item[0]` == object}) {
436
+ return item;
437
+ }
438
+ }
439
+
440
+ return nil;
441
+ }
442
+ end
443
+
444
+ def at(index)
445
+ index = Opal.coerce_to index, Integer, :to_int
446
+
447
+ %x{
448
+ if (index < 0) {
449
+ index += self.length;
450
+ }
451
+
452
+ if (index < 0 || index >= self.length) {
453
+ return nil;
454
+ }
455
+
456
+ return self[index];
457
+ }
458
+ end
459
+
460
+ def bsearch(&block)
461
+ return enum_for :bsearch unless block_given?
462
+
463
+ %x{
464
+ var min = 0,
465
+ max = self.length,
466
+ mid,
467
+ val,
468
+ ret,
469
+ smaller = false,
470
+ satisfied = nil;
471
+
472
+ while (min < max) {
473
+ mid = min + Math.floor((max - min) / 2);
474
+ val = self[mid];
475
+ ret = block(val);
476
+
477
+ if (ret === $breaker) {
478
+ return $breaker.$v;
479
+ }
480
+ else if (ret === true) {
481
+ satisfied = val;
482
+ smaller = true;
483
+ }
484
+ else if (ret === false || ret === nil) {
485
+ smaller = false;
486
+ }
487
+ else if (ret.$$is_number) {
488
+ if (ret === 0) { return val; }
489
+ smaller = (ret < 0);
490
+ }
491
+ else {
492
+ #{raise TypeError, "wrong argument type #{`ret`.class} (must be numeric, true, false or nil)"}
493
+ }
494
+
495
+ if (smaller) { max = mid; } else { min = mid + 1; }
496
+ }
497
+
498
+ return satisfied;
499
+ }
500
+ end
501
+
502
+ def cycle(n = nil, &block)
503
+ return enum_for(:cycle, n) {
504
+ if n == nil
505
+ Float::INFINITY
506
+ else
507
+ n = Opal.coerce_to!(n, Integer, :to_int)
508
+ n > 0 ? self.enumerator_size * n : 0
509
+ end
510
+ } unless block_given?
511
+
512
+ return if empty? || n == 0
513
+
514
+ %x{
515
+ var i, length, value;
516
+
517
+ if (n === nil) {
518
+ while (true) {
519
+ for (i = 0, length = self.length; i < length; i++) {
520
+ value = Opal.yield1(block, self[i]);
521
+
522
+ if (value === $breaker) {
523
+ return $breaker.$v;
524
+ }
525
+ }
526
+ }
527
+ }
528
+ else {
529
+ n = #{Opal.coerce_to!(n, Integer, :to_int)};
530
+ if (n <= 0) {
531
+ return self;
532
+ }
533
+
534
+ while (n > 0) {
535
+ for (i = 0, length = self.length; i < length; i++) {
536
+ value = Opal.yield1(block, self[i]);
537
+
538
+ if (value === $breaker) {
539
+ return $breaker.$v;
540
+ }
541
+ }
542
+
543
+ n--;
544
+ }
545
+ }
546
+ }
547
+
548
+ self
549
+ end
550
+
551
+ def clear
552
+ `self.splice(0, self.length)`
553
+
554
+ self
555
+ end
556
+
557
+ def clone
558
+ copy = []
559
+ copy.initialize_clone(self)
560
+ copy
561
+ end
562
+
563
+ def dup
564
+ copy = []
565
+ copy.initialize_dup(self)
566
+ copy
567
+ end
568
+
569
+ def initialize_copy(other)
570
+ replace other
571
+ end
572
+
573
+ def collect(&block)
574
+ return enum_for(:collect){self.size} unless block_given?
575
+
576
+ %x{
577
+ var result = [];
578
+
579
+ for (var i = 0, length = self.length; i < length; i++) {
580
+ var value = Opal.yield1(block, self[i]);
581
+
582
+ if (value === $breaker) {
583
+ return $breaker.$v;
584
+ }
585
+
586
+ result.push(value);
587
+ }
588
+
589
+ return result;
590
+ }
591
+ end
592
+
593
+ def collect!(&block)
594
+ return enum_for(:collect!){self.size} unless block_given?
595
+
596
+ %x{
597
+ for (var i = 0, length = self.length; i < length; i++) {
598
+ var value = Opal.yield1(block, self[i]);
599
+
600
+ if (value === $breaker) {
601
+ return $breaker.$v;
602
+ }
603
+
604
+ self[i] = value;
605
+ }
606
+ }
607
+
608
+ self
609
+ end
610
+
611
+ def combination(n)
612
+ num = Opal.coerce_to! n, Integer, :to_int
613
+ return enum_for(:combination, num){self.size} unless block_given?
614
+
615
+ %x{
616
+ var i, length, stack, chosen, lev, done, next;
617
+
618
+ if (num === 0) {
619
+ #{yield []}
620
+ } else if (num === 1) {
621
+ for (i = 0, length = self.length; i < length; i++) {
622
+ #{yield `[self[i]]`}
623
+ }
624
+ }
625
+ else if (num === self.length) {
626
+ #{yield `self.slice()`}
627
+ }
628
+ else if (num >= 0 && num < self.length) {
629
+ stack = [];
630
+ for (i = 0; i <= num + 1; i++) {
631
+ stack.push(0);
632
+ }
633
+
634
+ chosen = [];
635
+ lev = 0;
636
+ done = false;
637
+ stack[0] = -1;
638
+
639
+ while (!done) {
640
+ chosen[lev] = self[stack[lev+1]];
641
+ while (lev < num - 1) {
642
+ lev++;
643
+ next = stack[lev+1] = stack[lev] + 1;
644
+ chosen[lev] = self[next];
645
+ }
646
+ #{ yield `chosen.slice()` }
647
+ lev++;
648
+ do {
649
+ done = (lev === 0);
650
+ stack[lev]++;
651
+ lev--;
652
+ } while ( stack[lev+1] + num === self.length + lev + 1 );
653
+ }
654
+ }
655
+ }
656
+ self
657
+ end
658
+
659
+ def compact
660
+ %x{
661
+ var result = [];
662
+
663
+ for (var i = 0, length = self.length, item; i < length; i++) {
664
+ if ((item = self[i]) !== nil) {
665
+ result.push(item);
666
+ }
667
+ }
668
+
669
+ return result;
670
+ }
671
+ end
672
+
673
+ def compact!
674
+ %x{
675
+ var original = self.length;
676
+
677
+ for (var i = 0, length = self.length; i < length; i++) {
678
+ if (self[i] === nil) {
679
+ self.splice(i, 1);
680
+
681
+ length--;
682
+ i--;
683
+ }
684
+ }
685
+
686
+ return self.length === original ? nil : self;
687
+ }
688
+ end
689
+
690
+ def concat(other)
691
+ if Array === other
692
+ other = other.to_a
693
+ else
694
+ other = Opal.coerce_to(other, Array, :to_ary).to_a
695
+ end
696
+
697
+ %x{
698
+ for (var i = 0, length = other.length; i < length; i++) {
699
+ self.push(other[i]);
700
+ }
701
+ }
702
+
703
+ self
704
+ end
705
+
706
+ def delete(object)
707
+ %x{
708
+ var original = self.length;
709
+
710
+ for (var i = 0, length = original; i < length; i++) {
711
+ if (#{`self[i]` == object}) {
712
+ self.splice(i, 1);
713
+
714
+ length--;
715
+ i--;
716
+ }
717
+ }
718
+
719
+ if (self.length === original) {
720
+ if (#{block_given?}) {
721
+ return #{yield};
722
+ }
723
+ return nil;
724
+ }
725
+ return object;
726
+ }
727
+ end
728
+
729
+ def delete_at(index)
730
+ %x{
731
+ index = #{Opal.coerce_to `index`, Integer, :to_int};
732
+
733
+ if (index < 0) {
734
+ index += self.length;
735
+ }
736
+
737
+ if (index < 0 || index >= self.length) {
738
+ return nil;
739
+ }
740
+
741
+ var result = self[index];
742
+
743
+ self.splice(index, 1);
744
+
745
+ return result;
746
+ }
747
+ end
748
+
749
+ def delete_if(&block)
750
+ return enum_for(:delete_if){self.size} unless block_given?
751
+
752
+ %x{
753
+ for (var i = 0, length = self.length, value; i < length; i++) {
754
+ if ((value = block(self[i])) === $breaker) {
755
+ return $breaker.$v;
756
+ }
757
+
758
+ if (value !== false && value !== nil) {
759
+ self.splice(i, 1);
760
+
761
+ length--;
762
+ i--;
763
+ }
764
+ }
765
+ }
766
+
767
+ self
768
+ end
769
+
770
+ def drop(number)
771
+ %x{
772
+ if (number < 0) {
773
+ #{raise ArgumentError}
774
+ }
775
+
776
+ return self.slice(number);
777
+ }
778
+ end
779
+
780
+ alias dup clone
781
+
782
+ def each(&block)
783
+ return enum_for(:each){self.size} unless block_given?
784
+
785
+ %x{
786
+ for (var i = 0, length = self.length; i < length; i++) {
787
+ var value = Opal.yield1(block, self[i]);
788
+
789
+ if (value == $breaker) {
790
+ return $breaker.$v;
791
+ }
792
+ }
793
+ }
794
+
795
+ self
796
+ end
797
+
798
+ def each_index(&block)
799
+ return enum_for(:each_index){self.size} unless block_given?
800
+
801
+ %x{
802
+ for (var i = 0, length = self.length; i < length; i++) {
803
+ var value = Opal.yield1(block, i);
804
+
805
+ if (value === $breaker) {
806
+ return $breaker.$v;
807
+ }
808
+ }
809
+ }
810
+
811
+ self
812
+ end
813
+
814
+ def empty?
815
+ `self.length === 0`
816
+ end
817
+
818
+ def eql?(other)
819
+ %x{
820
+ var recursed = {};
821
+
822
+ function _eql(array, other) {
823
+ var i, length, a, b;
824
+
825
+ if (!other.$$is_array) {
826
+ return false;
827
+ }
828
+
829
+ other = #{other.to_a};
830
+
831
+ if (array.length !== other.length) {
832
+ return false;
833
+ }
834
+
835
+ recursed[#{`array`.object_id}] = true;
836
+
837
+ for (i = 0, length = array.length; i < length; i++) {
838
+ a = array[i];
839
+ b = other[i];
840
+ if (a.$$is_array) {
841
+ if (b.$$is_array && b.length !== a.length) {
842
+ return false;
843
+ }
844
+ if (!recursed.hasOwnProperty(#{`a`.object_id})) {
845
+ if (!_eql(a, b)) {
846
+ return false;
847
+ }
848
+ }
849
+ } else {
850
+ if (!#{`a`.eql?(`b`)}) {
851
+ return false;
852
+ }
853
+ }
854
+ }
855
+
856
+ return true;
857
+ }
858
+
859
+ return _eql(self, other);
860
+ }
861
+ end
862
+
863
+ def fetch(index, defaults = undefined, &block)
864
+ %x{
865
+ var original = index;
866
+
867
+ index = #{Opal.coerce_to `index`, Integer, :to_int};
868
+
869
+ if (index < 0) {
870
+ index += self.length;
871
+ }
872
+
873
+ if (index >= 0 && index < self.length) {
874
+ return self[index];
875
+ }
876
+
877
+ if (block !== nil) {
878
+ return block(original);
879
+ }
880
+
881
+ if (defaults != null) {
882
+ return defaults;
883
+ }
884
+
885
+ if (self.length === 0) {
886
+ #{raise IndexError, "index #{`original`} outside of array bounds: 0...0"}
887
+ }
888
+ else {
889
+ #{raise IndexError, "index #{`original`} outside of array bounds: -#{`self.length`}...#{`self.length`}"};
890
+ }
891
+ }
892
+ end
893
+
894
+ def fill(*args, &block)
895
+ %x{
896
+ var i, length, value;
897
+ }
898
+
899
+ if block
900
+ if `args.length > 2`
901
+ raise ArgumentError, "wrong number of arguments (#{args.length} for 0..2)"
902
+ end
903
+
904
+ one, two = args
905
+ else
906
+ if `args.length == 0`
907
+ raise ArgumentError, "wrong number of arguments (0 for 1..3)"
908
+ elsif `args.length > 3`
909
+ raise ArgumentError, "wrong number of arguments (#{args.length} for 1..3)"
910
+ end
911
+
912
+ obj, one, two = args
913
+ end
914
+
915
+ if Range === one
916
+ raise TypeError, "length invalid with range" if two
917
+
918
+ left = Opal.coerce_to one.begin, Integer, :to_int
919
+ `left += #@length` if `left < 0`
920
+ raise RangeError, "#{one.inspect} out of range" if `left < 0`
921
+
922
+ right = Opal.coerce_to one.end, Integer, :to_int
923
+ `right += #@length` if `right < 0`
924
+ `right += 1` unless one.exclude_end?
925
+
926
+ return self if `right <= left`
927
+ elsif one
928
+ left = Opal.coerce_to one, Integer, :to_int
929
+ `left += #@length` if `left < 0`
930
+ left = 0 if `left < 0`
931
+
932
+ if two
933
+ right = Opal.coerce_to two, Integer, :to_int
934
+
935
+ return self if `right == 0`
936
+
937
+ `right += left`
938
+ else
939
+ right = @length
940
+ end
941
+ else
942
+ left = 0
943
+ right = @length
944
+ end
945
+
946
+ if `left > #@length`
947
+ %x{
948
+ for (i = #@length; i < right; i++) {
949
+ self[i] = nil;
950
+ }
951
+ }
952
+ end
953
+
954
+ if `right > #@length`
955
+ @length = right
956
+ end
957
+
958
+ if block
959
+ %x{
960
+ for (length = #@length; left < right; left++) {
961
+ value = block(left);
962
+
963
+ if (value === $breaker) {
964
+ return $breaker.$v;
965
+ }
966
+
967
+ self[left] = value;
968
+ }
969
+ }
970
+ else
971
+ %x{
972
+ for (length = #@length; left < right; left++) {
973
+ self[left] = #{obj};
974
+ }
975
+ }
976
+ end
977
+
978
+ self
979
+ end
980
+
981
+ def first(count = undefined)
982
+ %x{
983
+ if (count == null) {
984
+ return self.length === 0 ? nil : self[0];
985
+ }
986
+
987
+ count = #{Opal.coerce_to `count`, Integer, :to_int};
988
+
989
+ if (count < 0) {
990
+ #{raise ArgumentError, 'negative array size'};
991
+ }
992
+
993
+ return self.slice(0, count);
994
+ }
995
+ end
996
+
997
+ def flatten(level = undefined)
998
+ %x{
999
+ var object_id = #{`self`.object_id};
1000
+
1001
+ function _flatten(array, level) {
1002
+ var result = [],
1003
+ i, length,
1004
+ item, ary;
1005
+
1006
+ array = #{`array`.to_a};
1007
+
1008
+ for (i = 0, length = array.length; i < length; i++) {
1009
+ item = array[i];
1010
+
1011
+ if (!#{Opal.respond_to? `item`, :to_ary}) {
1012
+ result.push(item);
1013
+ continue;
1014
+ }
1015
+
1016
+ ary = #{`item`.to_ary};
1017
+
1018
+ if (ary === nil) {
1019
+ result.push(item);
1020
+ continue;
1021
+ }
1022
+
1023
+ if (!ary.$$is_array) {
1024
+ #{raise TypeError};
1025
+ }
1026
+
1027
+ if (object_id === #{`ary`.object_id}) {
1028
+ #{raise ArgumentError};
1029
+ }
1030
+
1031
+ switch (level) {
1032
+ case undefined:
1033
+ result.push.apply(result, _flatten(ary));
1034
+ break;
1035
+ case 0:
1036
+ result.push(ary);
1037
+ break;
1038
+ default:
1039
+ result.push.apply(result, _flatten(ary, level - 1));
1040
+ }
1041
+ }
1042
+ return result;
1043
+ }
1044
+
1045
+ if (level !== undefined) {
1046
+ level = #{Opal.coerce_to(`level`, Integer, :to_int)};
1047
+ }
1048
+
1049
+ return _flatten(self, level);
1050
+ }
1051
+ end
1052
+
1053
+ def flatten!(level = undefined)
1054
+ %x{
1055
+ var flattened = #{flatten level};
1056
+
1057
+ if (self.length == flattened.length) {
1058
+ for (var i = 0, length = self.length; i < length; i++) {
1059
+ if (self[i] !== flattened[i]) {
1060
+ break;
1061
+ }
1062
+ }
1063
+
1064
+ if (i == length) {
1065
+ return nil;
1066
+ }
1067
+ }
1068
+
1069
+ #{replace `flattened`};
1070
+ }
1071
+
1072
+ self
1073
+ end
1074
+
1075
+ def hash
1076
+ %x{
1077
+ var hash = ['A'],
1078
+ item;
1079
+ for (var i = 0, length = self.length; i < length; i++) {
1080
+ item = self[i];
1081
+ if (item.$$is_array && #{`self`.eql?(`item`)}) {
1082
+ hash.push('self');
1083
+ } else {
1084
+ hash.push(item.$hash());
1085
+ }
1086
+ }
1087
+ return hash.join(',');
1088
+ }
1089
+ end
1090
+
1091
+ def include?(member)
1092
+ %x{
1093
+ for (var i = 0, length = self.length; i < length; i++) {
1094
+ if (#{`self[i]` == member}) {
1095
+ return true;
1096
+ }
1097
+ }
1098
+
1099
+ return false;
1100
+ }
1101
+ end
1102
+
1103
+ def index(object=undefined, &block)
1104
+ %x{
1105
+ var i, length, value;
1106
+
1107
+ if (object != null) {
1108
+ for (i = 0, length = self.length; i < length; i++) {
1109
+ if (#{`self[i]` == object}) {
1110
+ return i;
1111
+ }
1112
+ }
1113
+ }
1114
+ else if (block !== nil) {
1115
+ for (i = 0, length = self.length; i < length; i++) {
1116
+ if ((value = block(self[i])) === $breaker) {
1117
+ return $breaker.$v;
1118
+ }
1119
+
1120
+ if (value !== false && value !== nil) {
1121
+ return i;
1122
+ }
1123
+ }
1124
+ }
1125
+ else {
1126
+ return #{enum_for :index};
1127
+ }
1128
+
1129
+ return nil;
1130
+ }
1131
+ end
1132
+
1133
+ def insert(index, *objects)
1134
+ %x{
1135
+ index = #{Opal.coerce_to `index`, Integer, :to_int};
1136
+
1137
+ if (objects.length > 0) {
1138
+ if (index < 0) {
1139
+ index += self.length + 1;
1140
+
1141
+ if (index < 0) {
1142
+ #{ raise IndexError, "#{index} is out of bounds" };
1143
+ }
1144
+ }
1145
+ if (index > self.length) {
1146
+ for (var i = self.length; i < index; i++) {
1147
+ self.push(nil);
1148
+ }
1149
+ }
1150
+
1151
+ self.splice.apply(self, [index, 0].concat(objects));
1152
+ }
1153
+ }
1154
+
1155
+ self
1156
+ end
1157
+
1158
+ def inspect
1159
+ %x{
1160
+ var result = [],
1161
+ id = #{__id__};
1162
+
1163
+ for (var i = 0, length = self.length; i < length; i++) {
1164
+ var item = #{self[`i`]};
1165
+
1166
+ if (#{`item`.__id__} === id) {
1167
+ result.push('[...]');
1168
+ }
1169
+ else {
1170
+ result.push(#{`item`.inspect});
1171
+ }
1172
+ }
1173
+
1174
+ return '[' + result.join(', ') + ']';
1175
+ }
1176
+ end
1177
+
1178
+ def join(sep = nil)
1179
+ return "" if `self.length === 0`
1180
+
1181
+ if `sep === nil`
1182
+ sep = $,
1183
+ end
1184
+
1185
+ %x{
1186
+ var result = [];
1187
+ var object_id = #{`self`.object_id}, i, length, item, tmp;
1188
+
1189
+ for (i = 0, length = self.length; i < length; i++) {
1190
+ item = self[i];
1191
+
1192
+ if (#{Opal.respond_to? `item`, :to_str}) {
1193
+ tmp = #{`item`.to_str};
1194
+
1195
+ if (tmp !== nil) {
1196
+ result.push(#{`tmp`.to_s});
1197
+
1198
+ continue;
1199
+ }
1200
+ }
1201
+
1202
+ if (#{Opal.respond_to? `item`, :to_ary}) {
1203
+ tmp = #{`item`.to_ary};
1204
+
1205
+ if (object_id === #{`tmp`.object_id}) {
1206
+ #{raise ArgumentError};
1207
+ }
1208
+
1209
+ if (tmp !== nil) {
1210
+ result.push(#{`tmp`.join(sep)});
1211
+
1212
+ continue;
1213
+ }
1214
+ }
1215
+
1216
+ if (#{Opal.respond_to? `item`, :to_s}) {
1217
+ tmp = #{`item`.to_s};
1218
+
1219
+ if (tmp !== nil) {
1220
+ result.push(tmp);
1221
+
1222
+ continue;
1223
+ }
1224
+ }
1225
+
1226
+ #{raise NoMethodError, "#{Opal.inspect(`item`)} doesn't respond to #to_str, #to_ary or #to_s"};
1227
+ }
1228
+
1229
+ if (sep === nil) {
1230
+ return result.join('');
1231
+ }
1232
+ else {
1233
+ return result.join(#{Opal.coerce_to!(sep, String, :to_str).to_s});
1234
+ }
1235
+ }
1236
+ end
1237
+
1238
+ def keep_if(&block)
1239
+ return enum_for(:keep_if){self.size} unless block_given?
1240
+
1241
+ %x{
1242
+ for (var i = 0, length = self.length, value; i < length; i++) {
1243
+ if ((value = block(self[i])) === $breaker) {
1244
+ return $breaker.$v;
1245
+ }
1246
+
1247
+ if (value === false || value === nil) {
1248
+ self.splice(i, 1);
1249
+
1250
+ length--;
1251
+ i--;
1252
+ }
1253
+ }
1254
+ }
1255
+
1256
+ self
1257
+ end
1258
+
1259
+ def last(count = undefined)
1260
+ %x{
1261
+ if (count == null) {
1262
+ return self.length === 0 ? nil : self[self.length - 1];
1263
+ }
1264
+
1265
+ count = #{Opal.coerce_to `count`, Integer, :to_int};
1266
+
1267
+ if (count < 0) {
1268
+ #{raise ArgumentError, 'negative array size'};
1269
+ }
1270
+
1271
+ if (count > self.length) {
1272
+ count = self.length;
1273
+ }
1274
+
1275
+ return self.slice(self.length - count, self.length);
1276
+ }
1277
+ end
1278
+
1279
+ def length
1280
+ `self.length`
1281
+ end
1282
+
1283
+ alias map collect
1284
+
1285
+ alias map! collect!
1286
+
1287
+ def permutation(num = undefined, &block)
1288
+ return enum_for(:permutation, num){self.size} unless block_given?
1289
+
1290
+ %x{
1291
+ var permute, offensive, output;
1292
+
1293
+ if (num === undefined) {
1294
+ num = self.length;
1295
+ }
1296
+ else {
1297
+ num = #{ Opal.coerce_to num, Integer, :to_int }
1298
+ }
1299
+
1300
+ if (num < 0 || self.length < num) {
1301
+ // no permutations, yield nothing
1302
+ }
1303
+ else if (num === 0) {
1304
+ // exactly one permutation: the zero-length array
1305
+ #{ yield [] }
1306
+ }
1307
+ else if (num === 1) {
1308
+ // this is a special, easy case
1309
+ for (var i = 0; i < self.length; i++) {
1310
+ #{ yield `[self[i]]` }
1311
+ }
1312
+ }
1313
+ else {
1314
+ // this is the general case
1315
+ #{ perm = Array.new(num) }
1316
+ #{ used = Array.new(`self.length`, false) }
1317
+
1318
+ permute = function(num, perm, index, used, blk) {
1319
+ self = this;
1320
+ for(var i = 0; i < self.length; i++){
1321
+ if(#{ !used[`i`] }) {
1322
+ perm[index] = i;
1323
+ if(index < num - 1) {
1324
+ used[i] = true;
1325
+ permute.call(self, num, perm, index + 1, used, blk);
1326
+ used[i] = false;
1327
+ }
1328
+ else {
1329
+ output = [];
1330
+ for (var j = 0; j < perm.length; j++) {
1331
+ output.push(self[perm[j]]);
1332
+ }
1333
+ Opal.yield1(blk, output);
1334
+ }
1335
+ }
1336
+ }
1337
+ }
1338
+
1339
+ if (#{block_given?}) {
1340
+ // offensive (both definitions) copy.
1341
+ offensive = self.slice();
1342
+ permute.call(offensive, num, perm, 0, used, block);
1343
+ }
1344
+ else {
1345
+ permute.call(self, num, perm, 0, used, block);
1346
+ }
1347
+ }
1348
+ }
1349
+
1350
+ self
1351
+ end
1352
+
1353
+ def pop(count = undefined)
1354
+ if `count === undefined`
1355
+ return if `self.length === 0`
1356
+ return `self.pop()`
1357
+ end
1358
+
1359
+ count = Opal.coerce_to count, Integer, :to_int
1360
+
1361
+ if `count < 0`
1362
+ raise ArgumentError, 'negative array size'
1363
+ end
1364
+
1365
+ return [] if `self.length === 0`
1366
+
1367
+ if `count > self.length`
1368
+ `self.splice(0, self.length)`
1369
+ else
1370
+ `self.splice(self.length - count, self.length)`
1371
+ end
1372
+ end
1373
+
1374
+ def product(*args, &block)
1375
+ %x{
1376
+ var result = #{block_given?} ? null : [],
1377
+ n = args.length + 1,
1378
+ counters = new Array(n),
1379
+ lengths = new Array(n),
1380
+ arrays = new Array(n),
1381
+ i, m, subarray, len, resultlen = 1;
1382
+
1383
+ arrays[0] = self;
1384
+ for (i = 1; i < n; i++) {
1385
+ arrays[i] = #{Opal.coerce_to(`args[i - 1]`, Array, :to_ary)};
1386
+ }
1387
+
1388
+ for (i = 0; i < n; i++) {
1389
+ len = arrays[i].length;
1390
+ if (len === 0) {
1391
+ return result || self;
1392
+ }
1393
+ resultlen *= len;
1394
+ if (resultlen > 2147483647) {
1395
+ #{raise RangeError, "too big to product"}
1396
+ }
1397
+ lengths[i] = len;
1398
+ counters[i] = 0;
1399
+ }
1400
+
1401
+ outer_loop: for (;;) {
1402
+ subarray = [];
1403
+ for (i = 0; i < n; i++) {
1404
+ subarray.push(arrays[i][counters[i]]);
1405
+ }
1406
+ if (result) {
1407
+ result.push(subarray);
1408
+ } else {
1409
+ #{yield `subarray`}
1410
+ }
1411
+ m = n - 1;
1412
+ counters[m]++;
1413
+ while (counters[m] === lengths[m]) {
1414
+ counters[m] = 0;
1415
+ if (--m < 0) break outer_loop;
1416
+ counters[m]++;
1417
+ }
1418
+ }
1419
+
1420
+ return result || self;
1421
+ }
1422
+ end
1423
+
1424
+ def push(*objects)
1425
+ %x{
1426
+ for (var i = 0, length = objects.length; i < length; i++) {
1427
+ self.push(objects[i]);
1428
+ }
1429
+ }
1430
+
1431
+ self
1432
+ end
1433
+
1434
+ def rassoc(object)
1435
+ %x{
1436
+ for (var i = 0, length = self.length, item; i < length; i++) {
1437
+ item = self[i];
1438
+
1439
+ if (item.length && item[1] !== undefined) {
1440
+ if (#{`item[1]` == object}) {
1441
+ return item;
1442
+ }
1443
+ }
1444
+ }
1445
+
1446
+ return nil;
1447
+ }
1448
+ end
1449
+
1450
+ def reject(&block)
1451
+ return enum_for(:reject){self.size} unless block_given?
1452
+
1453
+ %x{
1454
+ var result = [];
1455
+
1456
+ for (var i = 0, length = self.length, value; i < length; i++) {
1457
+ if ((value = block(self[i])) === $breaker) {
1458
+ return $breaker.$v;
1459
+ }
1460
+
1461
+ if (value === false || value === nil) {
1462
+ result.push(self[i]);
1463
+ }
1464
+ }
1465
+ return result;
1466
+ }
1467
+ end
1468
+
1469
+ def reject!(&block)
1470
+ return enum_for(:reject!){self.size} unless block_given?
1471
+
1472
+ original = length
1473
+ delete_if(&block)
1474
+
1475
+ unless length == original
1476
+ self
1477
+ end
1478
+ end
1479
+
1480
+ def replace(other)
1481
+ if Array === other
1482
+ other = other.to_a
1483
+ else
1484
+ other = Opal.coerce_to(other, Array, :to_ary).to_a
1485
+ end
1486
+
1487
+ %x{
1488
+ self.splice(0, self.length);
1489
+ self.push.apply(self, other);
1490
+ }
1491
+
1492
+ self
1493
+ end
1494
+
1495
+ def reverse
1496
+ `self.slice(0).reverse()`
1497
+ end
1498
+
1499
+ def reverse!
1500
+ `self.reverse()`
1501
+ end
1502
+
1503
+ def reverse_each(&block)
1504
+ return enum_for(:reverse_each){self.size} unless block_given?
1505
+
1506
+ reverse.each &block
1507
+ self
1508
+ end
1509
+
1510
+ def rindex(object = undefined, &block)
1511
+ %x{
1512
+ var i, value;
1513
+
1514
+ if (object != null) {
1515
+ for (i = self.length - 1; i >= 0; i--) {
1516
+ if (i >= self.length) {
1517
+ break;
1518
+ }
1519
+ if (#{`self[i]` == `object`}) {
1520
+ return i;
1521
+ }
1522
+ }
1523
+ }
1524
+ else if (block !== nil) {
1525
+ for (i = self.length - 1; i >= 0; i--) {
1526
+ if (i >= self.length) {
1527
+ break;
1528
+ }
1529
+ if ((value = block(self[i])) === $breaker) {
1530
+ return $breaker.$v;
1531
+ }
1532
+ if (value !== false && value !== nil) {
1533
+ return i;
1534
+ }
1535
+ }
1536
+ }
1537
+ else if (object == null) {
1538
+ return #{enum_for :rindex};
1539
+ }
1540
+
1541
+ return nil;
1542
+ }
1543
+ end
1544
+
1545
+ def rotate(n=1)
1546
+ n = Opal.coerce_to n, Integer, :to_int
1547
+ %x{
1548
+ var ary, idx, firstPart, lastPart;
1549
+
1550
+ if (self.length === 1) {
1551
+ return self.slice();
1552
+ }
1553
+ if (self.length === 0) {
1554
+ return [];
1555
+ }
1556
+
1557
+ ary = self.slice();
1558
+ idx = n % ary.length;
1559
+
1560
+ firstPart = ary.slice(idx);
1561
+ lastPart = ary.slice(0, idx);
1562
+ return firstPart.concat(lastPart);
1563
+ }
1564
+ end
1565
+
1566
+ def rotate!(cnt=1)
1567
+ raise RuntimeError, "can't modify frozen Array" if frozen?
1568
+
1569
+ %x{
1570
+ if (self.length === 0 || self.length === 1) {
1571
+ return self;
1572
+ }
1573
+ }
1574
+ cnt = Opal.coerce_to cnt, Integer, :to_int
1575
+ ary = rotate(cnt)
1576
+ replace ary
1577
+ end
1578
+
1579
+ class SampleRandom
1580
+ def initialize(rng)
1581
+ @rng = rng
1582
+ end
1583
+
1584
+ def rand(size)
1585
+ random = Opal.coerce_to @rng.rand(size), Integer, :to_int
1586
+ raise RangeError, "random value must be >= 0" if `random < 0`
1587
+ raise RangeError, "random value must be less than Array size" unless `random < size`
1588
+
1589
+ random
1590
+ end
1591
+ end
1592
+
1593
+ def sample(count = undefined, options = undefined)
1594
+ return at Kernel.rand(`self.length`) if `count === undefined`
1595
+
1596
+ if `options === undefined`
1597
+ if (o = Opal.coerce_to? count, Hash, :to_hash)
1598
+ options = o
1599
+ count = nil
1600
+ else
1601
+ options = nil
1602
+ count = Opal.coerce_to count, Integer, :to_int
1603
+ end
1604
+ else
1605
+ count = Opal.coerce_to count, Integer, :to_int
1606
+ options = Opal.coerce_to options, Hash, :to_hash
1607
+ end
1608
+
1609
+ if count and `count < 0`
1610
+ raise ArgumentError, "count must be greater than 0"
1611
+ end
1612
+
1613
+ rng = options[:random] if options
1614
+ if rng and rng.respond_to? :rand
1615
+ rng = SampleRandom.new rng
1616
+ else
1617
+ rng = Kernel
1618
+ end
1619
+
1620
+ return `self[#{rng.rand(`self.length`)}]` unless count
1621
+
1622
+ %x{
1623
+
1624
+ var abandon, spin, result, i, j, k, targetIndex, oldValue;
1625
+
1626
+ if (count > self.length) {
1627
+ count = self.length;
1628
+ }
1629
+
1630
+ switch (count) {
1631
+ case 0:
1632
+ return [];
1633
+ break;
1634
+ case 1:
1635
+ return [self[#{rng.rand(`self.length`)}]];
1636
+ break;
1637
+ case 2:
1638
+ i = #{rng.rand(`self.length`)};
1639
+ j = #{rng.rand(`self.length`)};
1640
+ if (i === j) {
1641
+ j = i === 0 ? i + 1 : i - 1;
1642
+ }
1643
+ return [self[i], self[j]];
1644
+ break;
1645
+ default:
1646
+ if (self.length / count > 3) {
1647
+ abandon = false;
1648
+ spin = 0;
1649
+
1650
+ result = #{ Array.new(count) };
1651
+ i = 1;
1652
+
1653
+ result[0] = #{rng.rand(`self.length`)};
1654
+ while (i < count) {
1655
+ k = #{rng.rand(`self.length`)};
1656
+ j = 0;
1657
+
1658
+ while (j < i) {
1659
+ while (k === result[j]) {
1660
+ spin++;
1661
+ if (spin > 100) {
1662
+ abandon = true;
1663
+ break;
1664
+ }
1665
+ k = #{rng.rand(`self.length`)};
1666
+ }
1667
+ if (abandon) { break; }
1668
+
1669
+ j++;
1670
+ }
1671
+
1672
+ if (abandon) { break; }
1673
+
1674
+ result[i] = k;
1675
+
1676
+ i++;
1677
+ }
1678
+
1679
+ if (!abandon) {
1680
+ i = 0;
1681
+ while (i < count) {
1682
+ result[i] = self[result[i]];
1683
+ i++;
1684
+ }
1685
+
1686
+ return result;
1687
+ }
1688
+ }
1689
+
1690
+ result = self.slice();
1691
+
1692
+ for (var c = 0; c < count; c++) {
1693
+ targetIndex = #{rng.rand(`self.length`)};
1694
+ oldValue = result[c];
1695
+ result[c] = result[targetIndex];
1696
+ result[targetIndex] = oldValue;
1697
+ }
1698
+
1699
+ return count === self.length ? result : #{`result`[0, count]};
1700
+ }
1701
+ }
1702
+ end
1703
+
1704
+ def select(&block)
1705
+ return enum_for(:select){self.size} unless block_given?
1706
+
1707
+ %x{
1708
+ var result = [];
1709
+
1710
+ for (var i = 0, length = self.length, item, value; i < length; i++) {
1711
+ item = self[i];
1712
+
1713
+ if ((value = Opal.yield1(block, item)) === $breaker) {
1714
+ return $breaker.$v;
1715
+ }
1716
+
1717
+ if (value !== false && value !== nil) {
1718
+ result.push(item);
1719
+ }
1720
+ }
1721
+
1722
+ return result;
1723
+ }
1724
+ end
1725
+
1726
+ def select!(&block)
1727
+ return enum_for(:select!){self.size} unless block_given?
1728
+
1729
+ %x{
1730
+ var original = self.length;
1731
+ #{ keep_if &block };
1732
+ return self.length === original ? nil : self;
1733
+ }
1734
+ end
1735
+
1736
+ def shift(count = undefined)
1737
+ if `count === undefined`
1738
+ return if `self.length === 0`
1739
+ return `self.shift()`
1740
+ end
1741
+
1742
+ count = Opal.coerce_to count, Integer, :to_int
1743
+
1744
+ if `count < 0`
1745
+ raise ArgumentError, 'negative array size'
1746
+ end
1747
+
1748
+ return [] if `self.length === 0`
1749
+
1750
+ `self.splice(0, count)`
1751
+ end
1752
+
1753
+ alias size length
1754
+
1755
+ def shuffle
1756
+ clone.shuffle!
1757
+ end
1758
+
1759
+ def shuffle!
1760
+ %x{
1761
+ for (var i = self.length - 1; i > 0; i--) {
1762
+ var tmp = self[i],
1763
+ j = Math.floor(Math.random() * (i + 1));
1764
+
1765
+ self[i] = self[j];
1766
+ self[j] = tmp;
1767
+ }
1768
+ }
1769
+
1770
+ self
1771
+ end
1772
+
1773
+ alias slice []
1774
+
1775
+ def slice!(index, length = undefined)
1776
+ %x{
1777
+ if (index < 0) {
1778
+ index += self.length;
1779
+ }
1780
+
1781
+ if (length != null) {
1782
+ return self.splice(index, length);
1783
+ }
1784
+
1785
+ if (index < 0 || index >= self.length) {
1786
+ return nil;
1787
+ }
1788
+
1789
+ return self.splice(index, 1)[0];
1790
+ }
1791
+ end
1792
+
1793
+ def sort(&block)
1794
+ return self unless `self.length > 1`
1795
+
1796
+ %x{
1797
+ if (block === nil) {
1798
+ block = function(a, b) {
1799
+ return #{`a` <=> `b`};
1800
+ };
1801
+ }
1802
+
1803
+ try {
1804
+ return self.slice().sort(function(x, y) {
1805
+ var ret = block(x, y);
1806
+
1807
+ if (ret === $breaker) {
1808
+ throw $breaker;
1809
+ }
1810
+ else if (ret === nil) {
1811
+ #{raise ArgumentError, "comparison of #{`x`.inspect} with #{`y`.inspect} failed"};
1812
+ }
1813
+
1814
+ return #{`ret` > 0} ? 1 : (#{`ret` < 0} ? -1 : 0);
1815
+ });
1816
+ }
1817
+ catch (e) {
1818
+ if (e === $breaker) {
1819
+ return $breaker.$v;
1820
+ }
1821
+ else {
1822
+ throw e;
1823
+ }
1824
+ }
1825
+ }
1826
+ end
1827
+
1828
+ def sort!(&block)
1829
+ %x{
1830
+ var result;
1831
+
1832
+ if (#{block_given?}) {
1833
+ result = #{`self.slice()`.sort(&block)};
1834
+ }
1835
+ else {
1836
+ result = #{`self.slice()`.sort};
1837
+ }
1838
+
1839
+ self.length = 0;
1840
+ for(var i = 0, length = result.length; i < length; i++) {
1841
+ self.push(result[i]);
1842
+ }
1843
+
1844
+ return self;
1845
+ }
1846
+ end
1847
+
1848
+ def take(count)
1849
+ %x{
1850
+ if (count < 0) {
1851
+ #{raise ArgumentError};
1852
+ }
1853
+
1854
+ return self.slice(0, count);
1855
+ }
1856
+ end
1857
+
1858
+ def take_while(&block)
1859
+ %x{
1860
+ var result = [];
1861
+
1862
+ for (var i = 0, length = self.length, item, value; i < length; i++) {
1863
+ item = self[i];
1864
+
1865
+ if ((value = block(item)) === $breaker) {
1866
+ return $breaker.$v;
1867
+ }
1868
+
1869
+ if (value === false || value === nil) {
1870
+ return result;
1871
+ }
1872
+
1873
+ result.push(item);
1874
+ }
1875
+
1876
+ return result;
1877
+ }
1878
+ end
1879
+
1880
+ def to_a
1881
+ self
1882
+ end
1883
+
1884
+ alias to_ary to_a
1885
+
1886
+ def to_h
1887
+ %x{
1888
+ var i, len = self.length, ary, key, val, hash = #{{}};
1889
+
1890
+ for (i = 0; i < len; i++) {
1891
+ ary = #{Opal.coerce_to?(`self[i]`, Array, :to_ary)};
1892
+ if (!ary.$$is_array) {
1893
+ #{raise TypeError, "wrong element type #{`ary`.class} at #{`i`} (expected array)"}
1894
+ }
1895
+ if (ary.length !== 2) {
1896
+ #{raise ArgumentError, "wrong array length at #{`i`} (expected 2, was #{`ary`.length})"}
1897
+ }
1898
+ key = ary[0];
1899
+ val = ary[1];
1900
+ Opal.hash_put(hash, key, val);
1901
+ }
1902
+
1903
+ return hash;
1904
+ }
1905
+ end
1906
+
1907
+ alias to_s inspect
1908
+
1909
+ def transpose
1910
+ return [] if empty?
1911
+
1912
+ result = []
1913
+ max = nil
1914
+
1915
+ each {|row|
1916
+ if Array === row
1917
+ row = row.to_a
1918
+ else
1919
+ row = Opal.coerce_to(row, Array, :to_ary).to_a
1920
+ end
1921
+
1922
+ max ||= `row.length`
1923
+
1924
+ if `row.length` != max
1925
+ raise IndexError, "element size differs (#{`row.length`} should be #{max}"
1926
+ end
1927
+
1928
+ `row.length`.times {|i|
1929
+ entry = (result[i] ||= [])
1930
+ entry << row.at(i)
1931
+ }
1932
+ }
1933
+
1934
+ result
1935
+ end
1936
+
1937
+ def uniq(&block)
1938
+ %x{
1939
+ var hash = #{{}}, i, length, item, key;
1940
+
1941
+ if (block === nil) {
1942
+ for (i = 0, length = self.length; i < length; i++) {
1943
+ item = self[i];
1944
+ if (Opal.hash_get(hash, item) === undefined) {
1945
+ Opal.hash_put(hash, item, item);
1946
+ }
1947
+ }
1948
+ }
1949
+ else {
1950
+ for (i = 0, length = self.length; i < length; i++) {
1951
+ item = self[i];
1952
+ key = Opal.yield1(block, item);
1953
+ if (Opal.hash_get(hash, key) === undefined) {
1954
+ Opal.hash_put(hash, key, item);
1955
+ }
1956
+ }
1957
+ }
1958
+
1959
+ return hash.$values();
1960
+ }
1961
+ end
1962
+
1963
+ def uniq!(&block)
1964
+ %x{
1965
+ var original_length = self.length, hash = #{{}}, i, length, item, key;
1966
+
1967
+ for (i = 0, length = original_length; i < length; i++) {
1968
+ item = self[i];
1969
+ key = (block === nil ? item : Opal.yield1(block, item));
1970
+
1971
+ if (Opal.hash_get(hash, key) === undefined) {
1972
+ Opal.hash_put(hash, key, item);
1973
+ continue;
1974
+ }
1975
+
1976
+ self.splice(i, 1);
1977
+ length--;
1978
+ i--;
1979
+ }
1980
+
1981
+ return self.length === original_length ? nil : self;
1982
+ }
1983
+ end
1984
+
1985
+ def unshift(*objects)
1986
+ %x{
1987
+ for (var i = objects.length - 1; i >= 0; i--) {
1988
+ self.unshift(objects[i]);
1989
+ }
1990
+ }
1991
+
1992
+ self
1993
+ end
1994
+
1995
+ def values_at(*args)
1996
+ out = [];
1997
+
1998
+ args.each do |elem|
1999
+ if elem.kind_of? Range
2000
+ finish = Opal.coerce_to elem.last, Integer, :to_int
2001
+ start = Opal.coerce_to elem.first, Integer, :to_int
2002
+
2003
+ %x{
2004
+ if (start < 0) {
2005
+ start = start + self.length;
2006
+ #{next};
2007
+ }
2008
+ }
2009
+
2010
+ %x{
2011
+ if (finish < 0) {
2012
+ finish = finish + self.length;
2013
+ }
2014
+ if (#{elem.exclude_end?}) {
2015
+ finish--;
2016
+ }
2017
+ if (finish < start) {
2018
+ #{next};
2019
+ }
2020
+ }
2021
+
2022
+ start.upto(finish) { |i| out << at(i) }
2023
+ else
2024
+ i = Opal.coerce_to elem, Integer, :to_int
2025
+ out << at(i)
2026
+ end
2027
+ end
2028
+
2029
+ out
2030
+ end
2031
+
2032
+ def zip(*others, &block)
2033
+ %x{
2034
+ var result = [], size = self.length, part, o, i, j, jj;
2035
+
2036
+ for (j = 0, jj = others.length; j < jj; j++) {
2037
+ o = others[j];
2038
+ if (!o.$$is_array) {
2039
+ others[j] = #{(
2040
+ Opal.coerce_to?(`o`, Array, :to_ary) ||
2041
+ Opal.coerce_to!(`o`, Enumerator, :each)
2042
+ ).to_a};
2043
+ }
2044
+ }
2045
+
2046
+ for (i = 0; i < size; i++) {
2047
+ part = [self[i]];
2048
+
2049
+ for (j = 0, jj = others.length; j < jj; j++) {
2050
+ o = others[j][i];
2051
+
2052
+ if (o == null) {
2053
+ o = nil;
2054
+ }
2055
+
2056
+ part[j + 1] = o;
2057
+ }
2058
+
2059
+ result[i] = part;
2060
+ }
2061
+
2062
+ if (block !== nil) {
2063
+ for (i = 0; i < size; i++) {
2064
+ block(result[i]);
2065
+ }
2066
+
2067
+ return nil;
2068
+ }
2069
+
2070
+ return result;
2071
+ }
2072
+ end
2073
+ end