opal 0.0.1 → 0.1.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 (306) hide show
  1. data/.gitignore +10 -1
  2. data/.gitmodules +0 -0
  3. data/Opalfile +371 -0
  4. data/README.md +45 -0
  5. data/Rakefile +237 -34
  6. data/VERSION +1 -1
  7. data/bin/opal +13 -0
  8. data/demos/apps/browser_demo/index.html +11 -0
  9. data/demos/apps/browser_demo/lib/browser_demo.rb +31 -0
  10. data/demos/apps/simple_opal/Opalfile +13 -0
  11. data/demos/apps/simple_opal/index.html +11 -0
  12. data/demos/apps/simple_opal/lib/app_controller.rb +62 -0
  13. data/demos/apps/simple_opal/lib/main_window.rb +146 -0
  14. data/demos/browser/request/index.html +52 -0
  15. data/demos/browser/request/request.rb +48 -0
  16. data/gen/browser/__PROJECT_NAME__/index.html +10 -0
  17. data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +1 -0
  18. data/lib/opal.rb +48 -3
  19. data/lib/opal/builders/base.rb +50 -0
  20. data/lib/opal/builders/css.rb +46 -0
  21. data/lib/opal/builders/javascript.rb +44 -0
  22. data/lib/opal/builders/opal.rb +79 -0
  23. data/lib/opal/builders/ruby.rb +50 -0
  24. data/lib/opal/builders/ruby/generate.rb +1851 -0
  25. data/lib/opal/builders/ruby/nodes.rb +210 -0
  26. data/lib/opal/builders/ruby/ruby.rb +916 -0
  27. data/lib/opal/builders/ruby/ruby_parser.rb +6008 -0
  28. data/lib/opal/builders/ruby/ruby_parser.rb.y +1451 -0
  29. data/lib/opal/models/build_item.rb +104 -0
  30. data/lib/opal/models/hash_struct.rb +40 -0
  31. data/lib/opal/models/project.rb +215 -0
  32. data/lib/opal/models/struct_accessors.rb +58 -0
  33. data/lib/opal/models/target.rb +176 -0
  34. data/lib/opal/opal/env/console.rb +66 -0
  35. data/lib/opal/opal/env/fs.rb +98 -0
  36. data/lib/opal/opal/env/object.rb +48 -0
  37. data/lib/opal/opal/environment.rb +139 -0
  38. data/lib/opal/opal/gen.rb +62 -0
  39. data/lib/opal/opal/opal.rb +68 -0
  40. data/lib/opal/opal/repl.rb +38 -0
  41. data/lib/opal/opalfile/dsl.rb +62 -0
  42. data/lib/opal/opalfile/opalfile.rb +133 -0
  43. data/lib/opal/opalfile/task.rb +96 -0
  44. data/lib/opal/opalfile/task_manager.rb +63 -0
  45. data/lib/opal/opalfile/task_scope.rb +52 -0
  46. data/lib/opal/rack/app_server.rb +119 -0
  47. data/opals/aristo/README.md +16 -0
  48. data/opals/browser/Opalfile +11 -0
  49. data/opals/browser/README.md +146 -0
  50. data/opals/browser/SIZZLE_LICESNSE.txt +148 -0
  51. data/opals/browser/lib/browser.rb +118 -0
  52. data/opals/browser/lib/browser/builder.rb +41 -0
  53. data/opals/browser/lib/browser/canvas_context.rb +115 -0
  54. data/opals/browser/lib/browser/dimensions.rb +50 -0
  55. data/opals/browser/lib/browser/document.rb +146 -0
  56. data/opals/browser/lib/browser/element.rb +487 -0
  57. data/opals/browser/lib/browser/element/attributes.rb +88 -0
  58. data/opals/browser/lib/browser/element/css.rb +290 -0
  59. data/opals/browser/lib/browser/element/form.rb +146 -0
  60. data/opals/browser/lib/browser/event/dom_events.rb +81 -0
  61. data/opals/browser/lib/browser/event/event.rb +177 -0
  62. data/opals/browser/lib/browser/event/trigger_events.rb +53 -0
  63. data/opals/browser/lib/browser/geometry.rb +97 -0
  64. data/opals/browser/lib/browser/json.rb +32 -0
  65. data/opals/browser/lib/browser/json_parse.js +321 -0
  66. data/opals/browser/lib/browser/request/request.rb +201 -0
  67. data/opals/browser/lib/browser/sizzle.js +1068 -0
  68. data/opals/browser/lib/browser/string.rb +42 -0
  69. data/opals/browser/lib/browser/touch.rb +37 -0
  70. data/{runtime/yaml.js → opals/browser/lib/browser/vml_context.js} +8 -8
  71. data/opals/browser/lib/browser/window.rb +36 -0
  72. data/opals/browser/spec/browser/browser_detection_spec.rb +7 -0
  73. data/opals/browser/spec/document/aref_spec.rb +110 -0
  74. data/opals/browser/spec/document/ready_spec.rb +16 -0
  75. data/opals/browser/spec/element/body_spec.rb +11 -0
  76. data/opals/browser/spec/element/clear_spec.rb +26 -0
  77. data/opals/browser/spec/element/empty_spec.rb +29 -0
  78. data/opals/browser/spec/element/has_class_spec.rb +40 -0
  79. data/opals/browser/spec/element/hidden_spec.rb +23 -0
  80. data/opals/browser/spec/element/hide_spec.rb +31 -0
  81. data/opals/browser/spec/element/remove_spec.rb +25 -0
  82. data/opals/browser/spec/element/show_spec.rb +31 -0
  83. data/opals/browser/spec/element/style_spec.rb +69 -0
  84. data/opals/browser/spec/element/toggle_spec.rb +31 -0
  85. data/opals/browser/spec/element/visible_spec.rb +23 -0
  86. data/opals/browser/spec/spec_helper.rb +1 -0
  87. data/opals/cherry_kit/Opalfile +6 -0
  88. data/opals/cherry_kit/bin/cherry_kit.rb +11 -0
  89. data/opals/cherry_kit/lib/cherry_kit.rb +29 -0
  90. data/opals/foundation/Opalfile +11 -0
  91. data/opals/foundation/bin/foundation.rb +12 -0
  92. data/opals/foundation/lib/foundation.rb +32 -0
  93. data/opals/foundation/lib/foundation/__table_view_desktop/outline_view.rb +57 -0
  94. data/opals/foundation/lib/foundation/__table_view_desktop/table_column.rb +59 -0
  95. data/opals/foundation/lib/foundation/__table_view_desktop/table_header_view.rb +34 -0
  96. data/opals/foundation/lib/foundation/__table_view_desktop/table_view.rb +304 -0
  97. data/opals/foundation/lib/foundation/controllers/array_controller.rb +54 -0
  98. data/opals/foundation/lib/foundation/controllers/controller.rb +74 -0
  99. data/opals/foundation/lib/foundation/controllers/controller_selection_proxy.rb +67 -0
  100. data/opals/foundation/lib/foundation/controllers/object_controller.rb +145 -0
  101. data/opals/foundation/lib/foundation/controllers/view.rb +40 -0
  102. data/opals/foundation/lib/foundation/core/application.rb +476 -0
  103. data/opals/foundation/lib/foundation/core/attributes.rb +146 -0
  104. data/opals/foundation/lib/foundation/core/bindings.rb +125 -0
  105. data/opals/foundation/lib/foundation/core/builder.rb +101 -0
  106. data/opals/foundation/lib/foundation/core/event.rb +112 -0
  107. data/opals/foundation/lib/foundation/core/index_path.rb +49 -0
  108. data/opals/foundation/lib/foundation/core/index_set.rb +97 -0
  109. data/opals/foundation/lib/foundation/core/notification.rb +113 -0
  110. data/opals/foundation/lib/foundation/core/observable.rb +275 -0
  111. data/opals/foundation/lib/foundation/core/observable_array.rb +30 -0
  112. data/opals/foundation/lib/foundation/core/responder.rb +85 -0
  113. data/opals/foundation/lib/foundation/core/run_loop.rb +89 -0
  114. data/opals/foundation/lib/foundation/core/touch.rb +95 -0
  115. data/opals/foundation/lib/foundation/gestures/gesture_recognizer.rb +35 -0
  116. data/opals/foundation/lib/foundation/rendering/render_context.rb +100 -0
  117. data/opals/foundation/lib/foundation/rendering/renderer.rb +137 -0
  118. data/opals/foundation/lib/foundation/rendering/root_theme.rb +77 -0
  119. data/opals/foundation/lib/foundation/rendering/root_theme/button.rb +62 -0
  120. data/opals/foundation/lib/foundation/rendering/root_theme/control.rb +72 -0
  121. data/opals/foundation/lib/foundation/rendering/root_theme/label.rb +54 -0
  122. data/opals/foundation/lib/foundation/rendering/root_theme/scroller.rb +58 -0
  123. data/opals/foundation/lib/foundation/rendering/root_theme/slider.rb +72 -0
  124. data/opals/foundation/lib/foundation/rendering/root_theme/table_view.rb +97 -0
  125. data/opals/foundation/lib/foundation/rendering/root_theme/text_field.rb +55 -0
  126. data/opals/foundation/lib/foundation/rendering/root_theme/view.rb +81 -0
  127. data/opals/foundation/lib/foundation/rendering/theme.rb +38 -0
  128. data/opals/foundation/lib/foundation/table_view/cell.rb +39 -0
  129. data/opals/foundation/lib/foundation/table_view/table.rb +171 -0
  130. data/opals/foundation/lib/foundation/views/button.rb +63 -0
  131. data/opals/foundation/lib/foundation/views/checkbox.rb +28 -0
  132. data/opals/foundation/lib/foundation/views/clip.rb +47 -0
  133. data/opals/foundation/lib/foundation/views/control.rb +199 -0
  134. data/opals/foundation/lib/foundation/views/label.rb +54 -0
  135. data/opals/foundation/lib/foundation/views/scroll.rb +294 -0
  136. data/opals/foundation/lib/foundation/views/scroll_view_desktop.rb +152 -0
  137. data/opals/foundation/lib/foundation/views/scroller.rb +54 -0
  138. data/opals/foundation/lib/foundation/views/slider.rb +93 -0
  139. data/opals/foundation/lib/foundation/views/text_field.rb +83 -0
  140. data/opals/foundation/lib/foundation/views/view.rb +426 -0
  141. data/opals/foundation/lib/foundation/windows/window.rb +191 -0
  142. data/opals/foundation/resources/button/button.css +23 -0
  143. data/{runtime/init.js → opals/foundation/resources/foundation.css} +27 -33
  144. data/opals/foundation/resources/scroll/scroll.css +22 -0
  145. data/opals/foundation/resources/scroll_view/scroll_view.css +3 -0
  146. data/opals/foundation/resources/scroll_view/scroller.css +3 -0
  147. data/opals/foundation/resources/slider/regular/slider.css +3 -0
  148. data/opals/foundation/resources/slider/slider.css +27 -0
  149. data/opals/foundation/resources/table_view/outline_view.css +3 -0
  150. data/opals/foundation/resources/table_view/table_view.css +15 -0
  151. data/opals/foundation/resources/text_field/text_field.css +71 -0
  152. data/opals/foundation/spec/spec_helper.rb +1 -0
  153. data/opals/foundation/spec/system/attributes/get_attribute_spec.rb +69 -0
  154. data/opals/foundation/spec/system/attributes/get_path_spec.rb +44 -0
  155. data/opals/foundation/spec/system/attributes/set_path_spec.rb +24 -0
  156. data/opals/foundation/spec/system/attributes/set_spec.rb +58 -0
  157. data/opals/foundation/spec/system/bindings/bindings.rb +85 -0
  158. data/opals/foundation/spec/system/key_value_binding/bind_spec.rb +43 -0
  159. data/opals/foundation/spec/system/observable/dependant_keys_spec.rb +74 -0
  160. data/opals/foundation/spec/system/observable/observe_spec.rb +292 -0
  161. data/opals/foundation/spec/system/observable/remove_observer_spec.rb +60 -0
  162. data/opals/opal/Opalfile +14 -0
  163. data/opals/opal/spec/core/array/append_spec.rb +30 -0
  164. data/opals/opal/spec/core/array/assoc_spec.rb +29 -0
  165. data/opals/opal/spec/core/array/at_spec.rb +37 -0
  166. data/opals/opal/spec/core/array/clear_spec.rb +22 -0
  167. data/opals/opal/spec/core/array/collect_bang_spec.rb +27 -0
  168. data/opals/opal/spec/core/array/collect_spec.rb +27 -0
  169. data/opals/opal/spec/core/array/compact_spec.rb +15 -0
  170. data/opals/opal/spec/core/array/concat_spec.rb +15 -0
  171. data/opals/opal/spec/core/array/constructor_spec.rb +14 -0
  172. data/opals/opal/spec/core/array/each_spec.rb +9 -0
  173. data/opals/opal/spec/core/array/element_reference_spec.rb +4 -0
  174. data/opals/opal/spec/core/array/first_spec.rb +35 -0
  175. data/opals/opal/spec/core/array/include_spec.rb +9 -0
  176. data/opals/opal/spec/core/array/map_spec.rb +31 -0
  177. data/opals/opal/spec/core/builtin_constants/builtin_constants_spec.rb +7 -0
  178. data/opals/opal/spec/core/false/and_spec.rb +10 -0
  179. data/opals/opal/spec/core/false/inspect_spec.rb +6 -0
  180. data/opals/opal/spec/core/false/or_spec.rb +10 -0
  181. data/opals/opal/spec/core/false/to_s_spec.rb +6 -0
  182. data/opals/opal/spec/core/false/xor_spec.rb +10 -0
  183. data/opals/opal/spec/core/file/join_spec.rb +19 -0
  184. data/opals/opal/spec/core/kernel/instance_eval_spec.rb +0 -0
  185. data/opals/opal/spec/core/kernel/loop_spec.rb +24 -0
  186. data/opals/opal/spec/core/kernel/raise_spec.rb +0 -0
  187. data/opals/opal/spec/core/module/attr_accessor_spec.rb +28 -0
  188. data/opals/opal/spec/core/number/lt_spec.rb +12 -0
  189. data/opals/opal/spec/core/true/and_spec.rb +10 -0
  190. data/opals/opal/spec/core/true/inspect_spec.rb +6 -0
  191. data/opals/opal/spec/core/true/or_spec.rb +10 -0
  192. data/opals/opal/spec/core/true/to_s_spec.rb +6 -0
  193. data/opals/opal/spec/core/true/xor_spec.rb +10 -0
  194. data/opals/opal/spec/fixtures/super.rb +70 -0
  195. data/opals/opal/spec/language/____temp_remove_this.rb +12 -0
  196. data/opals/opal/spec/language/and_spec.rb +62 -0
  197. data/opals/opal/spec/language/array_spec.rb +52 -0
  198. data/opals/opal/spec/language/block_spec.rb +18 -0
  199. data/opals/opal/spec/language/break_spec.rb +36 -0
  200. data/opals/opal/spec/language/case_spec.rb +103 -0
  201. data/opals/opal/spec/language/def_spec.rb +11 -0
  202. data/opals/opal/spec/language/eigenclass_spec.rb +60 -0
  203. data/opals/opal/spec/language/hash_spec.rb +29 -0
  204. data/opals/opal/spec/language/if_spec.rb +54 -0
  205. data/opals/opal/spec/language/loop_spec.rb +11 -0
  206. data/opals/opal/spec/language/metaclass_spec.rb +21 -0
  207. data/opals/opal/spec/language/method_spec.rb +64 -0
  208. data/opals/opal/spec/language/next_spec.rb +25 -0
  209. data/opals/opal/spec/language/or_spec.rb +34 -0
  210. data/opals/opal/spec/language/redo_spec.rb +24 -0
  211. data/opals/opal/spec/language/rescue_spec.rb +20 -0
  212. data/opals/opal/spec/language/return_spec.rb +47 -0
  213. data/opals/opal/spec/language/string_spec.rb +25 -0
  214. data/opals/opal/spec/language/super_spec.rb +26 -0
  215. data/opals/opal/spec/language/until_spec.rb +157 -0
  216. data/opals/opal/spec/language/while_spec.rb +163 -0
  217. data/opals/opal/spec/spec_helper.rb +5 -0
  218. data/opals/runtime/Opalfile +68 -0
  219. data/opals/runtime/README.md +12 -0
  220. data/opals/runtime/docs/debugging.md +51 -0
  221. data/opals/runtime/lib/array.rb +1516 -0
  222. data/opals/runtime/lib/basic_object.rb +49 -0
  223. data/opals/runtime/lib/class.rb +54 -0
  224. data/opals/runtime/lib/dir.rb +36 -0
  225. data/opals/runtime/lib/error.rb +49 -0
  226. data/opals/runtime/lib/false_class.rb +52 -0
  227. data/opals/runtime/lib/file.rb +79 -0
  228. data/opals/runtime/lib/hash.rb +791 -0
  229. data/opals/runtime/lib/io.rb +39 -0
  230. data/opals/runtime/lib/kernel.rb +288 -0
  231. data/opals/runtime/lib/match_data.rb +36 -0
  232. data/opals/runtime/lib/module.rb +109 -0
  233. data/opals/runtime/lib/nil_class.rb +69 -0
  234. data/opals/runtime/lib/number.rb +398 -0
  235. data/opals/runtime/lib/proc.rb +77 -0
  236. data/opals/runtime/lib/range.rb +63 -0
  237. data/opals/runtime/lib/regexp.rb +111 -0
  238. data/opals/runtime/lib/ruby.rb +30 -0
  239. data/opals/runtime/lib/string.rb +328 -0
  240. data/opals/runtime/lib/symbol.rb +40 -0
  241. data/opals/runtime/lib/top_self.rb +33 -0
  242. data/opals/runtime/lib/true_class.rb +45 -0
  243. data/opals/runtime/runtime/browser.js +287 -0
  244. data/opals/runtime/runtime/debug.js +182 -0
  245. data/opals/runtime/runtime/opal.js +1010 -0
  246. data/opals/runtime/runtime/post_opal.js +1 -0
  247. data/opals/runtime/runtime/pre_opal.js +2 -0
  248. data/opals/runtime/runtime/server_side.js +50 -0
  249. data/opals/spec/LICENSE.txt +26 -0
  250. data/opals/spec/Opalfile +5 -0
  251. data/opals/spec/bin/spec.rb +43 -0
  252. data/opals/spec/lib/spec.rb +33 -0
  253. data/opals/spec/lib/spec/dsl.rb +41 -0
  254. data/opals/spec/lib/spec/example.rb +35 -0
  255. data/opals/spec/lib/spec/example/before_and_after_hooks.rb +81 -0
  256. data/opals/spec/lib/spec/example/errors.rb +42 -0
  257. data/opals/spec/lib/spec/example/example_group.rb +37 -0
  258. data/opals/spec/lib/spec/example/example_group_factory.rb +43 -0
  259. data/opals/spec/lib/spec/example/example_group_hierarchy.rb +45 -0
  260. data/opals/spec/lib/spec/example/example_group_methods.rb +142 -0
  261. data/opals/spec/lib/spec/example/example_group_proxy.rb +41 -0
  262. data/opals/spec/lib/spec/example/example_methods.rb +73 -0
  263. data/opals/spec/lib/spec/example/example_proxy.rb +48 -0
  264. data/opals/spec/lib/spec/expectations.rb +46 -0
  265. data/opals/spec/lib/spec/expectations/errors.rb +35 -0
  266. data/opals/spec/lib/spec/expectations/fail_with.rb +37 -0
  267. data/opals/spec/lib/spec/expectations/handler.rb +48 -0
  268. data/opals/spec/lib/spec/matchers.rb +50 -0
  269. data/opals/spec/lib/spec/matchers/be.rb +26 -0
  270. data/opals/spec/lib/spec/matchers/generated_descriptions.rb +47 -0
  271. data/opals/spec/lib/spec/matchers/operator_matcher.rb +66 -0
  272. data/opals/spec/lib/spec/runner.rb +48 -0
  273. data/opals/spec/lib/spec/runner/example_group_runner.rb +71 -0
  274. data/opals/spec/lib/spec/runner/formatter/html_formatter.rb +100 -0
  275. data/opals/spec/lib/spec/runner/formatter/terminal_formatter.rb +82 -0
  276. data/opals/spec/lib/spec/runner/options.rb +63 -0
  277. data/opals/spec/lib/spec/runner/reporter.rb +123 -0
  278. data/opals/spec/resources/index.html +25 -0
  279. data/opals/spec/resources/spec.css +132 -0
  280. data/spec/cherry_kit/iseq_spec.rb +38 -0
  281. data/spec/spec_helper.rb +16 -0
  282. data/spec/vienna_spec.rb +7 -0
  283. data/yard/index.html +43 -0
  284. data/yard/style.css +765 -0
  285. metadata +312 -49
  286. data/docs/jarv.rdoc +0 -27
  287. data/runtime/array.js +0 -153
  288. data/runtime/class.js +0 -469
  289. data/runtime/compar.js +0 -73
  290. data/runtime/dir.js +0 -115
  291. data/runtime/enum.js +0 -74
  292. data/runtime/file.js +0 -165
  293. data/runtime/gem.js +0 -241
  294. data/runtime/hash.js +0 -181
  295. data/runtime/load.js +0 -251
  296. data/runtime/module.js +0 -98
  297. data/runtime/number.js +0 -148
  298. data/runtime/object.js +0 -522
  299. data/runtime/opal.js +0 -200
  300. data/runtime/parse.js +0 -2218
  301. data/runtime/range.js +0 -56
  302. data/runtime/re.js +0 -91
  303. data/runtime/string.js +0 -199
  304. data/runtime/variable.js +0 -184
  305. data/runtime/vm.js +0 -1150
  306. data/tasks/build.rb +0 -16
data/runtime/class.js DELETED
@@ -1,469 +0,0 @@
1
- /*
2
- * class.js
3
- * opal
4
- *
5
- * Created by Adam Beynon.
6
- * Copyright 2010 Adam Beynon.
7
- *
8
- * Permission is hereby granted, free of charge, to any person obtaining a copy
9
- * of this software and associated documentation files (the "Software"), to deal
10
- * in the Software without restriction, including without limitation the rights
11
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
- * copies of the Software, and to permit persons to whom the Software is
13
- * furnished to do so, subject to the following conditions:
14
- *
15
- * The above copyright notice and this permission notice shall be included in
16
- * all copies or substantial portions of the Software.
17
- *
18
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
24
- * THE SOFTWARE.
25
- */
26
-
27
-
28
- function rb_class_inherited(super_class, klass) {
29
- if (!super_class) super_class = rb_cObject ;
30
- // return rb_funcall(super_class, "inherited", klass);
31
- };
32
-
33
- function rb_define_class(id, super_class) {
34
- var k;
35
- // if already defined, just ensure right type then return existing class/mod.
36
- if (rb_const_defined(rb_cObject, id)) {
37
- k = rb_const_get(rb_cObject, id);
38
- if (!(k.flags & T_CLASS)) {
39
- throw id + " is not a class"
40
- }
41
- if (k.sup != super_class) {
42
- if (k != rb_cObject) {
43
- throw id + " is already defined"
44
- }
45
- }
46
- return k
47
- }
48
- if (!super_class) {
49
- console.log("no superclass given for " + id + " . Object assumed");
50
- }
51
- k = rb_define_class_id(id, super_class);
52
- rb_class_tbl[id] = k;
53
-
54
- // class bundle...?
55
- // rb_ivar_set(k, '__bundle__', window.vn_current_bundle);
56
-
57
- rb_name_class(k, id);
58
- rb_const_set(rb_cObject, id, k);
59
- rb_class_inherited(super_class, k);
60
- return k;
61
- }
62
-
63
- function rb_define_class_under(outer, id, super_klass) {
64
- var klass;
65
- // if already defined in context... just ensure it is a macthing class def
66
- /**
67
- this should be const_defined_at
68
- */
69
- if (rb_const_defined_at(outer, id)) {
70
- // klass = VN.const_get_at(outer, id);
71
- /**
72
- this should be const_get_at
73
- */
74
- // klass = outer.$c_g_a(id);
75
- klass = rb_const_get_at(outer, id);
76
- // console.log(klass);
77
- // if (!(klass.flags & VN.CLASS) {
78
- // VN.type_error(id + ' is not a class');
79
- // }
80
- // if (RClass.real(klass.$super) != super_klass) {
81
- // // avoid error for cObject
82
- // if (klass != cObject) {
83
- // VN.name_error(id + ' is already defined');
84
- // }
85
- //
86
- // }
87
- return klass;
88
- }
89
- // not existing...
90
- if (!super_klass) {
91
- VN.warning('no super class for `' + VN.class2name(outer), + '::' + id + '`, Object assumed');
92
- }
93
- klass = rb_define_class_id(id, super_klass);
94
-
95
- rb_name_class(klass, id);
96
- rb_const_set(outer, id, klass);
97
- rb_class_inherited(super_klass, klass);
98
-
99
- return klass;
100
- };
101
-
102
- RClass.class2name = function(klass) {
103
- return klass.$class_name();
104
- };
105
-
106
- RClass.obj_classname = function(obj) {
107
- return VN.class2name(obj.$klass);
108
- };
109
-
110
- function make_metametaclass(metaclass) {
111
- console.log("wwowow");
112
- var metametaclass, super_of_metaclass;
113
-
114
- if (metaclass.klass == metaclass) {
115
- // console.log(1);
116
- metametaclass = rb_class_boot(null);
117
- metametaclass.klass = metametaclass;
118
- }
119
- else {
120
- // console.log(2);
121
- metametaclass = rb_class_boot(null);
122
- metametaclass.klass = metaclass.klass.klass == metaclass.klass ? make_metametaclass(metaclass.klass) : metaclass.klass.klass;
123
- }
124
- // console.log(1);
125
- FL_SET(metametaclass, FL_SINGLETON);
126
- // console.log(2);
127
- rb_singleton_class_attached(metametaclass, metaclass);
128
- metaclass.klass = metametaclass;
129
-
130
- super_of_metaclass = metaclass.sup;
131
- while (FL_TEST(super_of_metaclass, T_ICLASS)) {
132
- super_of_metaclass = super_of_metaclass.sup;
133
- }
134
-
135
- metametaclass.sup = rb_ivar_get(super_of_metaclass.klass, '__attached__') == super_of_metaclass ? super_of_metaclass.klass : make_metametaclass(super_of_metaclass);
136
- return metametaclass;
137
- };
138
-
139
- function rb_class_real(klass) {
140
- while (klass.flags & FL_SINGLETON) klass = klass.sup;
141
- return klass;
142
- }
143
-
144
- RClass.real = function(klass) {
145
- while ((klass.$singleton == true) || (klass.$type == VN.ICLASS)) {
146
- klass = klass.$super
147
- }
148
- return klass
149
- };
150
-
151
- function class_alloc(type, klass) {
152
- var o = new RClass();
153
- o.klass = klass;
154
- o.flags |= type;
155
- return o;
156
- }
157
-
158
- function rb_class_boot(super_class) {
159
- var k = class_alloc(T_CLASS, rb_cClass);
160
- k.sup = super_class;
161
- return k;
162
- }
163
-
164
- function rb_check_inheritable(super_class) {
165
- if (!FL_TEST(super_class, T_CLASS)) {
166
- throw 'super class must be a Class (' + VN.obj_classname(super_klass) + ' given)';
167
- }
168
- if (super_class.flags & FL_SINGLETON) {
169
- throw 'can\'t make a subclass of singleton class';
170
- }
171
- };
172
-
173
- function rb_class_create(super_klass) {
174
- rb_check_inheritable(super_klass);
175
-
176
- if (super_klass == rb_cClass) {
177
- VN.raise(VN.TypeError, "can't make subclass of Class")
178
- }
179
- return rb_class_boot(super_klass);
180
- };
181
-
182
- function rb_define_class_id(id, super_klass) {
183
- var klass;
184
- if (!super_klass) super_klass = rb_cObject;
185
- klass = rb_class_create(super_klass);
186
- rb_make_metaclass(klass, super_klass.klass);
187
- return klass;
188
- };
189
-
190
- function rb_singleton_class(obj) {
191
- var klass;
192
- // console.log(obj);
193
- // console.log("here");
194
- if (FL_TEST(obj, T_NUMBER) || FL_TEST(obj, T_SYMBOL)) {
195
- console.log(obj);
196
- throw 'can\'t define singleton';
197
- }
198
- // console.log("yeap");
199
- if (FL_TEST(obj.klass, FL_SINGLETON) && rb_ivar_get(obj.klass, '__attached__') == obj) {
200
- klass = obj.klass;
201
- }
202
- else {
203
- // klass = RClass.make_metaclass(obj, obj.$klass);
204
- // console.log(obj);
205
- // klass = obj.$make_metaclass(obj.$klass) ;
206
- klass = rb_make_metaclass(obj, obj.klass);
207
- }
208
- // console.log("nearly done");
209
-
210
- if (FL_TEST(obj, T_CLASS)) {
211
- if (rb_ivar_get(klass.klass, '__attached__') != klass) {
212
- // console.log("this far down");
213
- // console.log(klass);
214
-
215
- //FIXME: def need to fix this.!!!!!!!!!!!!! uncomment basically.
216
- // make_metametaclass(klass);
217
- }
218
- }
219
- // console.log("completely done");
220
-
221
- return klass;
222
- };
223
-
224
- function rb_name_class(klass, id) {
225
- rb_ivar_set(klass, '__classid__', id);
226
- }
227
-
228
- // RClass.prototype.$class_name = function() {
229
- // return VN.class_path(klass.$real());
230
- // };
231
-
232
- function rb_make_metaclass(klass, super_class) {
233
- if (FL_TEST(klass, T_CLASS) && FL_TEST(klass, FL_SINGLETON)) {
234
- return make_metametaclass(klass);
235
- }
236
- else {
237
- var meta = rb_class_boot(super_class);
238
- FL_SET(meta, FL_SINGLETON);
239
- klass.klass = meta;
240
- rb_singleton_class_attached(meta, klass);
241
-
242
- var metasuper = meta.klass;
243
- if (metasuper) {
244
- meta.klass = metasuper;
245
- }
246
- return meta;
247
- }
248
- }
249
-
250
- function rb_singleton_class_attached(klass, obj) {
251
- if (FL_TEST(klass, FL_SINGLETON)) {
252
- rb_ivar_set(klass, '__attached__', obj);
253
- }
254
- }
255
-
256
-
257
- // RClass.prototype.$ = function(id, args) {
258
- // var method = this.$klass.$search_method(id);
259
- // // console.log('searching for: ' + id);
260
- // // console.log(this.$klass);
261
- // if (!method) throw 'VN#funcall cannot find method: ' + id ;
262
- // return method.apply(this, args) ;
263
- // };
264
- //
265
- // /**
266
- // cvar_get (klassvar_get)
267
- // */
268
- // RClass.prototype.$k_g = function(id) {
269
- // var tmp = this;
270
- // var value;
271
- // while(tmp) {
272
- // if (value = tmp.$iv_tbl[id]) {
273
- // return value;
274
- // }
275
- // tmp = tmp.$super;
276
- // }
277
- // VN.name_error('uninitialized class variable ' + id + ' in ' + this);
278
- // return nil ;
279
- // };
280
- //
281
- // /**
282
- // class var defined
283
- // */
284
- // RClass.prototype.$k_d = function(id) {
285
- // var tmp = this;
286
- // var value;
287
- // while(tmp) {
288
- // if (value = tmp.$iv_tbl[id]) {
289
- // return true;
290
- // }
291
- // tmp = tmp.$super;
292
- // }
293
- // return false;
294
- // }
295
- //
296
- // /**
297
- // cvar_set (klassvar_set)
298
- // */
299
- // RClass.prototype.$k_s = function(id, val) {
300
- // return this.$iv_tbl[id] = val;
301
- // };
302
- //
303
- // RClass.prototype.$i_g = function(id) {
304
- // return this.$iv_tbl[id];
305
- // };
306
- //
307
- // RClass.prototype.$i_s = function(id, val) {
308
- // this.$iv_tbl[id] = val;
309
- // return val ;
310
- // }
311
-
312
- /**
313
- Define 'normal' method
314
- */
315
- function rb_define_method(klass, name, func, argc) {
316
- func.rb_argc = argc;
317
- rb_add_method(klass, name, func, NOEX_PUBLIC);
318
- }
319
-
320
- function rb_define_private_method(klass, name, func, argc) {
321
- func.rb_argc = argc;
322
- rb_add_method(klass, name, func, NOEX_PRIVATE);
323
- }
324
-
325
- function rb_define_private_method(klass, name, func, argc) {
326
- func.rb_argc = argc;
327
- rb_add_method(klass, name, func, NOEX_PROTECTED);
328
- }
329
-
330
- function rb_define_singleton_method(klass, name, func, argc) {
331
- rb_define_method(rb_singleton_class(klass), name, func, argc);
332
- }
333
-
334
- function rb_add_method(klass, name, func) {
335
- klass.m_tbl[name] = func;
336
- // func.displayName = klass.iv_tbl.__classid__ + "#" + name;
337
- }
338
-
339
- function rb_define_alloc_func(klass, func) {
340
- rb_define_method(rb_singleton_class(klass), 'allocate', func, 0);
341
- }
342
-
343
-
344
- // RClass.prototype.$def = function(name, func) {
345
- // this.$add_method(name, func);
346
- // };
347
- //
348
- // RClass.prototype.$define_protected_method = function(name, func) {
349
- // this.$add_method(name, func);
350
- // };
351
- //
352
- // RClass.prototype.$define_private_method = function(name, func) {
353
- // this.$add_method(name, func);
354
- // };
355
- //
356
- // RClass.prototype.$undef_method = function(name, func) {
357
- // this.$add_method(name, func);
358
- // };
359
- //
360
- // RClass.prototype.$add_method = function(name, func) {
361
- // this.$m_tbl[name] = func;
362
- // };
363
-
364
- /**
365
- Define singleton
366
- */
367
- // RClass.prototype.$def_s = function(name, func) {
368
- // RClass.singleton_class(this).$def(name, func);
369
- // };
370
- //
371
- // RClass.prototype.$define_alias = function(id1, id2) {
372
- //
373
- // };
374
- //
375
- // RClass.prototype.$define_alloc_func = function(func) {
376
- // RClass.singleton_class(this).$add_method('allocate', func);
377
- // };
378
- //
379
- // RClass.prototype.$undef_alloc_func = function() {
380
- // RClass.singleton_class(this).$add_method('allocate', null);
381
- // };
382
- //
383
- // RClass.prototype.$search_method = function search_method(id) {
384
- // // console.log('checking ' + id);
385
- // // console.log(this);
386
- // var klass = this; var func ;
387
- // // console.log(id);
388
- // // console.log(klass);
389
- // // return null ;
390
- // while (!(func = klass.$m_tbl[id])) {
391
- // klass = klass.$super;
392
- // // console.log(this.$super.__classid__);
393
- // if (!klass) return undefined;
394
- // }
395
- // // console.log('returning true for ' + id);
396
- // return func;
397
- // };
398
- //
399
- // RClass.prototype.$search_super_method = function(from,id) {
400
- // // get current
401
- //
402
- // /**
403
- // Match func = from, to match current function
404
- // THEN search by name from there up, otherwise, chains of more then
405
- // 2 supers will keep rematching second super
406
- // */
407
- // var klass = this; var func;
408
- // while (!((func = klass.$m_tbl[id]) && func == from)) {
409
- // klass = klass.$super;
410
- // if (!klass) return undefined;
411
- // }
412
- // // now skip up one
413
- // klass = klass.$super;
414
- // if (!klass) return undefined;
415
- // while (!(func = klass.$m_tbl[id])) {
416
- // klass = klass.$super;
417
- // if(!klass) return undefined;
418
- // }
419
- // return func;
420
- //
421
- // //
422
- // // var klass = this; var func;
423
- // // while (!((func = klass.$m_tbl[id]) && func != from)) {
424
- // // klass = klass.$super;
425
- // // if(!klass) return undefined;
426
- // // }
427
- // //
428
- // // var klass = this; var func;
429
- // // // console.log('from');
430
- // // // console.log(from);
431
- // // // console.log('views');
432
- // // // console.log(klass.$m_tbl[id]);
433
- // // // console.log(klass.$m_tbl[id] === from);
434
- // // // console.log(klass.$m_tbl[id]);
435
- // // while (!((func = klass.$m_tbl[id]) && func != from)) {
436
- // // klass = klass.$super;
437
- // // if(!klass) return undefined;
438
- // // }
439
- // // // return func = klass.$m_tbl[id];
440
- // // // return func = klass.$m_tbl[id];
441
- // // return func;
442
- //
443
- // // var klass = this; var func ;
444
- // //
445
- // // while (!(func = klass.$m_tbl[id])) {
446
- // // klass = klass.$super;
447
- // // if (!klass) return undefined;
448
- // // }
449
- // // console.log('this point');
450
- // // // we have the current impl, now we need to search for the super from this point..
451
- // // klass = klass.$super;
452
- // // if (!klass) return undefined;
453
- // // while (!(func = klass.$m_tbl[id])) {
454
- // // klass = klass.$super;
455
- // // if (!klass) return undefined;
456
- // // }
457
- // // return func;
458
- // };
459
- //
460
- // RClass.prototype.$ = function(id, args) {
461
- // // var method = this.$search_method(this.$klass, id);
462
- // var method = this.$klass.$search_method(id);
463
- // if (!method) throw 'VN#funcall cannot find method: ' + id ;
464
- // return method.apply(this, args) ;
465
- // };
466
-
467
- /**
468
- $const_set
469
- */