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,178 @@
1
+ require 'opal/nodes/base'
2
+ require 'opal/nodes/call'
3
+
4
+ module Opal
5
+ module Nodes
6
+ # recv.mid = rhs
7
+ # s(:recv, :mid=, s(:arglist, rhs))
8
+ class AttrAssignNode < CallNode
9
+ handle :attrasgn
10
+
11
+ children :recvr, :meth, :arglist
12
+
13
+ def default_compile
14
+ # Skip, for now, if the method has square brackets: []=
15
+ return super if meth.to_s !~ /^\w+=$/
16
+
17
+ with_temp do |args_tmp|
18
+ with_temp do |recv_tmp|
19
+ args = expr(arglist)
20
+ mid = mid_to_jsid meth.to_s
21
+ push "((#{args_tmp} = [", args, "]), "+
22
+ "#{recv_tmp} = ", recv(recv_sexp), ", ",
23
+ recv_tmp, mid, ".apply(#{recv_tmp}, #{args_tmp}), "+
24
+ "#{args_tmp}[#{args_tmp}.length-1])"
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ # lhs =~ rhs
31
+ # s(:match3, lhs, rhs)
32
+ class Match3Node < Base
33
+ handle :match3
34
+
35
+ children :lhs, :rhs
36
+
37
+ def compile
38
+ sexp = s(:call, lhs, :=~, s(:arglist, rhs))
39
+ push process(sexp, @level)
40
+ end
41
+ end
42
+
43
+ # a ||= rhs
44
+ # s(:op_asgn_or, s(:lvar, :a), s(:lasgn, :a, rhs))
45
+ class OpAsgnOrNode < Base
46
+ handle :op_asgn_or
47
+
48
+ children :recvr, :rhs
49
+
50
+ def compile
51
+ sexp = s(:or, recvr, rhs)
52
+ push expr(sexp)
53
+ end
54
+ end
55
+
56
+ # a &&= rhs
57
+ # s(:op_asgn_and, s(:lvar, :a), s(:lasgn, a:, rhs))
58
+ class OpAsgnAndNode < Base
59
+ handle :op_asgn_and
60
+
61
+ children :recvr, :rhs
62
+
63
+ def compile
64
+ sexp = s(:and, recvr, rhs)
65
+ push expr(sexp)
66
+ end
67
+ end
68
+
69
+ # lhs[args] ||= rhs
70
+ # s(:op_asgn1, lhs, args, :||, rhs)
71
+ class OpAsgn1Node < Base
72
+ handle :op_asgn1
73
+
74
+ children :lhs, :args, :op, :rhs
75
+
76
+ def first_arg
77
+ args[1]
78
+ end
79
+
80
+ def compile
81
+ case op.to_s
82
+ when '||' then compile_or
83
+ when '&&' then compile_and
84
+ else compile_operator
85
+ end
86
+ end
87
+
88
+ def compile_operator
89
+ with_temp do |a| # args
90
+ with_temp do |r| # recv
91
+ cur = s(:call, s(:js_tmp, r), :[], s(:arglist, s(:js_tmp, a)))
92
+ rhs = s(:call, cur, op.to_sym, s(:arglist, self.rhs))
93
+ call = s(:call, s(:js_tmp, r), :[]=, s(:arglist, s(:js_tmp, a), rhs))
94
+
95
+ push "(#{a} = ", expr(first_arg), ", #{r} = ", expr(lhs)
96
+ push ", ", expr(call), ")"
97
+ end
98
+ end
99
+ end
100
+
101
+ def compile_or
102
+ with_temp do |a| # args
103
+ with_temp do |r| # recv
104
+ aref = s(:call, s(:js_tmp, r), :[], s(:arglist, s(:js_tmp, a)))
105
+ aset = s(:call, s(:js_tmp, r), :[]=, s(:arglist, s(:js_tmp, a), rhs))
106
+ orop = s(:or, aref, aset)
107
+
108
+ push "(#{a} = ", expr(first_arg), ", #{r} = ", expr(lhs)
109
+ push ", ", expr(orop), ")"
110
+ end
111
+ end
112
+ end
113
+
114
+ def compile_and
115
+ with_temp do |a| # args
116
+ with_temp do |r| # recv
117
+ aref = s(:call, s(:js_tmp, r), :[], s(:arglist, s(:js_tmp, a)))
118
+ aset = s(:call, s(:js_tmp, r), :[]=, s(:arglist, s(:js_tmp, a), rhs))
119
+ andop = s(:and, aref, aset)
120
+
121
+ push "(#{a} = ", expr(first_arg), ", #{r} = ", expr(lhs)
122
+ push ", ", expr(andop), ")"
123
+ end
124
+ end
125
+ end
126
+ end
127
+
128
+ # lhs.b += rhs
129
+ # s(:op_asgn2, lhs, :b=, :+, rhs)
130
+ class OpAsgn2Node < Base
131
+ handle :op_asgn2
132
+
133
+ children :lhs, :mid, :op, :rhs
134
+
135
+ def meth
136
+ mid.to_s[0..-2]
137
+ end
138
+
139
+ def compile
140
+ case op.to_s
141
+ when '||' then compile_or
142
+ when '&&' then compile_and
143
+ else compile_operator
144
+ end
145
+ end
146
+
147
+ def compile_or
148
+ with_temp do |tmp|
149
+ getr = s(:call, s(:js_tmp, tmp), meth, s(:arglist))
150
+ asgn = s(:call, s(:js_tmp, tmp), mid, s(:arglist, rhs))
151
+ orop = s(:or, getr, asgn)
152
+
153
+ push "(#{tmp} = ", expr(lhs), ", ", expr(orop), ")"
154
+ end
155
+ end
156
+
157
+ def compile_and
158
+ with_temp do |tmp|
159
+ getr = s(:call, s(:js_tmp, tmp), meth, s(:arglist))
160
+ asgn = s(:call, s(:js_tmp, tmp), mid, s(:arglist, rhs))
161
+ andop = s(:and, getr, asgn)
162
+
163
+ push "(#{tmp} = ", expr(lhs), ", ", expr(andop), ")"
164
+ end
165
+ end
166
+
167
+ def compile_operator
168
+ with_temp do |tmp|
169
+ getr = s(:call, s(:js_tmp, tmp), meth, s(:arglist))
170
+ oper = s(:call, getr, op, s(:arglist, rhs))
171
+ asgn = s(:call, s(:js_tmp, tmp), mid, s(:arglist, oper))
172
+
173
+ push "(#{tmp} = ", expr(lhs), ", ", expr(asgn), ")"
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
@@ -0,0 +1,96 @@
1
+ require 'opal/nodes/base'
2
+
3
+ module Opal
4
+ module Nodes
5
+ class CaseNode < Base
6
+ handle :case
7
+
8
+ children :condition
9
+
10
+ def compile
11
+ handled_else = false
12
+
13
+ compiler.in_case do
14
+ if condition
15
+ case_stmt[:cond] = true
16
+ add_local '$case'
17
+
18
+ push "$case = ", expr(condition), ";"
19
+ end
20
+
21
+ case_parts.each_with_index do |wen, idx|
22
+ if wen and wen.type == :when
23
+ compiler.returns(wen) if needs_closure?
24
+ push "else " unless idx == 0
25
+ push stmt(wen)
26
+ elsif wen # s(:else)
27
+ handled_else = true
28
+ wen = compiler.returns(wen) if needs_closure?
29
+ push "else {", stmt(wen), "}"
30
+ end
31
+ end
32
+
33
+ # if we are having a closure, we must return a usable value
34
+ if needs_closure? and !handled_else
35
+ push "else { return nil }"
36
+ end
37
+
38
+ wrap '(function() {', '})()' if needs_closure?
39
+ end
40
+ end
41
+
42
+ def needs_closure?
43
+ !stmt?
44
+ end
45
+
46
+ def case_parts
47
+ children[1..-1]
48
+ end
49
+
50
+ def case_stmt
51
+ compiler.case_stmt
52
+ end
53
+ end
54
+
55
+ class WhenNode < Base
56
+ handle :when
57
+
58
+ children :whens, :body
59
+
60
+ def compile
61
+ push "if ("
62
+
63
+ when_checks.each_with_index do |check, idx|
64
+ push ' || ' unless idx == 0
65
+
66
+ if check.type == :splat
67
+ push "(function($splt) { for (var i = 0; i < $splt.length; i++) {"
68
+ push "if ($splt[i]['$===']($case)) { return true; }"
69
+ push "} return false; })(", expr(check[1]), ")"
70
+ else
71
+ if case_stmt[:cond]
72
+ call = s(:call, check, :===, s(:arglist, s(:js_tmp, '$case')))
73
+ push expr(call)
74
+ else
75
+ push js_truthy(check)
76
+ end
77
+ end
78
+ end
79
+
80
+ push ") {", process(body_code, @level), "}"
81
+ end
82
+
83
+ def when_checks
84
+ whens.children
85
+ end
86
+
87
+ def case_stmt
88
+ compiler.case_stmt
89
+ end
90
+
91
+ def body_code
92
+ body || s(:nil)
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,42 @@
1
+ require 'opal/nodes/module'
2
+
3
+ module Opal
4
+ module Nodes
5
+ class ClassNode < ModuleNode
6
+ handle :class
7
+
8
+ children :cid, :sup, :body
9
+
10
+ def compile
11
+ name, base = name_and_base
12
+ helper :klass
13
+
14
+ push "(function($base, $super) {"
15
+ line " function $#{name}(){};"
16
+ line " var self = $#{name} = $klass($base, $super, '#{name}', $#{name});"
17
+
18
+ in_scope do
19
+ scope.name = name
20
+ add_temp "#{scope.proto} = self.$$proto"
21
+ add_temp "$scope = self.$$scope"
22
+
23
+ body_code = self.body_code
24
+ empty_line
25
+
26
+ line scope.to_vars
27
+ line body_code
28
+ end
29
+
30
+ line "})(", base, ", ", self.super_code, ")"
31
+ end
32
+
33
+ def super_code
34
+ sup ? expr(sup) : 'null'
35
+ end
36
+
37
+ def body_code
38
+ stmt(compiler.returns(body || s(:nil)))
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,78 @@
1
+ require 'opal/nodes/base'
2
+
3
+ module Opal
4
+ module Nodes
5
+ class ConstNode < Base
6
+ handle :const
7
+
8
+ children :name
9
+
10
+ def compile
11
+ if name == :DATA and compiler.eof_content
12
+ push("$__END__")
13
+ else
14
+ push "$scope.get('#{name}')"
15
+ end
16
+ end
17
+ end
18
+
19
+ class ConstDeclarationNode < Base
20
+ handle :cdecl
21
+
22
+ children :name, :base
23
+
24
+ def compile
25
+ push expr(base)
26
+ wrap "$opal.cdecl($scope, '#{name}', ", ")"
27
+ end
28
+ end
29
+
30
+ class ConstAssignNode < Base
31
+ handle :casgn
32
+
33
+ children :base, :name, :value
34
+
35
+ def compile
36
+ push "$opal.casgn("
37
+ push expr(base)
38
+ push ", '#{name}', "
39
+ push expr(value)
40
+ push ")"
41
+ end
42
+ end
43
+
44
+ class ConstGetNode < Base
45
+ handle :colon2
46
+
47
+ children :base, :name
48
+
49
+ def compile
50
+ push "(("
51
+ push expr(base)
52
+ push ").$$scope.get('#{name}'))"
53
+ end
54
+ end
55
+
56
+ class TopConstNode < Base
57
+ handle :colon3
58
+
59
+ children :name
60
+
61
+ def compile
62
+ push "Opal.get('#{name}')"
63
+ end
64
+ end
65
+
66
+ class TopConstAssignNode < Base
67
+ handle :casgn3
68
+
69
+ children :name, :value
70
+
71
+ def compile
72
+ push "$opal.casgn($opal.Object, '#{name}', "
73
+ push expr(value)
74
+ push ")"
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,157 @@
1
+ require 'opal/nodes/scope'
2
+
3
+ module Opal
4
+ module Nodes
5
+ # FIXME: needs rewrite
6
+ class DefNode < ScopeNode
7
+ handle :def
8
+
9
+ children :recvr, :mid, :args, :stmts
10
+
11
+ def compile
12
+ jsid = mid_to_jsid mid.to_s
13
+ params = nil
14
+ scope_name = nil
15
+
16
+ # opt args if last arg is sexp
17
+ opt = args.pop if Sexp === args.last
18
+
19
+ argc = args.length - 1
20
+
21
+ # block name (&block)
22
+ if args.last.to_s.start_with? '&'
23
+ block_name = variable(args.pop.to_s[1..-1]).to_sym
24
+ argc -= 1
25
+ end
26
+
27
+ # splat args *splat
28
+ if args.last.to_s.start_with? '*'
29
+ uses_splat = true
30
+ if args.last == :*
31
+ argc -= 1
32
+ else
33
+ splat = args[-1].to_s[1..-1].to_sym
34
+ args[-1] = splat
35
+ argc -= 1
36
+ end
37
+ end
38
+
39
+ if compiler.arity_check?
40
+ arity_code = arity_check(args, opt, uses_splat, block_name, mid)
41
+ end
42
+
43
+ in_scope do
44
+ scope.mid = mid
45
+ scope.defs = true if recvr
46
+
47
+ if block_name
48
+ scope.uses_block!
49
+ scope.add_arg block_name
50
+ end
51
+
52
+ yielder = block_name || '$yield'
53
+ scope.block_name = yielder
54
+
55
+ params = process(args)
56
+ stmt_code = stmt(compiler.returns(stmts))
57
+
58
+ add_temp 'self = this'
59
+
60
+ line "#{variable(splat)} = $slice.call(arguments, #{argc});" if splat
61
+
62
+ opt[1..-1].each do |o|
63
+ next if o[2][2] == :undefined
64
+ line "if (#{variable(o[1])} == null) {"
65
+ line ' ', expr(o)
66
+ line "}"
67
+ end if opt
68
+
69
+ # must do this after opt args incase opt arg uses yield
70
+ scope_name = scope.identity
71
+
72
+ if scope.uses_block?
73
+ add_temp "$iter = #{scope_name}.$$p"
74
+ add_temp "#{yielder} = $iter || nil"
75
+
76
+ line "#{scope_name}.$$p = null;"
77
+ end
78
+
79
+ unshift "\n#{current_indent}", scope.to_vars
80
+ line stmt_code
81
+
82
+ unshift arity_code if arity_code
83
+
84
+ unshift "var $zuper = $slice.call(arguments, 0);" if scope.uses_zuper
85
+
86
+ if scope.catch_return
87
+ unshift "try {\n"
88
+ line "} catch ($returner) { if ($returner === $opal.returner) { return $returner.$v }"
89
+ push " throw $returner; }"
90
+ end
91
+ end
92
+
93
+ unshift ") {"
94
+ unshift(params)
95
+ unshift "function("
96
+ unshift "#{scope_name} = " if scope_name
97
+ line "}"
98
+
99
+ if recvr
100
+ unshift '$opal.defs(', recv(recvr), ", '$#{mid}', "
101
+ push ')'
102
+ elsif scope.class? and %w(Object BasicObject).include?(scope.name)
103
+ wrap "$opal.defn(self, '$#{mid}', ", ')'
104
+ elsif scope.class_scope?
105
+ scope.methods << "$#{mid}"
106
+ unshift "#{scope.proto}#{jsid} = "
107
+ elsif scope.iter?
108
+ wrap "$opal.defn(self, '$#{mid}', ", ')'
109
+ elsif scope.type == :sclass
110
+ unshift "self.$$proto#{jsid} = "
111
+ elsif scope.top?
112
+ unshift "$opal.Object.$$proto#{jsid} = "
113
+ else
114
+ unshift "def#{jsid} = "
115
+ end
116
+
117
+ wrap '(', ", nil) && '#{mid}'" if expr?
118
+ end
119
+
120
+ # Returns code used in debug mode to check arity of method call
121
+ def arity_check(args, opt, splat, block_name, mid)
122
+ meth = mid.to_s.inspect
123
+
124
+ arity = args.size - 1
125
+ arity -= (opt.size - 1) if opt
126
+ arity -= 1 if splat
127
+ arity = -arity - 1 if opt or splat
128
+
129
+ # $arity will point to our received arguments count
130
+ aritycode = "var $arity = arguments.length;"
131
+
132
+ if arity < 0 # splat or opt args
133
+ aritycode + "if ($arity < #{-(arity + 1)}) { $opal.ac($arity, #{arity}, this, #{meth}); }"
134
+ else
135
+ aritycode + "if ($arity !== #{arity}) { $opal.ac($arity, #{arity}, this, #{meth}); }"
136
+ end
137
+ end
138
+ end
139
+
140
+ # def args list
141
+ class ArgsNode < Base
142
+ handle :args
143
+
144
+ def compile
145
+ children.each_with_index do |child, idx|
146
+ next if child.to_s == '*'
147
+
148
+ child = child.to_sym
149
+ push ', ' unless idx == 0
150
+ child = variable(child)
151
+ scope.add_arg child.to_sym
152
+ push child.to_s
153
+ end
154
+ end
155
+ end
156
+ end
157
+ end