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,218 @@
1
+ var parser = function() {
2
+
3
+ };
4
+
5
+ parser.prototype.do_parse = function() {
6
+ return this.do_parse_js(parser.Racc_arg, false);
7
+ };
8
+
9
+ parser.prototype.do_parse_js = function(arg, in_debug) {
10
+ var action_table = arg[0],
11
+ action_check = arg[1],
12
+ action_default = arg[2],
13
+ action_pointer = arg[3],
14
+
15
+ goto_table = arg[4],
16
+ goto_check = arg[5],
17
+ goto_default = arg[6],
18
+ goto_pointer = arg[7],
19
+
20
+ nt_base = arg[8],
21
+ reduce_table = arg[9],
22
+ token_table = arg[10],
23
+ shift_n = arg[11],
24
+ reduce_n = arg[12],
25
+
26
+ use_result = arg[13];
27
+
28
+ // racc sys vars
29
+ var racc_state = [0],
30
+ racc_tstack = [],
31
+ racc_vstack = [],
32
+
33
+ racc_t = null,
34
+ racc_tok = null,
35
+ racc_val = null,
36
+ racc_read_next = true,
37
+
38
+ racc_user_yyerror = false,
39
+ racc_error_status = 0;
40
+
41
+ var token = null, act = null, i = null, nerr = 0, curstate = null;
42
+
43
+ while (true) {
44
+ // console.log('looping');
45
+ if ((i = action_pointer[racc_state[racc_state.length - 1]]) !== null) {
46
+ // console.log('yeap');
47
+ if (racc_read_next) {
48
+ if (racc_t !== 0) { // not EOF
49
+ token = this.next_token();
50
+ racc_tok = token[0];
51
+ racc_val = token[1];
52
+
53
+ // console.log('token is: ' + token.join(','));
54
+
55
+ if (!racc_tok) { // EOF
56
+ racc_t = 0;
57
+ }
58
+ else {
59
+ racc_t = token_table[racc_tok];
60
+ if (racc_t === undefined) racc_t = 1;
61
+ }
62
+
63
+ // console.log('racc_t: ' + racc_t);
64
+
65
+ racc_read_next = false;
66
+ }
67
+ }
68
+
69
+ i += racc_t;
70
+
71
+ // console.log('i is now ' + i);
72
+
73
+ if ((i < 0) || ((act = action_table[i]) === null) || (action_check[i] !== racc_state[racc_state.length - 1])) {
74
+ act = action_default[racc_state[racc_state.length - 1]];
75
+ }
76
+ }
77
+ else {
78
+ act = action_default[racc_state[racc_state.length - 1]];
79
+ }
80
+
81
+ // console.log('act is: ' + act);
82
+
83
+ // ================
84
+ // = racc_evalact =
85
+ // ================
86
+
87
+ if (act > 0 && act < shift_n) {
88
+ // console.log('shift on ' + act);
89
+ //
90
+ // shift
91
+ //
92
+ if (racc_error_status > 0) {
93
+ // error token
94
+ // console.log('err part 1');
95
+ if (racc_t !== 1) {
96
+ // console.log('err part 2');
97
+ racc_error_status -= 1;
98
+ }
99
+ }
100
+
101
+ racc_vstack.push(racc_val);
102
+ curstate = act;
103
+ racc_state.push(act);
104
+ racc_read_next = true;
105
+ }
106
+ else if (act < 0 && act > -reduce_n) {
107
+ // console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ reduce on ' + act);
108
+ //
109
+ // reduce
110
+ //
111
+ var reduce_i = act * -3,
112
+ reduce_len = reduce_table[reduce_i],
113
+ reduce_to = reduce_table[reduce_i + 1],
114
+ method_id = reduce_table[reduce_i + 2];
115
+
116
+ var tmp_v = racc_vstack.slice(racc_vstack.length - reduce_len);
117
+ // console.log('reduce len is: ' + reduce_len);
118
+ // console.log('tmp_v is: ' + tmp_v.join(', '));
119
+
120
+ // pop for number of reductions
121
+ while(reduce_len--) {
122
+ // console.log('popping: ' + reduce_len);
123
+ racc_state.pop();
124
+ racc_vstack.pop();
125
+ racc_tstack.pop();
126
+ }
127
+
128
+ if (use_result) {
129
+ // msgsend..we push on result of method call..?
130
+ // console.log('reducing: ' + method_id);
131
+ // console.log('['+tmp_v.join(', ')+']');
132
+ // console.log('[' + racc_vstack.join(', ') + ']');
133
+ // racc_vstack.push(method_id);
134
+ // console.log("NEED TO EXECUTE: [" + tmp_v.join(',') + ']');
135
+ // console.log(this[method_id]);
136
+ var reduce_call_result = this[method_id](tmp_v, tmp_v[0]);
137
+ // console.log(reduce_call_result);
138
+ racc_vstack.push(reduce_call_result);
139
+ }
140
+ else {
141
+ throw "not using result?!?!?!?!?!";
142
+ }
143
+
144
+ racc_tstack.push(reduce_to);
145
+
146
+ // console.log('VSTACK: [' + racc_vstack.join(', ') + ']');
147
+
148
+ var k1 = reduce_to - nt_base;
149
+ // console.log('k1 is ' +k1);
150
+ // console.log("goto pointer is: " + goto_pointer[k1]);
151
+ if ((reduce_i = goto_pointer[k1]) !== null) {
152
+
153
+ reduce_i += racc_state[racc_state.length - 1];
154
+ // console.log("reduce_i is now: " + reduce_i);
155
+ // console.log("-- potential curstate is: " + goto_table[reduce_i]);
156
+ if ((reduce_i >= 0) && ((curstate = goto_table[reduce_i]) !== null) &&
157
+ (curstate !== undefined) && (goto_check[reduce_i] === k1)) {
158
+ // curstate = curstate; ..?
159
+ // console.log('========== return current state: ' + curstate);
160
+ racc_state.push(curstate);
161
+ }
162
+ else {//
163
+ // console.log("dont do this??");
164
+ // curstate = k1;
165
+ // console.log("=========== PUSHING curstate " + curstate);
166
+ // console.log('=========== goto default is: ' + goto_default[k1]);
167
+ racc_state.push(goto_default[k1]);
168
+ }
169
+ // tmp_v is return value from stack
170
+ // racc_vstack.push(tmp_v[0]);
171
+
172
+ }
173
+ else {
174
+ // console.log('GOTO default down here init!!!!!!!!!!!');
175
+ racc_state.push(goto_default[k1]);
176
+ }
177
+
178
+ // return;
179
+ }
180
+ else if (act === shift_n) {
181
+ // console.log('accept on ' + act);
182
+ //
183
+ // accept
184
+ //
185
+ // console.log('accepting!!!!');
186
+ // console.log(racc_vstack[0]);
187
+ return racc_vstack[0];
188
+ }
189
+ else if (act === -reduce_n) {
190
+ // console.log('error on ' + act);
191
+ //
192
+ // error
193
+ //
194
+ // console.log('racc error status: ' + racc_error_status);
195
+ // console.log(racc_tok + ", " + racc_val);
196
+ throw new Error('syntax error, unexpected ' + racc_tok);
197
+ return;
198
+ }
199
+ else {
200
+ throw "Racc - unknown action: " + act;
201
+ }
202
+
203
+ // return;
204
+ }
205
+ };
206
+
207
+ // default next token implementation
208
+ parser.prototype.next_token = function() {
209
+ throw "next_token is not defined for parser."
210
+ };
211
+
212
+ parser.prototype.yyerror = function(err) {
213
+ throw "yyerror: " + err;
214
+ };
215
+
216
+ parser.prototype._reduce_none = function(val, result) {
217
+ return result;
218
+ };
@@ -0,0 +1,153 @@
1
+ #!/usr/bin/env ruby -wKU
2
+
3
+ class Racc2JS
4
+
5
+ def initialize(source, output = nil)
6
+ @source = source
7
+ @output = output ||
8
+ File.join(File.dirname(source), File.basename(source, '.*') + '.js')
9
+
10
+ @racc_output = File.join(
11
+ File.dirname(source), File.basename(source, '.*') + '.rb')
12
+ end
13
+
14
+ def generate
15
+ puts "generating racc parser..."
16
+ `racc --output-file=#@racc_output #@source`
17
+ puts "loading generated parser.."
18
+ self.class.module_eval File.read(File.expand_path(@racc_output))
19
+ # we rely on only constant under our class being our new generated parser..
20
+ parser = self.class.constants[0]
21
+ raise "no suitable parser found in #@racc_output" unless parser
22
+ puts "using parser: #{parser}"
23
+ @parser_name = parser.to_s
24
+ @parser = self.class.const_get(parser)
25
+
26
+ @parser_output = []
27
+ handle_parser_runtime
28
+ handle_racc_arg
29
+ handle_racc_actions
30
+
31
+ # write output to our destination
32
+ File.open(@output, 'w') { |o| o.puts pre + @parser_output.join('') + post }
33
+
34
+ # remove temp ruby file
35
+ File.delete @racc_output
36
+ end
37
+
38
+ # pre code
39
+ def pre
40
+ %Q[var #@parser_name = (function() {\n]
41
+ end
42
+
43
+ # post code
44
+ def post
45
+ %Q[\n return parser;
46
+ })();
47
+
48
+ if (typeof require !== 'undefined' && typeof module !== 'undefined') {
49
+ exports.#@parser_name = #@parser_name;
50
+ }
51
+ ]
52
+ end
53
+
54
+ # add parser runtime to @parser_output
55
+ def handle_parser_runtime
56
+ source = File.read(File.join(File.dirname(__FILE__), 'parser.js'))
57
+ @parser_output << source
58
+ end
59
+
60
+ # handle racc table
61
+ def handle_racc_arg
62
+ racc_arg = @parser::Racc_arg
63
+
64
+ @parser_output << "parser.Racc_arg = [\n"
65
+
66
+ # puts racc_arg
67
+ racc_arg.each_with_index do |arg, idx|
68
+ @parser_output.push "," if idx > 0
69
+
70
+ case arg
71
+ when Array
72
+ @parser_output << "["
73
+
74
+ arg.each_with_index do |ary_item, ary_idx|
75
+ @parser_output.push "," if ary_idx > 0
76
+ @parser_output.push ruby_to_javascript ary_item
77
+ end
78
+
79
+ @parser_output << "]"
80
+ when Hash
81
+ @parser_output << "{"
82
+ done = false
83
+ arg.each do |key, value|
84
+ @parser_output.push "," if done
85
+ done = true
86
+
87
+ @parser_output.push key.to_s.inspect
88
+ @parser_output.push ": "
89
+ @parser_output.push ruby_to_javascript(value)
90
+ end
91
+
92
+ @parser_output << "}"
93
+ else
94
+ @parser_output << ruby_to_javascript(arg)
95
+ end
96
+ end
97
+
98
+ @parser_output << "];"
99
+ end
100
+
101
+ # output ruby values' javascript equivalent
102
+ def ruby_to_javascript(literal)
103
+ case literal
104
+ when Numeric
105
+ literal.to_s
106
+ when NilClass
107
+ # see parser.js - saves space once minimized. - removed.
108
+ 'null'
109
+ when String, Symbol
110
+ literal.to_s.inspect
111
+ when true, false
112
+ literal.to_s
113
+ else
114
+ raise "Error: bad native: #{literal}"
115
+ end
116
+ end
117
+
118
+ # get all method from racc. we get all impl methods, and then output their
119
+ # code to js. we (for now) rely on all methods basically being:
120
+ #
121
+ # result = "val[0] + .."
122
+ #
123
+ # so we assign result a string, which we can then use to output js..hacky, but
124
+ # only way (for now).
125
+ def handle_racc_actions
126
+ # get all methods and unique them.
127
+ reduce_table = @parser::Racc_arg[9].select { |a| Symbol === a }.uniq!
128
+ # remove racc_error and _reduce_none
129
+ reduce_table.delete(:racc_error)
130
+ reduce_table.delete(:_reduce_none)
131
+ # we need a parser to use
132
+ parser = @parser.new
133
+ reduce_table.each do |reduction|
134
+ code = parser.send(reduction, nil, nil, nil)
135
+ @parser_output << %Q[
136
+ parser.prototype.#{reduction} = function(val, result) {
137
+ #{code}
138
+ return result;
139
+ };]
140
+ end
141
+ end
142
+ end
143
+
144
+ #
145
+ # bin
146
+ #
147
+ if ARGV.empty?
148
+ raise "no filename given"
149
+ elsif ARGV.length == 1
150
+ Racc2JS.new(ARGV[0]).generate
151
+ else
152
+ Racc2JS.new(ARGV[0], ARGV[1]).generate
153
+ end
@@ -0,0 +1,4 @@
1
+ Simple json package that uses json2.js. This package aims to have a
2
+ similar/compatible API to the 'json' gem, and is partially implemented
3
+ as it stands.
4
+
@@ -0,0 +1,14 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "json"
5
+ s.version = "0.0.1"
6
+ s.authors = ["Adam Beynon"]
7
+ s.email = ["adam@adambeynon.com"]
8
+ s.homepage = "http://github.com/adambeynon/opal"
9
+ s.summary = "JSON implementation for opal"
10
+
11
+ s.files = Dir.glob("{bin,lib}/**/*") + %w[README.md]
12
+ s.require_path = "lib"
13
+ end
14
+
@@ -0,0 +1,64 @@
1
+ require 'json/ext'
2
+ require 'json/json2'
3
+
4
+ module JSON
5
+
6
+ class JSONError < StandardError; end
7
+
8
+ class ParseError < JSONError; end
9
+
10
+ def self.parse(source, opts = nil)
11
+ `var json = JSON.parse(source);
12
+
13
+ var to_opal = function(value) {
14
+
15
+ switch (typeof value) {
16
+ case 'string':
17
+ return value;
18
+
19
+ case 'number':
20
+ return value;
21
+
22
+ case 'boolean':
23
+ return value ? Qtrue : Qfalse;
24
+
25
+ case 'null':
26
+ return nil;
27
+
28
+ case 'object':
29
+ if (!value) return nil;
30
+
31
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
32
+ var arr = [];
33
+
34
+ for (var i = 0, ii = value.length; i < ii; i++) {
35
+ arr.push(to_opal(value[i]));
36
+ }
37
+
38
+ return arr;
39
+ }
40
+ else {
41
+ var hash = VM.H(), v, assoc;
42
+
43
+ for (var k in value) {
44
+ if (Object.hasOwnProperty.call(value, k)) {
45
+ v = to_opal(value[k]);
46
+ assoc = k.$hash();
47
+ hash.$keys.push(k);
48
+ hash.$assocs[assoc] = v;
49
+ }
50
+ }
51
+ }
52
+
53
+ return hash;
54
+ }
55
+ };
56
+
57
+ return to_opal(json);`
58
+ end
59
+
60
+ def self.generate(obj, opts = nil)
61
+
62
+ end
63
+ end
64
+