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
@@ -1,1451 +0,0 @@
1
- #
2
- # ruby_parser.rb.y
3
- # vienna
4
- #
5
- # Created by Adam Beynon.
6
- # Copyright 2009 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
- class Vienna::RubyParser
28
-
29
- # prechigh
30
- # nonassoc tLOWEST
31
- # nonassoc tLBRACE_ARG
32
- #
33
- # left tLSHFT tRSHFT
34
- # nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD
35
- # left kOR kAND
36
- # right kNOT
37
- # nonassoc kDEFined
38
- # right '=' tOP_ASGN
39
- # left kRESCUE_MOD
40
- # right '?' ':'
41
- # nonassoc tDOT2 tDOT3
42
- # left tOROP
43
- # left tANDOP
44
- # nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
45
- # left '>' tGEQ '<' tLEQ
46
- # left '|' '^'
47
- # left '&'
48
- # left '+' '-'
49
- # left '*' '/' '%'
50
- # right tUMINUS_NUM tUMINUS
51
- # right tPOW
52
- # right '!' '~' tUPLUS
53
- # preclow
54
-
55
- prechigh
56
- right '!' tTILDE tUPLUS
57
- right tPOW
58
- right tUMINUS_NUM tUMINUS
59
- left tSTAR2 tDIVIDE tPERCENT
60
- left tPLUS tMINUS
61
- left tLSHFT tRSHFT
62
- left tAMPER2
63
- left tPIPE tCARET
64
- left '>' tGEQ '<' tLEQ
65
- nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
66
- left tANDOP
67
- left tOROP
68
- nonassoc tDOT2 tDOT3
69
- right '?' ':'
70
- left kRESCUE_MOD
71
- right '=' tOP_ASGN
72
- # left tANDOP
73
- # left tOROP
74
- nonassoc kDEFINED
75
- right kNOT
76
- left kOR kAND
77
- nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD
78
- nonassoc tLBRACE_ARG
79
- nonassoc tLOWEST
80
- preclow
81
-
82
- token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
83
- token kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
84
- token kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD
85
- token kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD
86
- token kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND
87
- token k__LINE__ k__FILE__ k__ENCODING__
88
- token kDEFined kBLOCK_GIVEN
89
-
90
- token tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tLABEL tINTEGER tFLOAT
91
- token tSTRING_CONTENT tCHAR tNTH_REF tBACK_REF tREGEXP_END tUPLUS tUMINUS
92
- token tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT2
93
- token tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC
94
- token tLPAREN tLPAREN_ARG tRPAREN tLBRACK tLBRACE tLBRACE_ARG tSTAR tAMPER
95
- token tLAMBDA tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG
96
- token tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tLAMBEG tUMINUS_NUM
97
- token tSTRING tXSTRING_END
98
-
99
-
100
- rule
101
-
102
- target: program
103
- {
104
- # puts 'well, we got here..'
105
- # puts val[0]
106
- @parser_result = val[0]
107
- result = val[0]
108
- }
109
-
110
- program:
111
- {
112
- self.lex_state = :EXPR_BEG
113
- }
114
- top_compstmt
115
- {
116
- # puts 'program'
117
- # puts val[1]
118
- result = val[1]
119
- }
120
-
121
- top_compstmt: top_stmts opt_terms
122
- {
123
- # puts 'top_compstmt'
124
- # puts val[0]
125
- # puts val[1]
126
- result = val[0]
127
- }
128
-
129
- top_stmts: none
130
- {
131
- result = []
132
- }
133
- | top_stmt
134
- {
135
- result = [val[0]]
136
- }
137
- | top_stmts terms top_stmt
138
- {
139
- result = val[0] + [val[2]]
140
- }
141
- | error top_stmt
142
- {
143
- result = val[1]
144
- }
145
-
146
- top_stmt: stmt
147
- {
148
- result = val[0]
149
- }
150
- | kBEGIN
151
-
152
- bodystmt: compstmt opt_rescue opt_else opt_ensure
153
- {
154
- # puts "erm wtf?!"
155
- # puts val[1]
156
- result = self.node_bodystmt(val[0], val[1], val[2], val[3])
157
- # if val[1]
158
- # pp result
159
- # end
160
- }
161
-
162
- compstmt: stmts opt_terms
163
- {
164
- result = val[0]
165
- }
166
-
167
- stmts: none
168
- {
169
- result = []
170
- }
171
- | stmt
172
- {
173
- result = [val[0]]
174
- }
175
- | stmts terms stmt
176
- {
177
- result = val[0] + [val[2]]
178
- }
179
- | error stmt
180
-
181
- stmt: kALIAS fitem
182
- {
183
- self.lex_state = :EXPR_FNAME
184
- }
185
- fitem
186
- {
187
- result = node :alias, :lhs => val[1], :rhs => val[3]
188
- }
189
- | kALIAS tGVAR tGVAR
190
- | kALIAS tGVAR tBACK_REF
191
- | kALIAS tGVAR tNTH_REF
192
- | kUNDEF undef_list
193
- | stmt kIF_MOD expr_value
194
- {
195
- result = node :if, :expr => val[2], :stmt => [val[0]], :tail => []
196
- }
197
- | stmt kUNLESS_MOD expr_value
198
- {
199
- result = node :unless, :expr => val[2], :stmt => [val[0]], :tail => []
200
- }
201
- | stmt kWHILE_MOD expr_value
202
- {
203
- result = node :while, :expr => val[2], :stmt => [val[0]]
204
- }
205
- | stmt kUNTIL_MOD expr_value
206
- {
207
- result = node :until, :expr => val[2], :stmt => [val[0]]
208
- }
209
- | stmt kRESCUE_MOD stmt
210
- | klEND '{' compstmt '}'
211
- | lhs '=' command_call
212
- {
213
- result = node :assign, :lhs => val[0], :rhs => val[2]
214
- }
215
- | mlhs '=' command_call
216
- | var_lhs tOP_ASGN command_call
217
- {
218
- result = node :op_asgn, :lhs => val[0], :op => val[1], :rhs => val[2]
219
- }
220
- | primary_value '[' opt_call_args rbracket tOP_ASGN command_call
221
- {
222
- puts "in here for #{val[0]}"
223
- }
224
- | primary_value '.' tIDENTIFIER tOP_ASGN command_call
225
- | primary_value '.' tCONSTANT tOP_ASGN command_call
226
- | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
227
- | backref tOP_ASGN command_call
228
- | lhs '=' mrhs
229
- | mlhs '=' arg_value
230
- | mlhs '=' mrhs
231
- | expr
232
-
233
- expr: command_call
234
- | expr kAND expr
235
- {
236
- result = node :andop, :lhs => val[0], :rhs => val[2]
237
- }
238
- | expr kOR expr
239
- {
240
- result = node :orop, :lhs => val[0], :rhs => val[2]
241
- }
242
- | kNOT opt_nl expr
243
- {
244
- result = node :not, :expr => val[2]
245
- }
246
- | '!' command_call
247
- | arg
248
-
249
- expr_value: expr
250
-
251
- command_call: command
252
- | block_command
253
- | kRETURN call_args
254
- {
255
- result = node :return, :call_args => val[1]
256
- }
257
- | kBREAK call_args
258
- {
259
- result = node :break, :call_args => val[1]
260
- }
261
- | kNEXT call_args
262
- {
263
- result = node :next, :call_args => val[1]
264
- }
265
-
266
- block_command: block_call
267
- | block_call '.' operation2 command_args
268
- | block_call tCOLON2 operation2 command_args
269
-
270
- cmd_brace_block: tLBRACE_ARG opt_block_param compstmt '}'
271
-
272
- command: operation command_args =tLOWEST
273
- {
274
- # command call - no brackets/recv
275
- result = node :call, :recv => nil, :meth => val[0], :call_args => val[1]
276
- }
277
- | operation command_args cmd_brace_block
278
- | primary_value '.' operation2 command_args =tLOWEST
279
- {
280
- result = node :call, :recv => val[0], :meth => val[2], :call_args => val[3]
281
- }
282
- | primary_value '.' operation2 command_args cmd_brace_block
283
- | primary_value tCOLON2 operation2 command_args =tLOWEST
284
- | primary_value tCOLON2 operation2 command_args cmd_brace_block
285
- | kSUPER command_args
286
- {
287
- result = node :super, :call_args => val[1]
288
- }
289
- | kYIELD command_args
290
- {
291
- result = node :yield, :call_args => val[1]
292
- }
293
-
294
- mlhs: mlhs_basic
295
- | tLPAREN mlhs_inner rparen
296
-
297
- mlhs_inner: mlhs_basic
298
- | tLPAREN mlhs_inner rparen
299
-
300
- mlhs_basic: mlhs_head
301
- | mlhs_head mlhs_item
302
- | mlhs_head tSTAR mlhs_node
303
- | mlhs_head tSTAR mlhs_node ',' mlhs_post
304
- | mlhs_head tSTAR
305
- | mlhs_head tSTAR ',' mlhs_post
306
- | tSTAR mlhs_node
307
- | tSTAR mlhs_node ',' mlhs_post
308
- | tSTAR
309
- | tSTAR ',' mlhs_post
310
-
311
- mlhs_item: mlhs_node
312
- | tLPAREN mlhs_inner rparen
313
-
314
- mlhs_head: mlhs_item ','
315
- | mlhs_head mlhs_item ','
316
-
317
- mlhs_post: mlhs_item
318
- | mlhs_post ',' mlhs_item
319
-
320
- mlhs_node: variable
321
- | primary_value '[' opt_call_args rbracket
322
- | primary_value '.' tIDENTIFIER
323
- | primary_value tCOLON2 tIDENTIFIER
324
- | primary_value '.' tCONSTANT
325
- | primary_value tCOLON2 tCONSTANT
326
- | tCOLON3 tCONSTANT
327
- | backref
328
-
329
- lhs: variable
330
- | primary_value '[' opt_call_args rbracket
331
- {
332
- result = node :call, :recv => val[0], :meth => '[]', :args => val[2]
333
- }
334
- | primary_value '.' tIDENTIFIER
335
- {
336
- result = node :call, :recv => val[0], :meth => val[2], :call_args => {}
337
- }
338
- | primary_value tCOLON2 tIDENTIFIER
339
- | primary_value '.' tCONSTANT
340
- | primary_value tCOLON2 tCONSTANT
341
- | tCOLON3 tCONSTANT
342
- {
343
- result = node :colon3, :name => val[1]
344
- }
345
- | backref
346
-
347
- cname: tIDENTIFIER
348
- {
349
- puts 'ERROR: cant use identifier for class/mod name'
350
- }
351
- | tCONSTANT
352
- {
353
- result = val[0]
354
- }
355
-
356
- cpath: tCOLON3 cname
357
- {
358
-
359
- }
360
- | cname
361
- {
362
- result = node :path, :cname => val[0]
363
- }
364
- | primary_value tCOLON2 cname
365
-
366
- fname: tIDENTIFIER
367
- | tCONSTANT
368
- | tFID
369
- | op
370
- {
371
- self.lex_state = :EXPR_END
372
- result = val[0]
373
- }
374
- | reswords
375
- {
376
- self.lex_state = :EXPR_END
377
- result = val[0]
378
- }
379
-
380
- fsym: fname
381
- | symbol
382
-
383
- fitem: fsym
384
- | dsym
385
-
386
- undef_list: fitem
387
- | undef_list ',' fitem
388
-
389
- op: '|' | '^' | '&' | tCMP | tEQ | tEQQ
390
- | tMATCH | tNMATCH | '>' | tGEQ | '<' | tLEQ
391
- | tNEQ | tLSHFT | tRSHFT | '+' | '-' | '*'
392
- | tSTAR | '/' | '%' | tPOW | '!' | '~'
393
- | tUPLUS | tUMINUS | tAREF | tASET | '`'
394
-
395
- reswords: k__LINE__ | k__FILE__ | k__ENCODING__
396
- | kBEGIN | kEND | kALIAS
397
- | kAND | kBEGIN | kBREAK
398
- | kCASE | kCLASS | kDEF
399
- | kDEFined | kDO | kELSE
400
- | kELSIF | kEND | kENSURE
401
- | kFALSE | kFOR | kIN
402
- | kMODULE | kNEXT | kNIL
403
- | kNOT | kOR | kREDO
404
- | kRESCUE | kRETRY | kRETURN
405
- | kSELF | kSUPER | kTHEN
406
- | kTRUE | kUNDEF | kWHEN
407
- | kYIELD | kIF | kUNLESS
408
- | kWHILE | kUNTIL | kBLOCK_GIVEN
409
-
410
- arg: lhs '=' arg
411
- {
412
- result = node :assign, :lhs => val[0], :rhs => val[2]
413
- }
414
- | lhs '=' arg kRESCUE_MOD arg
415
- | var_lhs tOP_ASGN arg
416
- {
417
- result = node :op_asgn, :lhs => val[0], :op => val[1], :rhs => val[2]
418
- }
419
- | var_lhs tOP_ASGN arg kRESCUE_MOD arg
420
- | primary_value '[' opt_call_args rbracket tOP_ASGN arg
421
- {
422
- result = node :aset_op_asgn, :recv => val[0], :call_args => val[2], :op => val[4], :arg => val[5]
423
- }
424
- | primary_value '.' tIDENTIFIER tOP_ASGN arg
425
- {
426
- result = node :op_asgn, :lhs => node(:call, :recv => val[0], :meth => val[2], :call_args => {}), :op => val[3], :rhs => val[4]
427
- # result = node :dot_identifier_op_asgn, :lhs => node(:call, :recv => val[0], :meth => val[2]), :op => val[3], :rhs => val[4]
428
- }
429
- | primary_value '.' tCONSTANT tOP_ASGN arg
430
- | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg
431
- | primary_value tCOLON2 tCONSTANT tOP_ASGN arg
432
- | tCOLON3 tCONSTANT tOP_ASGN arg
433
- | backref tOP_ASGN arg
434
- | arg tDOT2 arg
435
- {
436
- result = node :dot2, :start => val[0], :ending => val[2]
437
- }
438
- | arg tDOT3 arg
439
- {
440
- result = node :dot3, :start => val[0], :ending => val[2]
441
- }
442
- | arg '+' arg
443
- {
444
- result = node :opt_plus, :recv => val[0], :meth => '+', :call_args => { :args => [val[2]]}
445
- }
446
- | arg '-' arg
447
- {
448
- result = node :opt_minus, :recv => val[0], :meth => '-', :call_args => { :args => [val[2]]}
449
- }
450
- | arg '*' arg
451
- {
452
- result = node :opt_mult, :recv => val[0], :meth => '*', :call_args => { :args => [val[2]]}
453
- }
454
- | arg '/' arg
455
- {
456
- result = node :opt_div, :recv => val[0], :meth => '/', :call_args => { :args => [val[2]]}
457
- }
458
- | arg '%' arg
459
- {
460
- result = node :call, :recv => val[0], :meth => '%', :call_args => { :args => [val[2]]}
461
- }
462
- | arg tPOW arg
463
- {
464
- result = node :call, :recv => val[0], :meth => '**', :call_args => { :args => [val[2]]}
465
- }
466
- | tUMINUS_NUM tINTEGER tPOW arg
467
- | tUMINUS_NUM tFLOAT tPOW arg
468
- | tUPLUS arg
469
- {
470
- result = node :call, :recv => val[1], :meth => '+@', :call_args => { :args => []}
471
- }
472
- | tUMINUS arg
473
- {
474
- result = node :call, :recv => val[1], :meth => '-@', :call_args => { :args => []}
475
- }
476
- | arg '|' arg
477
- {
478
- result = node :call, :recv => val[0], :meth => '|', :call_args => { :args => [val[2]]}
479
- }
480
- | arg '^' arg
481
- {
482
- result = node :call, :recv => val[0], :meth => '^', :call_args => { :args => [val[2]]}
483
- }
484
- | arg '&' arg
485
- {
486
- result = node :call, :recv => val[0], :meth => '&', :call_args => { :args => [val[2]]}
487
- }
488
- | arg tCMP arg
489
- {
490
- result = node :call, :recv => val[0], :meth => '<=>', :call_args => { :args => [val[2]]}
491
- }
492
- | arg '>' arg
493
- {
494
- result = node :call, :recv => val[0], :meth => '>', :call_args => { :args => [val[2]]}
495
- }
496
- | arg tGEQ arg
497
- {
498
- result = node :call, :recv => val[0], :meth => '>=', :call_args => { :args => [val[2]]}
499
- }
500
- | arg '<' arg
501
- {
502
- result = node :call, :recv => val[0], :meth => '<', :call_args => { :args => [val[2]]}
503
- }
504
- | arg tLEQ arg
505
- {
506
- result = node :call, :recv => val[0], :meth => '<=', :call_args => { :args => [val[2]]}
507
- }
508
- | arg tEQ arg
509
- {
510
- result = node :call, :recv => val[0], :meth => '==', :call_args => { :args => [val[2]]}
511
- }
512
- | arg tEQQ arg
513
- {
514
- result = node :call, :recv => val[0], :meth => '===', :call_args => { :args => [val[2]]}
515
- }
516
- | arg tNEQ arg
517
- {
518
- result = node :call, :recv => val[0], :meth => '!=', :call_args => { :args => [val[2]]}
519
- }
520
- | arg tMATCH arg
521
- {
522
- result = node :call, :recv => val[0], :meth => '=~', :call_args => { :args => [val[2]]}
523
- }
524
- | arg tNMATCH arg
525
- {
526
- result = node :call, :recv => val[0], :meth => '!~', :call_args => { :args => [val[2]]}
527
- }
528
- | '!' arg
529
- {
530
- result = node :not, :expr => val[1]
531
- }
532
- | '~' arg
533
- {
534
- result = node :call, :recv => val[1], :meth => '~', :call_args => { :args => []}
535
- }
536
- | arg tLSHFT arg
537
- {
538
- result = node :call, :recv => val[0], :meth => '<<', :call_args => { :args => [val[2]]}
539
- }
540
- | arg tRSHFT arg
541
- {
542
- result = node :call, :recv => val[0], :meth => '>>', :call_args => { :args => [val[2]]}
543
- }
544
- | arg tANDOP arg
545
- {
546
- result = node :andop, :lhs => val[0], :rhs => val[2]
547
- }
548
- | arg tOROP arg
549
- {
550
- result = node :orop, :lhs => val[0], :rhs => val[2]
551
- }
552
- | kDEFined opt_nl arg
553
- | arg '?' arg opt_nl ':' arg
554
- {
555
- result = node :tertiary, :expr => val[0], :true => val[2], :false => val[5]
556
- }
557
- | primary
558
-
559
- arg_value: arg
560
-
561
- aref_args: none
562
- | args trailer
563
- | args ',' assocs trailer
564
- | assocs trailer
565
-
566
- paren_args: '(' opt_call_args rparen
567
- {
568
- result = val[1]
569
- }
570
-
571
- opt_paren_args: none
572
- {
573
- result = node :call_args, :args => nil
574
- }
575
- | paren_args
576
-
577
- opt_call_args: none
578
- {
579
- result = node :call_args, :args => nil
580
- }
581
- | call_args
582
-
583
- call_args: command
584
- {
585
- result = node :call_args, :args => [val[0]]
586
- }
587
- | args opt_block_arg
588
- {
589
- result = node :call_args, :args => val[0], :block_arg => val[1]
590
- }
591
- | assocs opt_block_arg
592
- {
593
- result = node :call_args, :assocs => val[0], :block_arg => val[1]
594
- }
595
- | args ',' assocs opt_block_arg
596
- {
597
- result = node :call_args, :args => val[0], :assocs => val[2], :block_arg => val[3]
598
- }
599
- | block_arg
600
- {
601
- result = node :call_args, :block_arg => val[0]
602
- }
603
-
604
- command_args: call_args
605
-
606
- block_arg: tAMPER arg_value
607
- {
608
- # puts "here for #{val[1]}"
609
- # puts val[1]
610
- result = self.node :block_arg, :arg => val[1]
611
- }
612
- | '&' arg_value
613
- {
614
- # puts val[1]
615
- result = self.node :block_arg, :arg => val[1]
616
- }
617
-
618
- opt_block_arg: ',' block_arg
619
- {
620
- result = val[1]
621
- }
622
- | ','
623
- | none
624
-
625
- args: arg_value
626
- {
627
- result = [val[0]]
628
- }
629
- | tSTAR arg_value
630
- {
631
- result = [node(:splat, :val => val[1])]
632
- }
633
- | args ',' arg_value
634
- {
635
- result = val[0] + [val[2]]
636
- }
637
- | args ',' tSTAR arg_value
638
- {
639
- result = val[0] + [node(:splat, :val => val[3])]
640
- }
641
-
642
- mrhs: args ',' arg_value
643
- | args ',' tSTAR arg_value
644
- | tSTAR arg_value
645
-
646
- primary: literal
647
- | strings
648
- | xstring
649
- | regexp
650
- | words
651
- | qwords
652
- | tIDENTIFIER do_block
653
- {
654
- # if val[0].node == :self
655
- # result = val[0]
656
- # else
657
- # HACK: this rule shouldnt even exist. But for now it must for "identifier do .. end"
658
- result = node :call, :recv => nil, :meth => val[0], :brace_block => val[1]
659
- # end
660
- }
661
- | var_ref
662
- | backref
663
- | tFID
664
- | k_begin bodystmt k_end
665
- {
666
- result = node :begin, :stmt => val[1]
667
- }
668
- | tLPAREN_ARG expr rparen
669
- | tLPAREN compstmt ')'
670
- {
671
- result = node :lparen, :stmt => val[1]
672
- }
673
- | primary_value tCOLON2 tCONSTANT
674
- {
675
- result = node :colon2, :lhs => val[0], :rhs => val[2]
676
- }
677
- | tCOLON3 tCONSTANT
678
- {
679
- result = node :colon3, :name => val[1]
680
- }
681
- | tLBRACK aref_args ']'
682
- {
683
- result = node :array, :args => val[1]
684
- }
685
- | tLBRACE assoc_list '}'
686
- {
687
- result = node :assoc_list, :list => val[1]
688
- }
689
- | kRETURN
690
- {
691
- result = node :return
692
- }
693
- | kYIELD '(' call_args rparen
694
- {
695
- result = node :yield, :call_args => val[2]
696
- }
697
- | kYIELD '(' rparen
698
- {
699
- result = node :yield
700
- }
701
- | kYIELD
702
- {
703
- result = node :yield
704
- }
705
- | kDEFined opt_nl '(' expr rparen
706
- | kNOT '(' expr rparen
707
- | kNOT '(' rparen
708
- | operation brace_block
709
- {
710
- result = node :call, :recv => nil, :meth => val[0], :brace_block => val[1]
711
- }
712
- | method_call
713
- {
714
- # puts 2
715
- }
716
- | method_call brace_block
717
- {
718
- val[0][:brace_block] = val[1]
719
- result = val[0]
720
- }
721
- | tLAMBDA lambda
722
- {
723
- result = node :lambda, :args => val[1][:args], :body => val[1][:body]
724
- }
725
- | k_if expr_value then compstmt if_tail k_end
726
- {
727
- result = self.node :if, :expr => val[1], :stmt => val[3], :tail => val[4]
728
- }
729
- | k_unless expr_value then compstmt opt_else k_end
730
- {
731
- result = self.node :unless, :expr => val[1], :stmt => val[3], :tail => val[4]
732
- }
733
- | k_while expr_value do compstmt k_end
734
- {
735
- # puts "in node while"
736
- result = node :while, :expr => val[1], :stmt => val[3]
737
- }
738
- | k_until expr_value do compstmt k_end
739
- {
740
- result = node :until, :expr => val[1], :stmt => val[3]
741
- }
742
- | k_case expr_value opt_terms case_body k_end
743
- {
744
- result = node :case, :expr => val[1], :body => val[3]
745
- }
746
- | k_case opt_terms case_body k_end
747
- {
748
- result = node :case, :expr => nil, :body => val[2]
749
- }
750
- | k_for for_var kIN expr_value do compstmt k_end
751
- | k_class cpath superclass bodystmt k_end
752
- {
753
- result = self.node_class(:cpath => val[1], :superclass => val[2], :bodystmt => val[3])
754
- }
755
- | k_class tLSHFT expr term bodystmt k_end
756
- {
757
- result = node :class_shift, :expr => val[2], :bodystmt => val[4]
758
- }
759
- | k_module cpath bodystmt k_end
760
- {
761
- result = self.node_module(:cpath => val[1], :body => val[2])
762
- }
763
- | k_def fname f_arglist bodystmt k_end
764
- {
765
- result = self.node :def, :fname => val[1], :arglist => val[2], :bodystmt => val[3], :line_number => @current_def_linenumber
766
- }
767
- | k_def singleton dot_or_colon fname f_arglist bodystmt k_end
768
- {
769
- result = self.node :def, :singleton => val[1], :fname => val[3], :arglist => val[4], :bodystmt => val[5], :line_number => @current_def_linenumber
770
- }
771
- | kBREAK
772
- {
773
- result = node :break, :call_args => nil
774
- }
775
- | kNEXT
776
- {
777
- result = node :next, :call_args => nil
778
- }
779
- | kREDO
780
- {
781
- result = node :redo
782
- }
783
- | kRETRY
784
-
785
- primary_value: primary
786
-
787
- k_begin: kBEGIN
788
-
789
- k_if: kIF
790
-
791
- k_unless: kUNLESS
792
-
793
- k_while: kWHILE
794
-
795
- k_until: kUNTIL
796
-
797
- k_case: kCASE
798
-
799
- k_for: kFOR
800
-
801
- k_class: kCLASS
802
-
803
- k_module: kMODULE
804
-
805
- k_def: kDEF
806
-
807
- k_end: kEND
808
-
809
- then: term
810
- | kTHEN
811
- | term kTHEN
812
-
813
- do: term
814
- | kDO_COND
815
- | kDO
816
-
817
- if_tail: opt_else
818
- {
819
- result = val[0]
820
- }
821
- | kELSIF expr_value then compstmt if_tail
822
- {
823
- result = [self.node(:elsif, :expr => val[1], :stmt => val[3])] + val[4]
824
- }
825
-
826
- opt_else: none
827
- {
828
- result = []
829
- }
830
- | kELSE compstmt
831
- {
832
- result = [self.node(:else, :stmt => val[1])]
833
- }
834
-
835
- for_var: lhs
836
- | mlhs
837
-
838
- f_marg: f_norm_arg
839
- | tLPAREN f_margs rparen
840
-
841
- f_marg_list: f_marg
842
- | f_marg_list ',' f_marg
843
-
844
- f_margs: f_marg_list
845
- | f_marg_list ',' tSTAR f_norm_arg
846
- | f_marg_list ',' tSTAR f_norm_arg ',' f_marg_list
847
- | f_marg_list ',' tSTAR
848
- | f_marg_list ',' tSTAR ',' f_marg_list
849
- | tSTAR f_norm_arg
850
- | tSTAR f_norm_arg ',' f_marg_list
851
- | tSTAR
852
- | tSTAR ',' f_marg_list
853
-
854
- block_param: f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
855
- | f_arg ',' f_block_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
856
- | f_arg ',' f_block_optarg opt_f_block_arg
857
- | f_arg ',' f_block_optarg ',' f_arg opt_f_block_arg
858
- | f_arg ',' f_rest_arg opt_f_block_arg
859
- | f_arg ','
860
- | f_arg ',' f_rest_arg ',' f_arg opt_f_block_arg
861
- | f_arg opt_f_block_arg
862
- | f_block_optarg ',' f_rest_arg opt_f_block_arg
863
- | f_block_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
864
- | f_block_optarg opt_f_block_arg
865
- | f_block_optarg ',' f_arg opt_f_block_arg
866
- | f_rest_arg opt_f_block_arg
867
- | f_rest_arg ',' f_arg opt_f_block_arg
868
- | f_block_arg
869
-
870
- opt_block_param: none
871
- {
872
- result = nil
873
- }
874
- | block_param_def
875
-
876
- block_param_def: '|' opt_bv_decl '|'
877
- | tOROP
878
- | '|' block_param opt_bv_decl '|'
879
- {
880
- result = val[1]
881
- }
882
-
883
- opt_bv_decl: none
884
- | ';' bv_decls
885
-
886
- bv_decls: bvar
887
- | bv_decls ',' bvar
888
-
889
- bvar: tIDENTIFIER
890
- | f_bad_arg
891
-
892
- lambda: f_larglist lambda_body
893
- {
894
- result = {:args => val[0], :body => val[1]}
895
- }
896
-
897
- f_larglist: '(' f_args opt_bv_decl rparen
898
- | f_args
899
-
900
- lambda_body: tLBRACE compstmt '}'
901
- {
902
- result = val[1]
903
- }
904
- | kDO_LAMBDA compstmt kEND
905
- {
906
- result = val[1]
907
- }
908
-
909
- do_block: kDO_BLOCK opt_block_param compstmt kEND
910
- | kDO opt_block_param compstmt kEND
911
- {
912
- result = node :brace_block, :params => val[1], :stmt => val[2]
913
- }
914
-
915
- block_call: command do_block
916
- {
917
- val[0][:brace_block] = val[1]
918
- result = val[0]
919
- }
920
- | block_call '.' operation2 opt_paren_args
921
- | block_call tCOLON2 operation2 opt_paren_args
922
-
923
- method_call: operation paren_args
924
- {
925
- result = node :call, :recv => nil, :meth => val[0], :call_args => val[1]
926
- }
927
- | primary_value '.' operation2 opt_paren_args
928
- {
929
- result = node :call, :recv => val[0], :meth => val[2], :call_args => val[3]
930
- }
931
- | primary_value tCOLON2 operation2 paren_args
932
- {
933
- result = node :tCOLON2call, :recv => val[0], :meth => val[2], :args => val[3]
934
- puts "tCOLON2call"
935
- }
936
- | primary_value tCOLON2 operation3
937
- {
938
- result = node :tCOLON2call, :recv => val[0], :meth => val[2]
939
- puts "tCOLON2call.noargs."
940
- }
941
- | primary_value '.' paren_args
942
- | primary_value tCOLON2 paren_args
943
- | kSUPER paren_args
944
- {
945
- result = node :super, :call_args => val[1], :paren => true
946
- }
947
- | kSUPER
948
- {
949
- result = node :super, :call_args => nil, :inherit => true
950
- }
951
- | primary_value '[' opt_call_args rbracket
952
- {
953
- result = node :call, :recv => val[0], :meth => '[]', :call_args => val[2]
954
- }
955
-
956
-
957
- brace_block: '{' opt_block_param compstmt '}'
958
- {
959
- result = node :brace_block, :params => val[1], :stmt => val[2]
960
- }
961
- | kDO opt_block_param compstmt kEND
962
- {
963
- result = node :brace_block, :params => val[1], :stmt => val[2]
964
- }
965
-
966
- case_body: kWHEN args then compstmt cases
967
- {
968
- result = [node(:when, :args => val[1], :stmt => val[3])] + val[4]
969
- }
970
-
971
- cases: opt_else
972
- {
973
- result = val[0]
974
- }
975
- | case_body
976
-
977
- opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
978
- {
979
- result = node :rescue, :list => val[1], :var => val[2], :stmt => val[4], :opt_rescue => val[5]
980
- # puts result
981
- }
982
- | none
983
- {
984
- result = nil
985
- }
986
-
987
- exc_list: arg_value
988
- {
989
- result = val[0]
990
- }
991
- | mrhs
992
- {
993
- result = val[0]
994
- }
995
- | none
996
- {
997
- result = nil
998
- }
999
-
1000
- exc_var: tASSOC lhs
1001
- {
1002
- result = val[1]
1003
- }
1004
- | none
1005
- {
1006
- result = nil
1007
- }
1008
-
1009
- opt_ensure: kENSURE compstmt
1010
- {
1011
- result = val[1]
1012
- }
1013
- | none
1014
- {
1015
- result = nil
1016
- }
1017
-
1018
- literal: numeric
1019
- | symbol
1020
- | dsym
1021
-
1022
- strings: string
1023
-
1024
- string: tCHAR
1025
- | string1
1026
- | string string1
1027
-
1028
- string1: tSTRING_BEG string_contents tSTRING_END
1029
- {
1030
- result = node :string, :value => val[1], :beg => val[0]
1031
- }
1032
-
1033
- xstring: tXSTRING_BEG xstring_contents tXSTRING_END
1034
- {
1035
- result = node :xstring, :value => val[1]
1036
- }
1037
-
1038
- regexp: tREGEXP_BEG xstring_contents tREGEXP_END
1039
- {
1040
- result = node :regexp, :value => val[1]
1041
- }
1042
-
1043
- words: tWORDS_BEG ' ' tSTRING_END
1044
- | tWORDS_BEG word_list tSTRING_END
1045
- {
1046
- result = node :words, :list => val[1]
1047
- }
1048
-
1049
- word_list: /* none */
1050
- {
1051
- result = []
1052
- }
1053
- | word_list word
1054
- {
1055
- result = val[0] + [val[1]]
1056
- }
1057
-
1058
- word: string_content
1059
- {
1060
- result = [val[0]]
1061
- }
1062
- | word string_content
1063
- {
1064
- result = val[0] + [val[1]]
1065
- }
1066
-
1067
- qwords: tQWORDS_BEG ' ' tSTRING_END
1068
- | tQWORDS_BEG qword_list tSTRING_END
1069
-
1070
- qword_list:
1071
- {
1072
- # none..
1073
- result = []
1074
- }
1075
- | qword_list tSTRING_CONTENT ' '
1076
-
1077
- string_contents:
1078
- {
1079
- # none..
1080
- result = []
1081
- }
1082
- | string_contents string_content
1083
- {
1084
- result = val[0] + [val[1]]
1085
- }
1086
-
1087
- xstring_contents:
1088
- {
1089
- # none..
1090
- result = []
1091
- }
1092
- | xstring_contents string_content
1093
- {
1094
- result = val[0] + [val[1]]
1095
- }
1096
-
1097
- string_content: tSTRING_CONTENT
1098
- {
1099
- result = node :string_content, :value => val[0]
1100
- }
1101
- | tSTRING_DVAR string_dvar
1102
- {
1103
- result = node :string_dvar, :value => val[1]
1104
- }
1105
- | tSTRING_DBEG compstmt '}'
1106
- {
1107
- result = node :string_dbeg, :value => val[1]
1108
- }
1109
-
1110
- string_dvar: tGVAR
1111
- | tIVAR
1112
- | tCVAR
1113
- | backref
1114
-
1115
- symbol: tSYMBEG sym
1116
- {
1117
- result = node :symbol, :name => val[1]
1118
- }
1119
-
1120
- sym: fname
1121
- | tIVAR
1122
- | tGVAR
1123
- | tCVAR
1124
-
1125
- dsym: tSYMBEG xstring_contents tSTRING_END
1126
- {
1127
- result = node :dsym, :contents => val[1]
1128
- }
1129
-
1130
- numeric: tINTEGER
1131
- {
1132
- result = node :numeric, :value => val[0], :float => false
1133
- }
1134
- | tFLOAT
1135
- {
1136
- result = node :numeric, :value => val[0], :float => true
1137
- }
1138
- | tUMINUS_NUM tINTEGER
1139
- | tUMINUS_NUM tFLOAT
1140
-
1141
- variable: tIDENTIFIER
1142
- {
1143
-
1144
- result = node :identifier, :name => val[0]
1145
- }
1146
- | tIVAR
1147
- {
1148
- result = node :ivar, :name => val[0]
1149
- }
1150
- | tGVAR
1151
- {
1152
- result = node :gvar, :name => val[0]
1153
- }
1154
- | tCONSTANT
1155
- {
1156
- result = node :constant, :name => val[0]
1157
- }
1158
- | tCVAR
1159
- {
1160
- result = node :cvar, :name => val[0]
1161
- }
1162
- | kNIL
1163
- {
1164
- result = node :nil, :name => val[0]
1165
- }
1166
- | kSELF
1167
- {
1168
- result = node :self, :name => val[0]
1169
- }
1170
- | kTRUE
1171
- {
1172
- result = node :true, :name => val[0]
1173
- }
1174
- | kFALSE
1175
- {
1176
- result = node :false, :name => val[0]
1177
- }
1178
- | k__FILE__
1179
- {
1180
- result = node :__FILE__, :name => val[0]
1181
- }
1182
- | k__LINE__
1183
- {
1184
- result = node :__LINE__, :name => val[0]
1185
- }
1186
- | k__ENCODING__
1187
- {
1188
- result = node :__ENCODING__, :name => val[0]
1189
- }
1190
- | kBLOCK_GIVEN
1191
- {
1192
- # added for block_given? support.. :D
1193
- result = node :block_given, :name => val[0]
1194
- }
1195
-
1196
- var_ref: variable
1197
-
1198
- var_lhs: variable
1199
-
1200
- backref: tNTH_REF
1201
- | tBACK_REF
1202
-
1203
- superclass: term
1204
- {
1205
- result = nil
1206
- }
1207
- | '<' expr_value term
1208
- {
1209
- result = node :superclass, :expr => val[1]
1210
- }
1211
- | error term { puts 'OMFG' }
1212
-
1213
- f_arglist: '(' f_args rparen
1214
- {
1215
- result = val[1]
1216
- self.lex_state = :EXPR_BEG
1217
- }
1218
- | f_args term
1219
- {
1220
- result = val[0]
1221
- self.lex_state = :EXPR_BEG
1222
- }
1223
-
1224
- f_args: f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
1225
- {
1226
- result = node_args(val[0], val[2], val[4], nil, val[5])
1227
- }
1228
- | f_arg ',' f_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
1229
- {
1230
- result = node_args(val[0], val[2], val[4], val[6], val[7])
1231
- }
1232
- | f_arg ',' f_optarg opt_f_block_arg
1233
- {
1234
- result = node_args(val[0], val[2], nil, nil, val[3])
1235
- }
1236
- | f_arg ',' f_optarg ',' f_arg opt_f_block_arg
1237
- {
1238
- result = node_args(val[0], val[2], nil, val[4], val[5])
1239
- }
1240
- | f_arg ',' f_rest_arg opt_f_block_arg
1241
- {
1242
- result = node_args(val[0], nil, val[2], nil, val[3])
1243
- }
1244
- | f_arg ',' f_rest_arg ',' f_arg opt_f_block_arg
1245
- {
1246
- result = node_args(val[0], nil, val[2], val[4], val[5])
1247
- }
1248
- | f_arg opt_f_block_arg
1249
- {
1250
- result = node_args(val[0], nil, nil, nil, val[1])
1251
- }
1252
- | f_optarg ',' f_rest_arg opt_f_block_arg
1253
- {
1254
- result = node_args(nil, val[0], val[2], nil, val[3])
1255
- }
1256
- | f_optarg ',' f_rest_arg ',' f_arg opt_f_block_arg
1257
- {
1258
- result = node_args(nil, val[0], val[2], val[4], val[5])
1259
- }
1260
- | f_optarg opt_f_block_arg
1261
- {
1262
- result = node_args(nil, val[0], nil, nil, val[1])
1263
- }
1264
- | f_optarg ',' f_arg opt_f_block_arg
1265
- {
1266
- result = node_args(nil, val[0], nil, val[2], val[3])
1267
- }
1268
- | f_rest_arg opt_f_block_arg
1269
- {
1270
- result = node_args(nil, nil, val[0], nil, val[1])
1271
- }
1272
- | f_rest_arg ',' f_arg opt_f_block_arg
1273
- {
1274
- result = node_args(nil, nil, val[0], val[2], val[3])
1275
- }
1276
- | f_block_arg
1277
- {
1278
- result = node_args(nil, nil, nil, nil, val[0])
1279
- }
1280
- | # none ..
1281
- {
1282
- result = node_args(nil, nil, nil, nil, nil)
1283
- }
1284
-
1285
- f_bad_arg: tCONSTANT
1286
- | tIVAR
1287
- | tGVAR
1288
- | tCVAR
1289
-
1290
- f_norm_arg: f_bad_arg
1291
- | tIDENTIFIER
1292
- {
1293
- # result = val[0]
1294
- result = node :norm_arg, :value => val[0]
1295
- }
1296
- | tIDENTIFIER tASSOC tIDENTIFIER
1297
- {
1298
-
1299
- }
1300
- | tLABEL tIDENTIFIER
1301
- {
1302
- result = node :label_arg, :name => val[0], :value => val[1]
1303
- }
1304
-
1305
- f_arg_item: f_norm_arg
1306
- {
1307
- result = val[0]
1308
- }
1309
- | tLPAREN f_margs rparen
1310
-
1311
- f_arg: f_arg_item
1312
- {
1313
- result = [val[0]]
1314
- }
1315
- | f_arg ',' f_arg_item
1316
- {
1317
- # val[0] + val[2]
1318
- result = val[0] + [val[2]]
1319
- }
1320
-
1321
- f_opt: tIDENTIFIER '=' arg_value
1322
- {
1323
- result = [val[0], val[2]]
1324
- }
1325
-
1326
- f_block_opt: tIDENTIFIER '=' primary_value
1327
-
1328
- f_block_optarg: f_block_opt
1329
- | f_block_optarg ',' f_block_opt
1330
-
1331
- f_optarg: f_opt
1332
- {
1333
- result = [val[0]]
1334
- }
1335
- | f_optarg ',' f_opt
1336
- {
1337
- result = val[0] + [val[2]]
1338
- }
1339
-
1340
- restarg_mark: '*'
1341
- | tSTAR
1342
-
1343
- f_rest_arg: restarg_mark tIDENTIFIER
1344
- {
1345
- result = val[1]
1346
- }
1347
- | restarg_mark
1348
-
1349
- blkarg_mark: '&'
1350
- | tAMPER
1351
-
1352
- f_block_arg: blkarg_mark tIDENTIFIER
1353
- {
1354
- result = val[1]
1355
- }
1356
- | tLABEL blkarg_mark tIDENTIFIER
1357
- {
1358
- result = node :label_arg, :name => val[0], :value => val[1]
1359
- }
1360
-
1361
- opt_f_block_arg: ',' f_block_arg
1362
- {
1363
- result = val[1]
1364
- }
1365
- | none
1366
-
1367
- singleton: var_ref
1368
- | '(' expr rparen
1369
-
1370
- assoc_list: none
1371
- {
1372
- result = []
1373
- }
1374
- | assocs trailer
1375
- {
1376
- result = val[0]
1377
- }
1378
-
1379
- assocs: assoc
1380
- {
1381
- result = [val[0]]
1382
- }
1383
- | assocs ',' assoc
1384
- {
1385
- result = val[0] + [val[2]]
1386
- }
1387
-
1388
- assoc: arg_value tASSOC arg_value
1389
- {
1390
- result = node :assoc, :key => val[0], :value => val[2]
1391
- }
1392
- | tLABEL arg_value
1393
- {
1394
- result = node :label_assoc, :key => val[0], :value => val[1]
1395
- }
1396
-
1397
- operation: tIDENTIFIER
1398
- | tCONSTANT
1399
- | tFID
1400
-
1401
- operation2: tIDENTIFIER
1402
- {
1403
-
1404
- }
1405
- | tCONSTANT
1406
- | tFID
1407
- | op
1408
-
1409
- operation3: tIDENTIFIER
1410
- {
1411
- puts 4
1412
- }
1413
- | tFID
1414
- | op
1415
-
1416
- dot_or_colon: '.'
1417
- | tCOLON2
1418
-
1419
- opt_terms:
1420
- | terms
1421
-
1422
- opt_nl: /* none */
1423
- | '\n'
1424
-
1425
- rparen: opt_nl ')'
1426
-
1427
- rbracket: opt_nl ']'
1428
-
1429
- trailer: /* none */
1430
- | '\n'
1431
- | ','
1432
-
1433
- term: ';'
1434
- | '\n'
1435
-
1436
- terms: term
1437
- | terms ';'
1438
-
1439
- none:
1440
-
1441
- end
1442
-
1443
- ---- header ----
1444
-
1445
- # require 'ctokenizer'
1446
- require 'strscan'
1447
-
1448
- ---- inner ----
1449
-
1450
-
1451
- ---- footer ----