opal 0.2.2 → 0.3.0

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 (325) hide show
  1. data/.gitignore +5 -10
  2. data/LICENSE +75 -0
  3. data/README.md +55 -3
  4. data/Rakefile +62 -139
  5. data/bin/opal +7 -10
  6. data/gems/core/README.md +5 -0
  7. data/gems/core/Rakefile +7 -0
  8. data/gems/core/core.gemspec +13 -0
  9. data/gems/core/lib/core.rb +33 -0
  10. data/gems/core/lib/core/array.rb +1470 -0
  11. data/gems/core/lib/core/basic_object.rb +15 -0
  12. data/gems/core/lib/core/class.rb +31 -0
  13. data/gems/core/lib/core/dir.rb +26 -0
  14. data/gems/core/lib/core/error.rb +43 -0
  15. data/gems/core/lib/core/false_class.rb +21 -0
  16. data/gems/core/lib/core/file.rb +54 -0
  17. data/gems/core/lib/core/hash.rb +725 -0
  18. data/gems/core/lib/core/kernel.rb +240 -0
  19. data/gems/core/lib/core/module.rb +98 -0
  20. data/gems/core/lib/core/nil_class.rb +41 -0
  21. data/gems/core/lib/core/numeric.rb +370 -0
  22. data/gems/core/lib/core/proc.rb +11 -0
  23. data/gems/core/lib/core/range.rb +17 -0
  24. data/gems/core/lib/core/regexp.rb +18 -0
  25. data/gems/core/lib/core/string.rb +328 -0
  26. data/gems/core/lib/core/symbol.rb +15 -0
  27. data/gems/core/lib/core/top_self.rb +8 -0
  28. data/gems/core/lib/core/true_class.rb +20 -0
  29. data/gems/core/lib/core/vm.rb +16 -0
  30. data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
  31. data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
  32. data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
  33. data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
  34. data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
  35. data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
  36. data/gems/core/spec/core/array/compact_spec.rb +41 -0
  37. data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
  38. data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
  39. data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
  40. data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
  41. data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
  42. data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
  43. data/gems/core/spec/core/array/join_spec.rb +6 -0
  44. data/gems/core/spec/core/array/last_spec.rb +51 -0
  45. data/gems/core/spec/core/array/length_spec.rb +6 -0
  46. data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
  47. data/gems/core/spec/core/array/reverse_spec.rb +6 -0
  48. data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
  49. data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
  50. data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
  51. data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
  52. data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
  53. data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
  54. data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
  55. data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
  56. data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
  57. data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
  58. data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
  59. data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
  60. data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
  61. data/gems/core/spec/core/string/sub_spec.rb +24 -0
  62. data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
  63. data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
  64. data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
  65. data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
  66. data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
  67. data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
  68. data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
  69. data/gems/core/spec/language/block_spec.rb +38 -0
  70. data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
  71. data/gems/core/spec/language/case_spec.rb +103 -0
  72. data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
  73. data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
  74. data/gems/core/spec/language/file_spec.rb +13 -0
  75. data/gems/core/spec/language/fixtures/block.rb +21 -0
  76. data/gems/core/spec/language/fixtures/super.rb +293 -0
  77. data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
  78. data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
  79. data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
  80. data/gems/core/spec/language/metaclass_spec.rb +21 -0
  81. data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
  82. data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
  83. data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
  84. data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
  85. data/gems/core/spec/language/regexp_spec.rb +26 -0
  86. data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
  87. data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
  88. data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
  89. data/gems/core/spec/language/super_spec.rb +32 -0
  90. data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
  91. data/gems/core/spec/language/variables_spec.rb +155 -0
  92. data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
  93. data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
  94. data/gems/core_fs/README.md +19 -0
  95. data/gems/dev/Rakefile +5 -0
  96. data/gems/dev/lib/dev.js +99 -0
  97. data/gems/dev/lib/dev/generator.js +1264 -0
  98. data/gems/dev/lib/dev/parser.js +979 -0
  99. data/gems/dev/lib/dev/ruby_parser.js +1088 -0
  100. data/gems/dev/lib/dev/ruby_parser.y +1267 -0
  101. data/gems/dev/lib/dev/string_scanner.js +38 -0
  102. data/gems/dev/tools/racc2js/README.md +39 -0
  103. data/gems/dev/tools/racc2js/math_parser.js +222 -0
  104. data/gems/dev/tools/racc2js/math_parser.rb +133 -0
  105. data/gems/dev/tools/racc2js/math_parser.y +28 -0
  106. data/gems/dev/tools/racc2js/parser.js +218 -0
  107. data/gems/dev/tools/racc2js/racc2js.rb +153 -0
  108. data/gems/json/README.md +4 -0
  109. data/gems/json/json.gemspec +14 -0
  110. data/gems/json/lib/json.rb +64 -0
  111. data/gems/json/lib/json/ext.rb +51 -0
  112. data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
  113. data/gems/ospec/README.md +0 -0
  114. data/gems/ospec/lib/ospec.rb +6 -0
  115. data/gems/ospec/lib/ospec/autorun.rb +3 -0
  116. data/gems/ospec/lib/ospec/dsl.rb +15 -0
  117. data/gems/ospec/lib/ospec/example.rb +11 -0
  118. data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
  119. data/gems/ospec/lib/ospec/example/errors.rb +17 -0
  120. data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
  121. data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
  122. data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
  123. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
  124. data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
  125. data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
  126. data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
  127. data/gems/ospec/lib/ospec/expectations.rb +19 -0
  128. data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
  129. data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
  130. data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
  131. data/gems/ospec/lib/ospec/matchers.rb +24 -0
  132. data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
  133. data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
  134. data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
  135. data/gems/ospec/lib/ospec/runner.rb +40 -0
  136. data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
  137. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
  138. data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
  139. data/gems/ospec/lib/ospec/runner/options.rb +36 -0
  140. data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
  141. data/gems/ospec/ospec.gemspec +0 -0
  142. data/gems/rquery/README.md +9 -0
  143. data/gems/rquery/lib/rquery.rb +10 -0
  144. data/gems/rquery/lib/rquery/ajax.rb +4 -0
  145. data/gems/rquery/lib/rquery/css.rb +96 -0
  146. data/gems/rquery/lib/rquery/document.rb +25 -0
  147. data/gems/rquery/lib/rquery/element.rb +292 -0
  148. data/gems/rquery/lib/rquery/event.rb +108 -0
  149. data/gems/rquery/lib/rquery/jquery.js +8177 -0
  150. data/gems/rquery/lib/rquery/request.rb +138 -0
  151. data/gems/rquery/lib/rquery/response.rb +49 -0
  152. data/gems/rquery/rquery.gemspec +16 -0
  153. data/lib/opal.js +1597 -0
  154. data/lib/opal.rb +6 -69
  155. data/lib/opal/builder.rb +115 -0
  156. data/lib/opal/bundle.rb +131 -0
  157. data/lib/opal/command.rb +11 -0
  158. data/lib/opal/context.rb +69 -0
  159. data/lib/opal/context/console.rb +12 -0
  160. data/lib/opal/context/file_system.rb +19 -0
  161. data/lib/opal/context/loader.rb +117 -0
  162. data/lib/opal/gem.rb +153 -0
  163. data/lib/opal/ruby/nodes.rb +1302 -0
  164. data/lib/opal/ruby/parser.rb +780 -0
  165. data/lib/opal/ruby/ruby_parser.rb +5170 -0
  166. data/lib/opal/ruby/ruby_parser.y +1298 -0
  167. data/opal.gemspec +11 -256
  168. metadata +179 -240
  169. data/.gitmodules +0 -6
  170. data/Opalfile +0 -384
  171. data/VERSION +0 -1
  172. data/demos/apps/browser_demo/index.html +0 -11
  173. data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
  174. data/demos/apps/simple_opal/Opalfile +0 -13
  175. data/demos/apps/simple_opal/index.html +0 -11
  176. data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
  177. data/demos/apps/simple_opal/lib/main_window.rb +0 -146
  178. data/demos/browser/request/index.html +0 -52
  179. data/demos/browser/request/request.rb +0 -48
  180. data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
  181. data/gen/browser/__PROJECT_NAME__/index.html +0 -11
  182. data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
  183. data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
  184. data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
  185. data/lib/opal/builders/base.rb +0 -50
  186. data/lib/opal/builders/css.rb +0 -46
  187. data/lib/opal/builders/javascript.rb +0 -44
  188. data/lib/opal/builders/opal.rb +0 -79
  189. data/lib/opal/builders/ruby.rb +0 -50
  190. data/lib/opal/builders/ruby/generate.rb +0 -1851
  191. data/lib/opal/builders/ruby/nodes.rb +0 -210
  192. data/lib/opal/builders/ruby/ruby.rb +0 -916
  193. data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
  194. data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
  195. data/lib/opal/models/build_item.rb +0 -104
  196. data/lib/opal/models/hash_struct.rb +0 -40
  197. data/lib/opal/models/project.rb +0 -252
  198. data/lib/opal/models/struct_accessors.rb +0 -58
  199. data/lib/opal/models/target.rb +0 -176
  200. data/lib/opal/opal/build.rb +0 -169
  201. data/lib/opal/opal/env/console.rb +0 -66
  202. data/lib/opal/opal/env/fs.rb +0 -98
  203. data/lib/opal/opal/env/object.rb +0 -48
  204. data/lib/opal/opal/environment.rb +0 -139
  205. data/lib/opal/opal/gen.rb +0 -62
  206. data/lib/opal/opal/opal.rb +0 -75
  207. data/lib/opal/opal/repl.rb +0 -38
  208. data/lib/opal/opalfile/dsl.rb +0 -62
  209. data/lib/opal/opalfile/opalfile.rb +0 -133
  210. data/lib/opal/opalfile/task.rb +0 -96
  211. data/lib/opal/opalfile/task_manager.rb +0 -63
  212. data/lib/opal/opalfile/task_scope.rb +0 -52
  213. data/lib/opal/rack/app_server.rb +0 -119
  214. data/lib/opal/rake/opal_task.rb +0 -34
  215. data/opals/opal/README.md +0 -37
  216. data/opals/opal/browser/Opalfile +0 -11
  217. data/opals/opal/browser/README.md +0 -146
  218. data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
  219. data/opals/opal/browser/lib/browser.rb +0 -118
  220. data/opals/opal/browser/lib/browser/builder.rb +0 -41
  221. data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
  222. data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
  223. data/opals/opal/browser/lib/browser/document.rb +0 -146
  224. data/opals/opal/browser/lib/browser/element.rb +0 -487
  225. data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
  226. data/opals/opal/browser/lib/browser/element/css.rb +0 -290
  227. data/opals/opal/browser/lib/browser/element/form.rb +0 -146
  228. data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
  229. data/opals/opal/browser/lib/browser/event/event.rb +0 -177
  230. data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
  231. data/opals/opal/browser/lib/browser/geometry.rb +0 -97
  232. data/opals/opal/browser/lib/browser/json.rb +0 -32
  233. data/opals/opal/browser/lib/browser/request/request.rb +0 -201
  234. data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
  235. data/opals/opal/browser/lib/browser/string.rb +0 -42
  236. data/opals/opal/browser/lib/browser/touch.rb +0 -37
  237. data/opals/opal/browser/lib/browser/vml_context.js +0 -33
  238. data/opals/opal/browser/lib/browser/window.rb +0 -36
  239. data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
  240. data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
  241. data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
  242. data/opals/opal/browser/spec/element/body_spec.rb +0 -11
  243. data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
  244. data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
  245. data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
  246. data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
  247. data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
  248. data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
  249. data/opals/opal/browser/spec/element/show_spec.rb +0 -31
  250. data/opals/opal/browser/spec/element/style_spec.rb +0 -69
  251. data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
  252. data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
  253. data/opals/opal/browser/spec/spec_helper.rb +0 -1
  254. data/opals/opal/opal/Opalfile +0 -14
  255. data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
  256. data/opals/opal/opal/spec/fixtures/super.rb +0 -70
  257. data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
  258. data/opals/opal/opal/spec/language/block_spec.rb +0 -18
  259. data/opals/opal/opal/spec/language/case_spec.rb +0 -103
  260. data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
  261. data/opals/opal/opal/spec/language/super_spec.rb +0 -26
  262. data/opals/opal/runtime/Opalfile +0 -78
  263. data/opals/opal/runtime/README.md +0 -12
  264. data/opals/opal/runtime/docs/debugging.md +0 -51
  265. data/opals/opal/runtime/lib/array.rb +0 -1516
  266. data/opals/opal/runtime/lib/basic_object.rb +0 -49
  267. data/opals/opal/runtime/lib/class.rb +0 -54
  268. data/opals/opal/runtime/lib/dir.rb +0 -36
  269. data/opals/opal/runtime/lib/error.rb +0 -49
  270. data/opals/opal/runtime/lib/false_class.rb +0 -52
  271. data/opals/opal/runtime/lib/file.rb +0 -79
  272. data/opals/opal/runtime/lib/hash.rb +0 -791
  273. data/opals/opal/runtime/lib/io.rb +0 -39
  274. data/opals/opal/runtime/lib/kernel.rb +0 -288
  275. data/opals/opal/runtime/lib/match_data.rb +0 -36
  276. data/opals/opal/runtime/lib/module.rb +0 -109
  277. data/opals/opal/runtime/lib/nil_class.rb +0 -69
  278. data/opals/opal/runtime/lib/number.rb +0 -398
  279. data/opals/opal/runtime/lib/proc.rb +0 -77
  280. data/opals/opal/runtime/lib/range.rb +0 -63
  281. data/opals/opal/runtime/lib/regexp.rb +0 -111
  282. data/opals/opal/runtime/lib/ruby.rb +0 -30
  283. data/opals/opal/runtime/lib/string.rb +0 -328
  284. data/opals/opal/runtime/lib/symbol.rb +0 -40
  285. data/opals/opal/runtime/lib/top_self.rb +0 -33
  286. data/opals/opal/runtime/lib/true_class.rb +0 -45
  287. data/opals/opal/runtime/runtime/browser.js +0 -287
  288. data/opals/opal/runtime/runtime/debug.js +0 -180
  289. data/opals/opal/runtime/runtime/opal.js +0 -1008
  290. data/opals/opal/runtime/runtime/post_opal.js +0 -1
  291. data/opals/opal/runtime/runtime/pre_opal.js +0 -2
  292. data/opals/opal/runtime/runtime/server_side.js +0 -50
  293. data/opals/opal/spec/LICENSE.txt +0 -26
  294. data/opals/opal/spec/Opalfile +0 -5
  295. data/opals/opal/spec/bin/spec.rb +0 -43
  296. data/opals/opal/spec/lib/spec.rb +0 -33
  297. data/opals/opal/spec/lib/spec/dsl.rb +0 -41
  298. data/opals/opal/spec/lib/spec/example.rb +0 -35
  299. data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
  300. data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
  301. data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
  302. data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
  303. data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
  304. data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
  305. data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
  306. data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
  307. data/opals/opal/spec/lib/spec/expectations.rb +0 -46
  308. data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
  309. data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
  310. data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
  311. data/opals/opal/spec/lib/spec/matchers.rb +0 -50
  312. data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
  313. data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
  314. data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
  315. data/opals/opal/spec/lib/spec/runner.rb +0 -48
  316. data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
  317. data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
  318. data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
  319. data/opals/opal/spec/resources/index.html +0 -25
  320. data/opals/opal/spec/resources/spec.css +0 -132
  321. data/spec/cherry_kit/iseq_spec.rb +0 -38
  322. data/spec/spec_helper.rb +0 -16
  323. data/spec/vienna_spec.rb +0 -7
  324. data/yard/index.html +0 -43
  325. data/yard/style.css +0 -765
@@ -0,0 +1,240 @@
1
+ module Kernel
2
+ # Repeatedly executes the given block.
3
+ #
4
+ # @example
5
+ #
6
+ # loop do
7
+ # puts "this will infinetly repeat"
8
+ # end
9
+ #
10
+ # @return [Object] returns the receiver.
11
+ def loop
12
+ `while (true) {
13
+ try {
14
+ #{yield};
15
+ } catch (e) {
16
+ switch (e.$keyword) {
17
+ case 2:
18
+ return e['@exit_value'];
19
+ default:
20
+ throw e;
21
+ }
22
+ }
23
+ }
24
+
25
+ return self;`
26
+ end
27
+
28
+ # Simple equivalent to `Proc.new`. Returns a new proc from the given block.
29
+ #
30
+ # @example
31
+ #
32
+ # proc { puts "a" }
33
+ # # => #<Proc 02002>
34
+ #
35
+ # @return [Proc]
36
+ def proc(&block)
37
+ raise ArgumentError, "block required" unless block_given?
38
+ block
39
+ end
40
+
41
+ def lambda(&block)
42
+ raise ArgumentError, "block required" unless block_given?
43
+ block
44
+ end
45
+
46
+ # Raises an exception. If given a string, this method will raise a
47
+ # RuntimeError with the given string as a message. Otherwise, if the first
48
+ # parameter is a subclass of Exception, then the method will raise a new
49
+ # instance of the given exception class with the string as a message, if it
50
+ # exists, or a fdefault message otherwise.
51
+ #
52
+ # @example String message
53
+ #
54
+ # raise "some error"
55
+ # # => RuntimeError: some error
56
+ #
57
+ # @example Exception subclass
58
+ #
59
+ # raise StandardError, "something went wrong"
60
+ # # => StandardError: something went wrong
61
+ #
62
+ # @param [Exception, String] exception
63
+ # @param [String]
64
+ # @return [nil]
65
+ def raise(exception, string = nil)
66
+ `var msg = nil, exc;
67
+
68
+ if (typeof exception == 'string') {
69
+ msg = exception;
70
+ exc = #{RuntimeError.new `msg`};
71
+ } else if (#{`exception`.kind_of? Exception}.$r) {
72
+ exc = exception;
73
+ } else {
74
+ if (string != nil) msg = string;
75
+ exc = #{`exception`.new `msg`};
76
+ }
77
+ VM.raise(exc);`
78
+ end
79
+
80
+ def fail(exception, string = nil)
81
+ raise exception, string
82
+ end
83
+
84
+ def instance_variable_defined?(name)
85
+ `name = #{name.to_s};
86
+ return self[name] == undefined ? Qfalse : Qtrue;`
87
+ end
88
+
89
+ def instance_variable_get(name)
90
+ `name = #{name.to_s};
91
+ return self[name] == undefined ? nil : self[name];`
92
+ end
93
+
94
+ def instance_variable_set(name, value)
95
+ `name = #{name.to_s};
96
+ return self[name] = value;`
97
+ end
98
+
99
+ # Returns `true` if a block was given to the current method, `false`
100
+ # otherwise.
101
+ #
102
+ # @NOTE: In opal, this is actually a fake method. block_given? is inlined
103
+ # for efficiency and implementation details.
104
+ #
105
+ # @return [true, false]
106
+ def block_given?
107
+ false
108
+ end
109
+
110
+ def method_missing(sym, *args)
111
+ raise NoMethodError, "undefined method `#{sym}` for #{self.inspect}"
112
+ end
113
+
114
+ def to_a
115
+ [self]
116
+ end
117
+
118
+ def tap
119
+ raise LocalJumpError, "no block given" unless block_given?
120
+ yield self
121
+ self
122
+ end
123
+
124
+ def kind_of?(klass)
125
+ `var search = self.$klass;
126
+
127
+ while (search) {
128
+ if (search == klass) {
129
+ return Qtrue;
130
+ }
131
+
132
+ search = search.$super;
133
+ }
134
+
135
+ return Qfalse;`
136
+ end
137
+
138
+ def is_a?(klass)
139
+ kind_of? klass
140
+ end
141
+
142
+ def nil?
143
+ false
144
+ end
145
+
146
+ # Returns `true` if the method with the given id exists on the receiver,
147
+ # `false` otherwise.
148
+ #
149
+ # Implementation Details
150
+ # ----------------------
151
+ # Opals' internals are constructed so that when a method is initially called,
152
+ # a fake method is created on the root basic object, so that any subsequent
153
+ # calls to that method on an object that has not defined it, will yield a
154
+ # method_missing behaviour. For this reason, fake methods are tagged with a
155
+ # `.$rbMM` property so that they will not be counted when this method checks
156
+ # if a given method has been defined.
157
+ #
158
+ # @param [String, Symbol] method_id
159
+ # @return [Boolean]
160
+ def respond_to?(method_id)
161
+ `var method = self.$m[#{`method_id`.to_s}];
162
+
163
+ if (method && !method.$rbMM) {
164
+ return Qtrue;
165
+ }
166
+
167
+ return Qfalse;`
168
+ end
169
+
170
+ def ===(other)
171
+ self == other
172
+ end
173
+
174
+ def __send__(method_id, *args)
175
+ `args.unshift(self);
176
+ return self.$m[#{method_id.to_s}].apply(self, args);`
177
+ end
178
+
179
+ def send(method_id, *args)
180
+ __send__ method_id, *args
181
+ end
182
+
183
+ def class
184
+ `return VM.class_real(self.$klass);`
185
+ end
186
+
187
+ # Returns a random number. If max is `nil`, then the result is 0. Otherwise
188
+ # returns a random number between 0 and max.
189
+ #
190
+ # @example
191
+ #
192
+ # rand # => 0.918378392234
193
+ # rand # => 0.283842929289
194
+ # rand 10 # => 9
195
+ # rand 100 # => 21
196
+ #
197
+ # @param [Numeric] max
198
+ # @return [Numeric]
199
+ def rand(max = `undefined`)
200
+ `if (max != undefined)
201
+ return Math.floor(Math.random() * max);
202
+ else
203
+ return Math.random();`
204
+ end
205
+
206
+ def __id__
207
+ `return self.$hash();`
208
+ end
209
+
210
+ def object_id
211
+ `return self.$hash();`
212
+ end
213
+
214
+ # Returns a simple string representation of the receiver object. The id shown in the string
215
+ # is not just the object_id, but it is mangled to resemble the format output by ruby, which
216
+ # is basically a hex number.
217
+ #
218
+ # FIXME: proper hex output needed
219
+ def to_s
220
+ "#<#{`VM.class_real(self.$klass)`}:0x#{`(self.$hash() * 400487).toString(16)`}>"
221
+ end
222
+
223
+ def inspect
224
+ to_s
225
+ end
226
+
227
+ def instance_eval(&block)
228
+ `block(self)` if block_given?
229
+ self
230
+ end
231
+
232
+ def const_set(name, value)
233
+ `return rb_const_set(VM.class_real(self.$klass), name, value);`
234
+ end
235
+
236
+ def const_defined?(name)
237
+ false
238
+ end
239
+ end
240
+
@@ -0,0 +1,98 @@
1
+
2
+ class Module
3
+
4
+ def name
5
+ `return self.__classid__;`
6
+ end
7
+
8
+ def ===(obj)
9
+ obj.kind_of? self
10
+ end
11
+
12
+ def define_method(method_id, &block)
13
+ raise LocalJumpError, "no block given" unless block_given?
14
+ `VM.define_method(self, #{method_id.to_s}, block)`
15
+ nil
16
+ end
17
+
18
+ def attr_accessor(*attrs)
19
+ attr_reader *attrs
20
+ attr_writer *attrs
21
+ end
22
+
23
+ def attr_reader(*attrs)
24
+ `for (var i = 0; i < attrs.length; i++) {
25
+ var attr = attrs[i];
26
+ var method_id = #{`attr`.to_s};
27
+
28
+ VM.define_method(self, method_id,
29
+ new Function('self', 'var iv = self["@' + method_id + '"]; return iv === undefined ? nil : iv;'));
30
+
31
+ }
32
+
33
+ return nil;`
34
+ end
35
+
36
+ def attr_writer(*attrs)
37
+ `for (var i = 0; i < attrs.length; i++) {
38
+ var attr = attrs[i];
39
+ var method_id = #{`attr`.to_s};
40
+
41
+ VM.define_method(self, method_id + '=',
42
+ new Function('self', 'val', 'return self["@' + method_id + '"] = val;'));
43
+
44
+ }
45
+
46
+ return nil;`
47
+ end
48
+
49
+ def alias_method(new_name, old_name)
50
+ new_name = new_name.to_s
51
+ old_name = old_name.to_s
52
+ `VM.define_method(self, new_name, self.$m_prototype_tbl[old_name])`
53
+ self
54
+ end
55
+
56
+ def to_s
57
+ `return self.__classid__;`
58
+ end
59
+
60
+ def const_set(id, value)
61
+ `return rb_vm_cs(self, #{id.to_s}, value);`
62
+ end
63
+
64
+ def class_eval(str, &block)
65
+ if block_given?
66
+ `block(self)`
67
+ else
68
+ raise "need to compile str"
69
+ end
70
+ end
71
+
72
+ def module_eval(str, &block)
73
+ class_eval str, &block
74
+ end
75
+
76
+ def private
77
+ self
78
+ end
79
+
80
+ def public
81
+ self
82
+ end
83
+
84
+ def protected
85
+ self
86
+ end
87
+
88
+ def include(mod)
89
+ `VM.include_module(self, mod)`
90
+ nil
91
+ end
92
+
93
+ def extend(mod)
94
+ `VM.extend_module(self, mod)`
95
+ nil
96
+ end
97
+ end
98
+
@@ -0,0 +1,41 @@
1
+ class NilClass
2
+
3
+ def to_i
4
+ 0
5
+ end
6
+
7
+ def to_f
8
+ 0.0
9
+ end
10
+
11
+ def to_s
12
+ ""
13
+ end
14
+
15
+ def to_a
16
+ []
17
+ end
18
+
19
+ def inspect
20
+ "nil"
21
+ end
22
+
23
+ def nil?
24
+ true
25
+ end
26
+
27
+ def &(other)
28
+ false
29
+ end
30
+
31
+ def |(other)
32
+ `return other.$r ? Qtrue : Qfalse;`
33
+ end
34
+
35
+ def ^(other)
36
+ `return other.$r ? Qtrue : Qfalse;`
37
+ end
38
+ end
39
+
40
+ NIL = nil
41
+
@@ -0,0 +1,370 @@
1
+ class Numeric
2
+ # Unary Plus - Returns the receivers value
3
+ #
4
+ # @example
5
+ #
6
+ # +5
7
+ # # => 5
8
+ #
9
+ # @return [Numeric] receiver
10
+ def +@
11
+ `return self;`
12
+ end
13
+
14
+ # Unary minus - returns the receiver's value, negated.
15
+ #
16
+ # @example
17
+ #
18
+ # -5
19
+ # # => -5
20
+ #
21
+ # @return [Numeric] result
22
+ def -@
23
+ `return -self;`
24
+ end
25
+
26
+ # Returns `self` modulo `other`. See {#divmod} for more information.
27
+ #
28
+ # @param [Numeric] other number to use for module
29
+ # @return [Numeric] result
30
+ def %(other)
31
+ `return self % other;`
32
+ end
33
+
34
+ def modulo(other)
35
+ `return self % other;`
36
+ end
37
+
38
+ # Bitwise AND.
39
+ #
40
+ # @param [Numeric] other numeric to AND with
41
+ # @return [Numeric]
42
+ def &(num2)
43
+ `return self & num2;`
44
+ end
45
+
46
+ # Performs multiplication
47
+ #
48
+ # @param [Numeric] other number to multiply with
49
+ # @return [Numeric]
50
+ def *(other)
51
+ `return self * other;`
52
+ end
53
+
54
+ # Raises `self` to the power of `other`.
55
+ #
56
+ # @param [Numeric] other number to raise to
57
+ # @return [Numeric]
58
+ def **(other)
59
+ `return Math.pow(self, other);`
60
+ end
61
+
62
+ # Performs addition.
63
+ #
64
+ # @param [Numeric] other number to add
65
+ # @return [Numeric]
66
+ def +(other)
67
+ `return self + other;`
68
+ end
69
+
70
+ # Performs subtraction
71
+ #
72
+ # @param [Numeric] other number to subtract
73
+ # @return [Numeric]
74
+ def -(other)
75
+ `return self - other;`
76
+ end
77
+
78
+ # Performs division
79
+ #
80
+ # @param [Numeric] other number to divide by
81
+ # @return [Numeric]
82
+ def /(other)
83
+ `return self / other;`
84
+ end
85
+
86
+ # Returns `true` if the value of `self` is less than that or `other`, `false`
87
+ # otherwise.
88
+ #
89
+ # @param [Numeric] other number to compare
90
+ # @return [true, false] result of comparison
91
+ def <(other)
92
+ `return self < other ? Qtrue : Qfalse;`
93
+ end
94
+
95
+ # Returns `true` if the value of `self` is less than or equal to `other`,
96
+ # `false` otherwise.
97
+ #
98
+ # @param [Numeric] other number to comapre
99
+ # @return [true, false] result of comparison
100
+ def <=(other)
101
+ `return self <= other ? Qtrue : Qfalse;`
102
+ end
103
+
104
+ # Returns `true` if the value of `self` is greater than `other`, `false`
105
+ # otherwise.
106
+ #
107
+ # @param [Numeric] other number to compare with
108
+ # @return [true, false] result of comparison
109
+ def >(other)
110
+ `return self > other ? Qtrue : Qfalse;`
111
+ end
112
+
113
+ # Returns `true` if `self` is greater than or equal to `other`, `false`
114
+ # otherwise.
115
+ #
116
+ # @param [Numeric] other number to compare with
117
+ # @return [true, false] result of comparison
118
+ def >=(other)
119
+ `return self >= other ? Qtrue : Qfalse;`
120
+ end
121
+
122
+ # Shift `self` left by `count` positions.
123
+ #
124
+ # @param [Numeric] count number to shift
125
+ # @return [Numeric]
126
+ def <<(count)
127
+ `return self << count;`
128
+ end
129
+
130
+ # Shifts 'self' right by `count` positions.
131
+ #
132
+ # @param [Numeric] count number to shift
133
+ # @return [Numeric]
134
+ def >>(count)
135
+ `return self >> count;`
136
+ end
137
+
138
+ # Comparison - Returns '-1', '0', '1' or nil depending on whether `self` is
139
+ # less than, equal to or greater than `other`.
140
+ #
141
+ # @param [Numeric] other number to compare with
142
+ # @return [Number, nil]
143
+ def <=>(other)
144
+ `if (typeof other != 'number') return nil;
145
+ else if (self < other) return -1;
146
+ else if (self > other) return 1;
147
+ return 0;`
148
+ end
149
+
150
+ # Returns `true` if `self` equals `other` numerically, `false` otherwise.
151
+ #
152
+ # @param [Numeric] other number to compare
153
+ # @return [true, false]
154
+ def ==(other)
155
+ `return self.valueOf() === other.valueOf() ? Qtrue : Qfalse;`
156
+ end
157
+
158
+ # Bitwise EXCLUSIVE OR.
159
+ #
160
+ # @param [Numeric] other number to XOR with
161
+ # @return [Numeric]
162
+ def ^(other)
163
+ `return self ^ other;`
164
+ end
165
+
166
+ # Returns the absolute value of `self`.
167
+ #
168
+ # @example
169
+ #
170
+ # -1234.abs
171
+ # # => 1234
172
+ # 1234.abs
173
+ # # => 1234
174
+ #
175
+ # @return [Numeric]
176
+ def abs
177
+ `return Math.abs(self);`
178
+ end
179
+
180
+ def magnitude
181
+ `return Math.abs(self);`
182
+ end
183
+
184
+ # Returns `true` if self is even, `false` otherwise.
185
+ #
186
+ # @return [true, false]
187
+ def even?
188
+ `return (self % 2 == 0) ? Qtrue : Qfalse;`
189
+ end
190
+
191
+ # Returns `true` if self is odd, `false` otherwise.
192
+ #
193
+ # @return [true, false]
194
+ def odd?
195
+ `return (self % 2 == 0) ? Qfalse : Qtrue;`
196
+ end
197
+
198
+ # Returns the number equal to `self` + 1.
199
+ #
200
+ # @example
201
+ #
202
+ # 1.next
203
+ # # => 2
204
+ # (-1).next
205
+ # # => 0
206
+ #
207
+ # @return [Numeric]
208
+ def succ
209
+ `return self + 1;`
210
+ end
211
+
212
+ def next
213
+ `return self + 1;`
214
+ end
215
+
216
+ # Returns the number equal to `self` - 1
217
+ #
218
+ # @example
219
+ #
220
+ # 1.pred
221
+ # # => 0
222
+ # (-1).pred
223
+ # # => -2
224
+ #
225
+ # @return [Numeric]
226
+ def pred
227
+ `return self - 1;`
228
+ end
229
+
230
+ # Iterates the block, passing integer values from `self` upto and including
231
+ # `finish`.
232
+ #
233
+ # @example
234
+ #
235
+ # 5.upto(10) { |i| puts i }
236
+ # # => 5
237
+ # # => 6
238
+ # # => 7
239
+ # # => 8
240
+ # # => 9
241
+ # # => 10
242
+ #
243
+ # @param [Numeric] finish where to stop iteration
244
+ # @return [Numeric] returns the receiver
245
+ def upto(finish)
246
+ `for (var i = self; i <= finish; i++) {
247
+ #{yield `i`};
248
+ }
249
+
250
+ return self;`
251
+ end
252
+
253
+ # Iterates the block, passing decreasing values from `self` downto and
254
+ # including `finish`.
255
+ #
256
+ # @example
257
+ #
258
+ # 5.downto(1) { |x| puts x }
259
+ # # => 5
260
+ # # => 4
261
+ # # => 3
262
+ # # => 2
263
+ # # => 1
264
+ #
265
+ # @param [Numeric] finish where to stop iteration
266
+ # @return [Numeric] returns the receiver
267
+ def downto(finish)
268
+ `for (var i = self; i >= finish; i--) {
269
+ #{yield `i`};
270
+ }
271
+
272
+ return self;`
273
+ end
274
+
275
+ # Iterates the block `self` number of times, passing values in the range 0 to
276
+ # `self` - 1.
277
+ #
278
+ # @example
279
+ #
280
+ # 5.times { |x| puts x }
281
+ # # => 0
282
+ # # => 1
283
+ # # => 2
284
+ # # => 3
285
+ # # => 4
286
+ #
287
+ # @return [Numeric] returns the receiver
288
+ def times
289
+ `for (var i = 0; i < self; i++) {
290
+ #{yield `i`};
291
+ }
292
+
293
+ return self;`
294
+ end
295
+
296
+ # Bitwise OR.
297
+ #
298
+ # @param [Numeric] other number to OR with
299
+ # @return [Numeric]
300
+ def |(other)
301
+ `return self | other;`
302
+ end
303
+
304
+ # Returns `true` if `self` is zero, `false` otherwise.
305
+ #
306
+ # @return [true, false]
307
+ def zero?
308
+ `return self == 0 ? Qtrue : Qfalse;`
309
+ end
310
+
311
+ # Returns the receiver if it is not zero, `nil` otherwise
312
+ #
313
+ # @return [Numeric, nil]
314
+ def nonzero?
315
+ `return self == 0 ? nil : self;`
316
+ end
317
+
318
+ # One's complement: returns a number where each bit is flipped.
319
+ #
320
+ # @return [Numeric]
321
+ def ~
322
+ `return ~self;`
323
+ end
324
+
325
+ # Returns the smallest integer greater than or equal to `num`.
326
+ #
327
+ # @example
328
+ #
329
+ # 1.ceil # => 1
330
+ # 1.2.ceil # => 2
331
+ # (-1.2).ceil # => -1
332
+ # (-1.0).ceil # => -1
333
+ #
334
+ # @return [Numeric]
335
+ def ceil
336
+ `return Math.ceil(self);`
337
+ end
338
+
339
+ # Returns the largest integer less than or equal to `self`.
340
+ #
341
+ # @example
342
+ #
343
+ # 1.floor # => 1
344
+ # (-1).floor # => -1
345
+ #
346
+ # @return [Numeric]
347
+ def floor
348
+ `return Math.floor(self);`
349
+ end
350
+
351
+ # Returns `true` if self is an ineteger, `false` otherwise.
352
+ #
353
+ # @return [true, false]
354
+ def integer?
355
+ `return self % 1 == 0 ? Qtrue : Qfalse;`
356
+ end
357
+
358
+ def inspect
359
+ `return self.toString();`
360
+ end
361
+
362
+ def to_s
363
+ `return self.toString();`
364
+ end
365
+
366
+ def to_i
367
+ `return parseInt(self);`
368
+ end
369
+ end
370
+