opal-cj 0.7.0.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +27 -0
  4. data/.rspec +3 -0
  5. data/.spectator +2 -0
  6. data/.spectator-mspec +3 -0
  7. data/.travis.yml +45 -0
  8. data/CHANGELOG.md +406 -0
  9. data/CONTRIBUTING.md +41 -0
  10. data/Gemfile +27 -0
  11. data/Guardfile +77 -0
  12. data/LICENSE +19 -0
  13. data/README.md +178 -0
  14. data/Rakefile +116 -0
  15. data/benchmarks/operators.rb +11 -0
  16. data/bin/opal +22 -0
  17. data/bin/opal-build +77 -0
  18. data/bin/opal-mspec +10 -0
  19. data/bin/opal-repl +72 -0
  20. data/config.ru +14 -0
  21. data/examples/rack/Gemfile +3 -0
  22. data/examples/rack/app/application.rb +13 -0
  23. data/examples/rack/app/user.rb +21 -0
  24. data/examples/rack/config.ru +7 -0
  25. data/examples/rack/index.html.erb +10 -0
  26. data/examples/sinatra/Gemfile +4 -0
  27. data/examples/sinatra/app/application.rb +7 -0
  28. data/examples/sinatra/config.ru +28 -0
  29. data/lib/mspec/opal/main.rb.erb +9 -0
  30. data/lib/mspec/opal/rake_task.rb +278 -0
  31. data/lib/mspec/opal/runner.rb +206 -0
  32. data/lib/mspec/opal/sprockets.js +57 -0
  33. data/lib/opal.rb +11 -0
  34. data/lib/opal/builder.rb +135 -0
  35. data/lib/opal/builder_processors.rb +165 -0
  36. data/lib/opal/cli.rb +145 -0
  37. data/lib/opal/cli_options.rb +149 -0
  38. data/lib/opal/cli_runners.rb +10 -0
  39. data/lib/opal/cli_runners/nodejs.rb +56 -0
  40. data/lib/opal/cli_runners/phantom.js +35 -0
  41. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  42. data/lib/opal/cli_runners/server.rb +54 -0
  43. data/lib/opal/compiler.rb +307 -0
  44. data/lib/opal/erb.rb +64 -0
  45. data/lib/opal/fragment.rb +41 -0
  46. data/lib/opal/hike_path_finder.rb +18 -0
  47. data/lib/opal/nodes.rb +26 -0
  48. data/lib/opal/nodes/arglist.rb +56 -0
  49. data/lib/opal/nodes/array.rb +54 -0
  50. data/lib/opal/nodes/base.rb +151 -0
  51. data/lib/opal/nodes/call.rb +283 -0
  52. data/lib/opal/nodes/call_special.rb +178 -0
  53. data/lib/opal/nodes/case.rb +96 -0
  54. data/lib/opal/nodes/class.rb +42 -0
  55. data/lib/opal/nodes/constants.rb +78 -0
  56. data/lib/opal/nodes/def.rb +157 -0
  57. data/lib/opal/nodes/defined.rb +113 -0
  58. data/lib/opal/nodes/definitions.rb +168 -0
  59. data/lib/opal/nodes/for.rb +35 -0
  60. data/lib/opal/nodes/hash.rb +67 -0
  61. data/lib/opal/nodes/helpers.rb +114 -0
  62. data/lib/opal/nodes/if.rb +67 -0
  63. data/lib/opal/nodes/iter.rb +131 -0
  64. data/lib/opal/nodes/literal.rb +230 -0
  65. data/lib/opal/nodes/logic.rb +217 -0
  66. data/lib/opal/nodes/masgn.rb +62 -0
  67. data/lib/opal/nodes/module.rb +46 -0
  68. data/lib/opal/nodes/rescue.rb +135 -0
  69. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  70. data/lib/opal/nodes/scope.rb +293 -0
  71. data/lib/opal/nodes/singleton_class.rb +25 -0
  72. data/lib/opal/nodes/super.rb +97 -0
  73. data/lib/opal/nodes/top.rb +101 -0
  74. data/lib/opal/nodes/variables.rb +158 -0
  75. data/lib/opal/nodes/while.rb +65 -0
  76. data/lib/opal/nodes/yield.rb +95 -0
  77. data/lib/opal/parser.rb +658 -0
  78. data/lib/opal/parser/grammar.rb +5452 -0
  79. data/lib/opal/parser/grammar.y +1684 -0
  80. data/lib/opal/parser/keywords.rb +66 -0
  81. data/lib/opal/parser/lexer.rb +1208 -0
  82. data/lib/opal/parser/parser_scope.rb +25 -0
  83. data/lib/opal/parser/sexp.rb +75 -0
  84. data/lib/opal/path_reader.rb +28 -0
  85. data/lib/opal/paths.rb +38 -0
  86. data/lib/opal/source_map.rb +70 -0
  87. data/lib/opal/sprockets.rb +4 -0
  88. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  89. data/lib/opal/sprockets/environment.rb +37 -0
  90. data/lib/opal/sprockets/erb.rb +37 -0
  91. data/lib/opal/sprockets/path_reader.rb +34 -0
  92. data/lib/opal/sprockets/processor.rb +124 -0
  93. data/lib/opal/sprockets/server.rb +180 -0
  94. data/lib/opal/util.rb +64 -0
  95. data/lib/opal/version.rb +3 -0
  96. data/opal.gemspec +36 -0
  97. data/opal/README.md +6 -0
  98. data/opal/corelib/array.rb +1556 -0
  99. data/opal/corelib/array/inheritance.rb +113 -0
  100. data/opal/corelib/basic_object.rb +73 -0
  101. data/opal/corelib/boolean.rb +41 -0
  102. data/opal/corelib/class.rb +55 -0
  103. data/opal/corelib/comparable.rb +56 -0
  104. data/opal/corelib/complex.rb +3 -0
  105. data/opal/corelib/dir.rb +20 -0
  106. data/opal/corelib/enumerable.rb +1132 -0
  107. data/opal/corelib/enumerator.rb +422 -0
  108. data/opal/corelib/error.rb +63 -0
  109. data/opal/corelib/file.rb +56 -0
  110. data/opal/corelib/hash.rb +728 -0
  111. data/opal/corelib/helpers.rb +102 -0
  112. data/opal/corelib/io.rb +59 -0
  113. data/opal/corelib/kernel.rb +569 -0
  114. data/opal/corelib/main.rb +7 -0
  115. data/opal/corelib/match_data.rb +114 -0
  116. data/opal/corelib/method.rb +58 -0
  117. data/opal/corelib/module.rb +462 -0
  118. data/opal/corelib/nil_class.rb +62 -0
  119. data/opal/corelib/numeric.rb +532 -0
  120. data/opal/corelib/proc.rb +52 -0
  121. data/opal/corelib/range.rb +116 -0
  122. data/opal/corelib/rational.rb +3 -0
  123. data/opal/corelib/regexp.rb +133 -0
  124. data/opal/corelib/runtime.js +1240 -0
  125. data/opal/corelib/string.rb +1212 -0
  126. data/opal/corelib/string/inheritance.rb +78 -0
  127. data/opal/corelib/struct.rb +141 -0
  128. data/opal/corelib/time.rb +584 -0
  129. data/opal/corelib/variables.rb +24 -0
  130. data/opal/opal.rb +32 -0
  131. data/package.json +9 -0
  132. data/spec/filters/bugs/array.rb +232 -0
  133. data/spec/filters/bugs/basic_object.rb +14 -0
  134. data/spec/filters/bugs/class.rb +21 -0
  135. data/spec/filters/bugs/enumerable.rb +69 -0
  136. data/spec/filters/bugs/enumerator.rb +3 -0
  137. data/spec/filters/bugs/hash.rb +128 -0
  138. data/spec/filters/bugs/kernel.rb +10 -0
  139. data/spec/filters/bugs/language.rb +415 -0
  140. data/spec/filters/bugs/math.rb +95 -0
  141. data/spec/filters/bugs/module.rb +14 -0
  142. data/spec/filters/bugs/nil.rb +7 -0
  143. data/spec/filters/bugs/numeric.rb +20 -0
  144. data/spec/filters/bugs/opal.rb +14 -0
  145. data/spec/filters/bugs/regexp.rb +11 -0
  146. data/spec/filters/bugs/set.rb +7 -0
  147. data/spec/filters/bugs/singleton.rb +6 -0
  148. data/spec/filters/bugs/string.rb +360 -0
  149. data/spec/filters/bugs/stringscanner.rb +22 -0
  150. data/spec/filters/bugs/struct.rb +45 -0
  151. data/spec/filters/bugs/time.rb +177 -0
  152. data/spec/filters/bugs/unknown.rb +11 -0
  153. data/spec/filters/unsupported/encoding.rb +95 -0
  154. data/spec/filters/unsupported/enumerator.rb +14 -0
  155. data/spec/filters/unsupported/float.rb +5 -0
  156. data/spec/filters/unsupported/frozen.rb +90 -0
  157. data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
  158. data/spec/filters/unsupported/integer_size.rb +7 -0
  159. data/spec/filters/unsupported/method_added.rb +10 -0
  160. data/spec/filters/unsupported/mutable_strings.rb +361 -0
  161. data/spec/filters/unsupported/private_constants.rb +30 -0
  162. data/spec/filters/unsupported/private_methods.rb +44 -0
  163. data/spec/filters/unsupported/random.rb +4 -0
  164. data/spec/filters/unsupported/ruby_exe.rb +5 -0
  165. data/spec/filters/unsupported/tainted.rb +155 -0
  166. data/spec/filters/unsupported/time.rb +21 -0
  167. data/spec/filters/unsupported/trusted.rb +80 -0
  168. data/spec/lib/builder_processors_spec.rb +27 -0
  169. data/spec/lib/builder_spec.rb +66 -0
  170. data/spec/lib/cli_spec.rb +134 -0
  171. data/spec/lib/compiler_spec.rb +197 -0
  172. data/spec/lib/dependency_resolver_spec.rb +40 -0
  173. data/spec/lib/fixtures/no_requires.rb +1 -0
  174. data/spec/lib/fixtures/opal_file.rb +2 -0
  175. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  176. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  177. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  178. data/spec/lib/fixtures/requires.rb +7 -0
  179. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  180. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  181. data/spec/lib/hike_path_finder_spec.rb +23 -0
  182. data/spec/lib/lexer_spec.rb +110 -0
  183. data/spec/lib/parser/alias_spec.rb +26 -0
  184. data/spec/lib/parser/and_spec.rb +13 -0
  185. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  186. data/spec/lib/parser/begin_spec.rb +42 -0
  187. data/spec/lib/parser/block_spec.rb +12 -0
  188. data/spec/lib/parser/break_spec.rb +17 -0
  189. data/spec/lib/parser/call_spec.rb +139 -0
  190. data/spec/lib/parser/class_spec.rb +35 -0
  191. data/spec/lib/parser/comments_spec.rb +11 -0
  192. data/spec/lib/parser/def_spec.rb +61 -0
  193. data/spec/lib/parser/if_spec.rb +26 -0
  194. data/spec/lib/parser/iter_spec.rb +59 -0
  195. data/spec/lib/parser/lambda_spec.rb +64 -0
  196. data/spec/lib/parser/literal_spec.rb +118 -0
  197. data/spec/lib/parser/masgn_spec.rb +37 -0
  198. data/spec/lib/parser/module_spec.rb +27 -0
  199. data/spec/lib/parser/not_spec.rb +27 -0
  200. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  201. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  202. data/spec/lib/parser/or_spec.rb +13 -0
  203. data/spec/lib/parser/return_spec.rb +17 -0
  204. data/spec/lib/parser/sclass_spec.rb +21 -0
  205. data/spec/lib/parser/string_spec.rb +276 -0
  206. data/spec/lib/parser/super_spec.rb +20 -0
  207. data/spec/lib/parser/unary_spec.rb +48 -0
  208. data/spec/lib/parser/undef_spec.rb +15 -0
  209. data/spec/lib/parser/unless_spec.rb +13 -0
  210. data/spec/lib/parser/variables_spec.rb +92 -0
  211. data/spec/lib/parser/while_spec.rb +15 -0
  212. data/spec/lib/parser/yield_spec.rb +20 -0
  213. data/spec/lib/path_reader_spec.rb +24 -0
  214. data/spec/lib/shared/path_finder_shared.rb +19 -0
  215. data/spec/lib/shared/path_reader_shared.rb +31 -0
  216. data/spec/lib/spec_helper.rb +9 -0
  217. data/spec/lib/sprockets/environment_spec.rb +30 -0
  218. data/spec/lib/sprockets/erb_spec.rb +25 -0
  219. data/spec/lib/sprockets/path_reader_spec.rb +25 -0
  220. data/spec/lib/sprockets/processor_spec.rb +35 -0
  221. data/spec/lib/sprockets/server_spec.rb +20 -0
  222. data/spec/opal/compiler/irb_spec.rb +44 -0
  223. data/spec/opal/core/array/select_spec.rb +14 -0
  224. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  225. data/spec/opal/core/date_spec.rb +122 -0
  226. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  227. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  228. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  229. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  230. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  231. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  232. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  233. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  234. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  235. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  236. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  237. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  238. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  239. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  240. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  241. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  242. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  243. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  244. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  245. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  246. data/spec/opal/core/fixtures/class.rb +124 -0
  247. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  248. data/spec/opal/core/fixtures/constants.rb +33 -0
  249. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  250. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  251. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  252. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  253. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  254. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  255. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  256. data/spec/opal/core/kernel/class_spec.rb +6 -0
  257. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  258. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  259. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  260. data/spec/opal/core/kernel/format_spec.rb +122 -0
  261. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  262. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  263. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  264. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  265. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  266. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  267. data/spec/opal/core/kernel/match_spec.rb +5 -0
  268. data/spec/opal/core/kernel/method_spec.rb +31 -0
  269. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  270. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  271. data/spec/opal/core/kernel/p_spec.rb +15 -0
  272. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  273. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  274. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  275. data/spec/opal/core/kernel/require_tree_spec.rb +7 -0
  276. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  277. data/spec/opal/core/kernel/send_spec.rb +56 -0
  278. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  279. data/spec/opal/core/language/block_spec.rb +538 -0
  280. data/spec/opal/core/language/fixtures/array.rb +11 -0
  281. data/spec/opal/core/language/fixtures/block.rb +57 -0
  282. data/spec/opal/core/language/fixtures/break.rb +240 -0
  283. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  284. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  285. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  286. data/spec/opal/core/language/fixtures/module.rb +24 -0
  287. data/spec/opal/core/language/fixtures/next.rb +128 -0
  288. data/spec/opal/core/language/fixtures/return.rb +118 -0
  289. data/spec/opal/core/language/fixtures/send.rb +110 -0
  290. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  291. data/spec/opal/core/language/fixtures/super.rb +308 -0
  292. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  293. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  294. data/spec/opal/core/language/predefined_spec.rb +85 -0
  295. data/spec/opal/core/language/proc_spec.rb +263 -0
  296. data/spec/opal/core/language/regexp_spec.rb +20 -0
  297. data/spec/opal/core/language/send_spec.rb +225 -0
  298. data/spec/opal/core/language/string_spec.rb +44 -0
  299. data/spec/opal/core/language/symbol_spec.rb +40 -0
  300. data/spec/opal/core/language/variables_spec.rb +1366 -0
  301. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  302. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  303. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  304. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  305. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  306. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  307. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  308. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  309. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  310. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  311. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  312. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  313. data/spec/opal/core/module/append_features_spec.rb +14 -0
  314. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  315. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  316. data/spec/opal/core/module/const_get_spec.rb +85 -0
  317. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  318. data/spec/opal/core/module/const_set_spec.rb +64 -0
  319. data/spec/opal/core/module/constants_spec.rb +49 -0
  320. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  321. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  322. data/spec/opal/core/module/module_function_spec.rb +25 -0
  323. data/spec/opal/core/module/name_spec.rb +52 -0
  324. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  325. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  326. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  327. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  328. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  329. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  330. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  331. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  332. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  333. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  334. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  335. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  336. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  337. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  338. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  339. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  340. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  341. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  342. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  343. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  344. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  345. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  346. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  347. data/spec/opal/core/numeric/next_spec.rb +9 -0
  348. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  349. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  350. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  351. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  352. data/spec/opal/core/numeric/step_spec.rb +11 -0
  353. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  354. data/spec/opal/core/numeric/times_spec.rb +36 -0
  355. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  356. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  357. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  358. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  359. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  360. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  361. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  362. data/spec/opal/core/proc/call_spec.rb +21 -0
  363. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  364. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  365. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  366. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  367. data/spec/opal/core/runtime/block_spec.rb +23 -0
  368. data/spec/opal/core/runtime/bridged_classes_spec.rb +64 -0
  369. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  370. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  371. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  372. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  373. data/spec/opal/core/runtime/method_spec.rb +31 -0
  374. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  375. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  376. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  377. data/spec/opal/core/runtime/return_spec.rb +38 -0
  378. data/spec/opal/core/runtime/send_spec.rb +34 -0
  379. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  380. data/spec/opal/core/runtime/super_spec.rb +212 -0
  381. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  382. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  383. data/spec/opal/core/source_map_spec.rb +15 -0
  384. data/spec/opal/core/string_spec.rb +11 -0
  385. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  386. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  387. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  388. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  389. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  390. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  391. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  392. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  393. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  394. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  395. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  396. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  397. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  398. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  399. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  400. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  401. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  402. data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
  403. data/spec/opal/stdlib/promise/then_spec.rb +54 -0
  404. data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
  405. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  406. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  407. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  408. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  409. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  410. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  411. data/spec/rubyspecs +329 -0
  412. data/spec/spec_helper.rb +42 -0
  413. data/spec/support/mspec_rspec_adapter.rb +33 -0
  414. data/spec/support/parser_helpers.rb +37 -0
  415. data/stdlib/README.md +3 -0
  416. data/stdlib/base64.rb +152 -0
  417. data/stdlib/benchmark.rb +10 -0
  418. data/stdlib/buffer.rb +40 -0
  419. data/stdlib/buffer/array.rb +66 -0
  420. data/stdlib/buffer/view.rb +70 -0
  421. data/stdlib/date.rb +170 -0
  422. data/stdlib/delegate.rb +29 -0
  423. data/stdlib/dir.rb +1 -0
  424. data/stdlib/encoding.rb +166 -0
  425. data/stdlib/enumerator.rb +1 -0
  426. data/stdlib/erb.rb +16 -0
  427. data/stdlib/file.rb +1 -0
  428. data/stdlib/forwardable.rb +71 -0
  429. data/stdlib/json.rb +182 -0
  430. data/stdlib/math.rb +370 -0
  431. data/stdlib/native.rb +530 -0
  432. data/stdlib/nodejs.rb +5 -0
  433. data/stdlib/nodejs/dir.rb +13 -0
  434. data/stdlib/nodejs/file.rb +98 -0
  435. data/stdlib/nodejs/fileutils.rb +26 -0
  436. data/stdlib/nodejs/io.rb +2 -0
  437. data/stdlib/nodejs/irb.rb +45 -0
  438. data/stdlib/nodejs/process.rb +16 -0
  439. data/stdlib/nodejs/require.rb +32 -0
  440. data/stdlib/nodejs/rubygems.rb +68 -0
  441. data/stdlib/nodejs/runtime.rb +25 -0
  442. data/stdlib/nodejs/yaml.rb +11 -0
  443. data/stdlib/observer.rb +202 -0
  444. data/stdlib/opal-parser.rb +53 -0
  445. data/stdlib/opal-source-maps.rb +2 -0
  446. data/stdlib/ostruct.rb +69 -0
  447. data/stdlib/pathname.rb +31 -0
  448. data/stdlib/phantomjs.rb +8 -0
  449. data/stdlib/pp.rb +12 -0
  450. data/stdlib/process.rb +10 -0
  451. data/stdlib/promise.rb +300 -0
  452. data/stdlib/racc/parser.rb +215 -0
  453. data/stdlib/rbconfig.rb +20 -0
  454. data/stdlib/securerandom.rb +12 -0
  455. data/stdlib/set.rb +116 -0
  456. data/stdlib/singleton.rb +40 -0
  457. data/stdlib/source_map.rb +5 -0
  458. data/stdlib/source_map/map.rb +220 -0
  459. data/stdlib/source_map/mapping.rb +26 -0
  460. data/stdlib/source_map/offset.rb +88 -0
  461. data/stdlib/source_map/version.rb +3 -0
  462. data/stdlib/source_map/vlq.rb +98 -0
  463. data/stdlib/sourcemap.rb +1 -0
  464. data/stdlib/stringio.rb +181 -0
  465. data/stdlib/strscan.rb +155 -0
  466. data/stdlib/template.rb +46 -0
  467. data/stdlib/thread.rb +160 -0
  468. data/stdlib/time.rb +9 -0
  469. data/tasks/github.rake +19 -0
  470. metadata +690 -0
@@ -0,0 +1,26 @@
1
+ require 'source_map/offset'
2
+
3
+ module SourceMap
4
+ class Mapping < Struct.new(:source, :generated, :original, :name)
5
+ # Public: Get a simple string representation of the mapping.
6
+ #
7
+ # Returns a String.
8
+ def to_s
9
+ str = "#{generated.line}:#{generated.column}"
10
+ str << "->#{source}@#{original.line}:#{original.column}"
11
+ str << "##{name}" if name
12
+ str
13
+ end
14
+
15
+ # Public: Get a pretty inspect output for debugging purposes.
16
+ #
17
+ # Returns a String.
18
+ def inspect
19
+ str = "#<#{self.class} source=#{source.inspect}"
20
+ str << " generated=#{generated}, original=#{original}"
21
+ str << " name=#{name.inspect}" if name
22
+ str << ">"
23
+ str
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,88 @@
1
+ module SourceMap
2
+ # Public: Offset is an immutable structure representing a position in
3
+ # a source file.
4
+ class Offset
5
+ include Comparable
6
+
7
+ # Public: Construct Offset value.
8
+ #
9
+ # Returns Offset instance.
10
+ def self.new(*args)
11
+ case args.first
12
+ when Offset
13
+ args.first
14
+ when Array
15
+ super(*args.first)
16
+ else
17
+ super(*args)
18
+ end
19
+ end
20
+
21
+ # Public: Initialize an Offset.
22
+ #
23
+ # line - Integer line number
24
+ # column - Integer column number
25
+ def initialize(line, column)
26
+ @line, @column = line, column
27
+ end
28
+
29
+ # Public: Gets Integer line of offset
30
+ attr_reader :line
31
+
32
+ # Public: Get Integer column of offset
33
+ attr_reader :column
34
+
35
+ # Public: Shift the offset by some value.
36
+ #
37
+ # other - An Offset to add by its line and column
38
+ # Or an Integer to add by line
39
+ #
40
+ # Returns a new Offset instance.
41
+ def +(other)
42
+ case other
43
+ when Offset
44
+ Offset.new(self.line + other.line, self.column + other.column)
45
+ when Integer
46
+ Offset.new(self.line + other, self.column)
47
+ else
48
+ raise ArgumentError, "can't convert #{other} into #{self.class}"
49
+ end
50
+ end
51
+
52
+ # Public: Compare Offset to another.
53
+ #
54
+ # Useful for determining if a position in a few is between two offsets.
55
+ #
56
+ # other - Another Offset
57
+ #
58
+ # Returns a negative number when other is smaller and a positive number
59
+ # when its greater. Implements the Comparable#<=> protocol.
60
+ def <=>(other)
61
+ case other
62
+ when Offset
63
+ diff = self.line - other.line
64
+ diff.zero? ? self.column - other.column : diff
65
+ else
66
+ raise ArgumentError, "can't convert #{other.class} into #{self.class}"
67
+ end
68
+ end
69
+
70
+ # Public: Get a simple string representation of the offset
71
+ #
72
+ # Returns a String.
73
+ def to_s
74
+ if column == 0
75
+ "#{line}"
76
+ else
77
+ "#{line}:#{column}"
78
+ end
79
+ end
80
+
81
+ # Public: Get a pretty inspect output for debugging purposes.
82
+ #
83
+ # Returns a String.
84
+ def inspect
85
+ "#<#{self.class} line=#{line}, column=#{column}>"
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,3 @@
1
+ module SourceMap
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,98 @@
1
+ module SourceMap
2
+ # Public: Base64 VLQ encoding
3
+ #
4
+ # Adopted from ConradIrwin/ruby-source_map
5
+ # https://github.com/ConradIrwin/ruby-source_map/blob/master/lib/source_map/vlq.rb
6
+ #
7
+ # Resources
8
+ #
9
+ # http://en.wikipedia.org/wiki/Variable-length_quantity
10
+ # https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
11
+ # https://github.com/mozilla/source-map/blob/master/lib/source-map/base64-vlq.js
12
+ #
13
+ module VLQ
14
+ VLQ_BASE_SHIFT = 5
15
+ VLQ_BASE = 1 << VLQ_BASE_SHIFT
16
+ VLQ_BASE_MASK = VLQ_BASE - 1
17
+ VLQ_CONTINUATION_BIT = VLQ_BASE
18
+
19
+ BASE64_DIGITS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('')
20
+ BASE64_VALUES = (0...64).inject({}) { |h, i| h[BASE64_DIGITS[i]] = i; h }
21
+
22
+ # Public: Encode a list of numbers into a compact VLQ string.
23
+ #
24
+ # ary - An Array of Integers
25
+ #
26
+ # Returns a VLQ String.
27
+ def self.encode(ary)
28
+ result = []
29
+ ary.each do |n|
30
+ vlq = n < 0 ? ((-n) << 1) + 1 : n << 1
31
+ begin
32
+ digit = vlq & VLQ_BASE_MASK
33
+ vlq >>= VLQ_BASE_SHIFT
34
+ digit |= VLQ_CONTINUATION_BIT if vlq > 0
35
+ result << BASE64_DIGITS[digit]
36
+ end while vlq > 0
37
+ end
38
+ result.join
39
+ end
40
+
41
+ # Public: Decode a VLQ string.
42
+ #
43
+ # str - VLQ encoded String
44
+ #
45
+ # Returns an Array of Integers.
46
+ def self.decode(str)
47
+ result = []
48
+ chars = str.split('')
49
+ while chars.any?
50
+ vlq = 0
51
+ shift = 0
52
+ continuation = true
53
+ while continuation
54
+ char = chars.shift
55
+ raise ArgumentError unless char
56
+ digit = BASE64_VALUES[char]
57
+ continuation = false if (digit & VLQ_CONTINUATION_BIT) == 0
58
+ digit &= VLQ_BASE_MASK
59
+ vlq += digit << shift
60
+ shift += VLQ_BASE_SHIFT
61
+ end
62
+ result << (vlq & 1 == 1 ? -(vlq >> 1) : vlq >> 1)
63
+ end
64
+ result
65
+ end
66
+
67
+ # Public: Encode a mapping array into a compact VLQ string.
68
+ #
69
+ # ary - Two dimensional Array of Integers.
70
+ #
71
+ # Returns a VLQ encoded String seperated by , and ;.
72
+ def self.encode_mappings(ary)
73
+ ary.map { |group|
74
+ group.map { |segment|
75
+ encode(segment)
76
+ }.join(',')
77
+ }.join(';')
78
+ end
79
+
80
+ # Public: Decode a VLQ string into mapping numbers.
81
+ #
82
+ # str - VLQ encoded String
83
+ #
84
+ # Returns an two dimensional Array of Integers.
85
+ def self.decode_mappings(str)
86
+ mappings = []
87
+
88
+ str.split(';').each_with_index do |group, index|
89
+ mappings[index] = []
90
+ group.split(',').each do |segment|
91
+ mappings[index] << decode(segment)
92
+ end
93
+ end
94
+
95
+ mappings
96
+ end
97
+ end
98
+ end
@@ -0,0 +1 @@
1
+ require 'source_map'
@@ -0,0 +1,181 @@
1
+ class StringIO < IO
2
+ include IO::Readable
3
+ include IO::Writable
4
+
5
+ def self.open(string = "", mode = nil, &block)
6
+ io = new(string, mode)
7
+ res = block.call(io)
8
+ io.close
9
+
10
+ res
11
+ end
12
+
13
+ attr_accessor :string
14
+
15
+ def initialize(string = "", mode = 'rw')
16
+ @string = string
17
+ @position = string.length
18
+
19
+ if mode.include?('r') and not mode.include?('w')
20
+ @closed = :write
21
+ elsif mode.include?('w') and not mode.include?('r')
22
+ @closed = :read
23
+ end
24
+ end
25
+
26
+ def eof?
27
+ check_readable
28
+
29
+ @position == @string.length
30
+ end
31
+
32
+ alias eof eof?
33
+
34
+ def seek(pos, whence = IO::SEEK_SET)
35
+ case whence
36
+ when IO::SEEK_SET
37
+ raise Errno::EINVAL unless pos >= 0
38
+
39
+ @position = pos
40
+
41
+ when IO::SEEK_CUR
42
+ if @position + pos > @string.length
43
+ @position = @string.length
44
+ else
45
+ @position += pos
46
+ end
47
+
48
+ when IO::SEEK_END
49
+ if pos > @string.length
50
+ @position = 0
51
+ else
52
+ @position -= pos
53
+ end
54
+ end
55
+
56
+ 0
57
+ end
58
+
59
+ def tell
60
+ @position
61
+ end
62
+
63
+ alias pos tell
64
+
65
+ alias pos= seek
66
+
67
+ def rewind
68
+ seek 0
69
+ end
70
+
71
+ def each_byte(&block)
72
+ return enum_for :each_byte unless block
73
+
74
+ check_readable
75
+
76
+ i = @position
77
+ until eof?
78
+ block.call(@string[i].ord)
79
+ i += 1
80
+ end
81
+
82
+ self
83
+ end
84
+
85
+ def each_char(&block)
86
+ return enum_for :each_char unless block
87
+
88
+ check_readable
89
+
90
+ i = @position
91
+ until eof?
92
+ block.call(@string[i])
93
+ i += 1
94
+ end
95
+
96
+ self
97
+ end
98
+
99
+ def write(string)
100
+ check_writable
101
+
102
+ string = String(string)
103
+
104
+ if @string.length == @position
105
+ @string += string
106
+ @position += string.length
107
+ else
108
+ before = @string[0 .. @position - 1]
109
+ after = @string[@position + string.length .. -1]
110
+
111
+ @string = before + string + after
112
+ @position += string.length
113
+ end
114
+ end
115
+
116
+ def read(length = nil, outbuf = nil)
117
+ check_readable
118
+
119
+ return if eof?
120
+
121
+ string = if length
122
+ str = @string[@position, length]
123
+ @position += length
124
+ str
125
+ else
126
+ str = @string[@position .. -1]
127
+ @position = @string.length
128
+ str
129
+ end
130
+
131
+ if outbuf
132
+ outbuf.write(string)
133
+ else
134
+ string
135
+ end
136
+ end
137
+
138
+ def close
139
+ @closed = :both
140
+ end
141
+
142
+ def close_read
143
+ if @closed == :write
144
+ @closed = :both
145
+ else
146
+ @closed = :read
147
+ end
148
+ end
149
+
150
+ def close_write
151
+ if @closed == :read
152
+ @closed = :both
153
+ else
154
+ @closed = :write
155
+ end
156
+ end
157
+
158
+ def closed?
159
+ @closed == :both
160
+ end
161
+
162
+ def closed_read?
163
+ @closed == :read || @closed == :both
164
+ end
165
+
166
+ def closed_write?
167
+ @closed == :write || @closed == :both
168
+ end
169
+
170
+ def check_writable
171
+ if closed_write?
172
+ raise IOError, "not opened for writing"
173
+ end
174
+ end
175
+
176
+ def check_readable
177
+ if closed_read?
178
+ raise IOError, "not opened for reading"
179
+ end
180
+ end
181
+ end
@@ -0,0 +1,155 @@
1
+ class StringScanner
2
+ attr_reader :pos
3
+ attr_reader :matched
4
+
5
+ def initialize(string)
6
+ @string = string
7
+ @pos = 0
8
+ @matched = nil
9
+ @working = string
10
+ @match = []
11
+ end
12
+
13
+ attr_reader :string
14
+
15
+ def bol?
16
+ `#@pos === 0 || #@string.charAt(#@pos - 1) === "\n"`
17
+ end
18
+
19
+ def scan(regex)
20
+ %x{
21
+ var regex = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)),
22
+ result = regex.exec(#@working);
23
+
24
+ if (result == null) {
25
+ return #{self}.matched = nil;
26
+ }
27
+ else if (typeof(result) === 'object') {
28
+ #@prev_pos = #@pos;
29
+ #@pos += result[0].length;
30
+ #@working = #@working.substring(result[0].length);
31
+ #@matched = result[0];
32
+ #@match = result;
33
+
34
+ return result[0];
35
+ }
36
+ else if (typeof(result) === 'string') {
37
+ #@pos += result.length;
38
+ #@working = #@working.substring(result.length);
39
+
40
+ return result;
41
+ }
42
+ else {
43
+ return nil;
44
+ }
45
+ }
46
+ end
47
+
48
+ def [](idx)
49
+ %x{
50
+ var match = #@match;
51
+
52
+ if (idx < 0) {
53
+ idx += match.length;
54
+ }
55
+
56
+ if (idx < 0 || idx >= match.length) {
57
+ return nil;
58
+ }
59
+
60
+ if (match[idx] == null) {
61
+ return nil;
62
+ }
63
+
64
+ return match[idx];
65
+ }
66
+ end
67
+
68
+ def check(regex)
69
+ %x{
70
+ var regexp = new RegExp('^' + regex.toString().substring(1, regex.toString().length - 1)),
71
+ result = regexp.exec(#@working);
72
+
73
+ if (result == null) {
74
+ return #{self}.matched = nil;
75
+ }
76
+
77
+ return #{self}.matched = result[0];
78
+ }
79
+ end
80
+
81
+ def peek(length)
82
+ `#@working.substring(0, length)`
83
+ end
84
+
85
+ def eos?
86
+ `#@working.length === 0`
87
+ end
88
+
89
+ def skip(re)
90
+ %x{
91
+ re = new RegExp('^' + re.source)
92
+ var result = re.exec(#@working);
93
+
94
+ if (result == null) {
95
+ return #{self}.matched = nil;
96
+ }
97
+ else {
98
+ var match_str = result[0];
99
+ var match_len = match_str.length;
100
+ #{self}.matched = match_str;
101
+ self.prev_pos = self.pos;
102
+ #{self}.pos += match_len;
103
+ #{self}.working = #{self}.working.substring(match_len);
104
+ return match_len;
105
+ }
106
+ }
107
+ end
108
+
109
+ def get_byte()
110
+ %x{
111
+ var result = nil;
112
+ if (#{self}.pos < #{self}.string.length) {
113
+ self.prev_pos = self.pos;
114
+ #{self}.pos += 1;
115
+ result = #{self}.matched = #{self}.working.substring(0, 1);
116
+ #{self}.working = #{self}.working.substring(1);
117
+ }
118
+ else {
119
+ #{self}.matched = nil;
120
+ }
121
+
122
+ return result;
123
+ }
124
+ end
125
+
126
+ # not exactly, but for now...
127
+ alias getch get_byte
128
+
129
+ def pos=(pos)
130
+ %x{
131
+ if (pos < 0) {
132
+ pos += #{@string.length};
133
+ }
134
+ }
135
+
136
+ @pos = pos
137
+ @working = `#{@string}.slice(pos)`
138
+ end
139
+
140
+ def rest
141
+ @working
142
+ end
143
+
144
+ def terminate
145
+ @match = nil
146
+ self.pos = @string.length
147
+ end
148
+
149
+ def unscan
150
+ @pos = @prev_pos
151
+ @prev_pos = nil
152
+ @match = nil
153
+ self
154
+ end
155
+ end