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,1267 @@
1
+ class RubyParser
2
+
3
+ token CLASS MODULE DEF UNDEF BEGIN RESCUE ENSURE END IF UNLESS
4
+ THEN ELSIF ELSE CASE WHEN WHILE UNTIL FOR BREAK NEXT
5
+ REDO RETRY IN DO DO_COND DO_BLOCK RETURN YIELD SUPER
6
+ SELF NIL TRUE FALSE AND OR NOT IF_MOD UNLESS_MOD WHILE_MOD
7
+ UNTIL_MOD RESCUE_MOD ALIAS DEFINED klBEGIN klEND LINE
8
+ FILE IDENTIFIER FID GVAR IVAR CONSTANT CVAR NTH_REF
9
+ BACK_REF STRING_CONTENT INTEGER FLOAT REGEXP_END '+@'
10
+ '-@' '-@NUM' '**' '<=>' '==' '===' '!=' '>=' '<=' '&&'
11
+ '||' '=~' '!~' '.' '..' '...' '[]' '[]=' '<<' '>>'
12
+ '::' '::@' OP_ASGN '=>' PAREN_BEG '(' ')' tLPAREN_ARG
13
+ ARRAY_BEG ']' tLBRACE tLBRACE_ARG SPLAT '*' '&@' '&'
14
+ '~' '%' '/' '+' '-' '<' '>' '|' '!' '^'
15
+ '{@' '}' BACK_REF2 SYMBOL_BEG STRING_BEG XSTRING_BEG REGEXP_BEG
16
+ WORDS_BEG tAWORDS_BEG STRING_DBEG STRING_DVAR STRING_END STRING
17
+ SYMBOL '\\n' '?' ':' ',' SPACE ';' BLOCK_GIVEN
18
+
19
+ prechigh
20
+ right '!' '~' '+@'
21
+ right '**'
22
+ right '-@NUM' '-@'
23
+ left '*' '/' '%'
24
+ left '+' '-'
25
+ left '<<' '>>'
26
+ left '&'
27
+ left '|' '^'
28
+ left '>' '>=' '<' '<='
29
+ nonassoc '<=>' '==' '===' '!=' '=~' '!~'
30
+ left '&&'
31
+ left '||'
32
+ nonassoc '..' '...'
33
+ right '?' ':'
34
+ left RESCUE_MOD
35
+ right '=' OP_ASGN
36
+ nonassoc DEFINED
37
+ right NOT
38
+ left OR AND
39
+ nonassoc IF_MOD UNLESS_MOD WHILE_MOD UNTIL_MOD
40
+ nonassoc tLBRACE_ARG
41
+ nonassoc LOWEST
42
+ preclow
43
+
44
+ rule
45
+
46
+ target:
47
+ compstmt
48
+ {
49
+ result = "result = val[0];"
50
+ # <D-/>result = "result = 100;"
51
+ }
52
+
53
+ bodystmt:
54
+ compstmt opt_rescue opt_else opt_ensure
55
+ {
56
+ result = "result = new this.BodyStatementsNode(val[0], val[1], val[2], val[3]);"
57
+ }
58
+
59
+ compstmt:
60
+ stmts opt_terms
61
+ {
62
+ result = "result = val[0];"
63
+ }
64
+
65
+ stmts:
66
+ none
67
+ {
68
+ result = "result = new this.StatementsNode([]);"
69
+ }
70
+ | stmt
71
+ {
72
+ result = "result = new this.StatementsNode([val[0]]);"
73
+ }
74
+ | stmts terms stmt
75
+ {
76
+ result = "val[0].push(val[2]); result = val[0];"
77
+ }
78
+
79
+ stmt: ALIAS fitem fitem
80
+ | ALIAS GVAR GVAR
81
+ | ALIAS GVAR BACK_REF
82
+ | ALIAS GVAR NTH_REF
83
+ | UNDEF undef_list
84
+ | stmt IF_MOD expr_value
85
+ {
86
+ result = "result = new this.IfModNode(val[1], val[2], val[0]);"
87
+ }
88
+ | stmt UNLESS_MOD expr_value
89
+ {
90
+ result = "result = new this.IfModNode(val[1], val[2], val[0]);"
91
+ }
92
+ | stmt WHILE_MOD expr_value
93
+ | stmt UNTIL_MOD expr_value
94
+ | stmt RESCUE_MOD stmt
95
+ | klBEGIN '{@' compstmt '}'
96
+ | klEND '{@' compstmt '}'
97
+ | lhs '=' command_call
98
+ {
99
+ result = "result = new this.AssignNode(val[0], val[2], val[1]);"
100
+ }
101
+ | mlhs '=' command_call
102
+ | var_lhs OP_ASGN command_call
103
+ {
104
+ # result = "result = ['op_asgn', val[1], val[0], val[2]];"
105
+ result = "result = new this.OpAsgnNode(val[1], val[0], val[2]);"
106
+ }
107
+ | primary_value '[@' aref_args ']' OP_ASGN command_call
108
+ | primary_value '.' IDENTIFIER OP_ASGN command_call
109
+ | primary_value '.' CONSTANT OP_ASGN command_call
110
+ | primary_value '::' IDENTIFIER OP_ASGN command_call
111
+ | backref OP_ASGN command_call
112
+ | lhs '=' mrhs
113
+ | mlhs '=' arg_value
114
+ | mlhs '=' mrhs
115
+ | expr
116
+
117
+ expr: command_call
118
+ | expr AND expr
119
+ {
120
+ result = "result = [val[1], val[0], val[2]];"
121
+ }
122
+ | expr OR expr
123
+ {
124
+ result = "result = [val[1], val[0], val[2]];"
125
+ }
126
+ | NOT expr
127
+ {
128
+ result = "result = ['unary', '!', val[1]];"
129
+ }
130
+ | '!' command_call
131
+ {
132
+ result = "result = ['unary', '!', val[1]];"
133
+ }
134
+ | arg
135
+
136
+ expr_value: expr
137
+
138
+ command_call: command
139
+ | block_command
140
+ | RETURN call_args
141
+ {
142
+ result = "result = new this.ReturnNode(val[0], val[1]);"
143
+ }
144
+ | BREAK call_args
145
+ {
146
+ result = "result = ['break', val[1]];"
147
+ }
148
+ | NEXT call_args
149
+ {
150
+ result = "result = ['next', val[1]];"
151
+ }
152
+
153
+ block_command: block_call
154
+ | block_call '.' operation2 command_args
155
+ | block_call '::' operation2 command_args
156
+
157
+ cmd_brace_block: tLBRACE_ARG opt_block_var compstmt '}'
158
+
159
+ command: operation command_args =LOWEST
160
+ {
161
+ result = "result = new this.CallNode(null, val[0], val[1]);"
162
+ }
163
+ | operation command_args cmd_brace_block
164
+ | primary_value '.' operation2 command_args =LOWEST
165
+ {
166
+ result = "result = new this.CallNode(val[0], val[2], val[3]);"
167
+ }
168
+ | primary_value '.' operation2 command_args cmd_brace_block
169
+ | primary_value '::' operation2 command_args =LOWEST
170
+ {
171
+ result = "result = ['call', val[0], val[2], val[3]];"
172
+ }
173
+ | primary_value '::' operation2 command_args cmd_brace_block
174
+ | SUPER command_args
175
+ {
176
+ result = "result = ['super', val[1]];"
177
+ }
178
+ | YIELD command_args
179
+ {
180
+ result = "result = new this.YieldNode(val[0], val[1]);"
181
+ }
182
+
183
+ mlhs: mlhs_basic
184
+ | PAREN_BEG mlhs_entry ')'
185
+
186
+ mlhs_entry: mlhs_basic
187
+ | PAREN_BEG mlhs_entry ')'
188
+
189
+ mlhs_basic: mlhs_head
190
+ | mlhs_head mlhs_item
191
+ | mlhs_head SPLAT mlhs_node
192
+ | mlhs_head SPLAT
193
+ | SPLAT mlhs_node
194
+ | SPLAT
195
+
196
+ mlhs_item: mlhs_node
197
+ | PAREN_BEG mlhs_entry ')'
198
+
199
+ mlhs_head: mlhs_item ','
200
+ | mlhs_head mlhs_item ','
201
+
202
+ mlhs_node: variable
203
+ | primary_value '[@' aref_args ']'
204
+ | primary_value '.' IDENTIFIER
205
+ | primary_value '::' IDENTIFIER
206
+ | primary_value '.' CONSTANT
207
+ | primary_value '::' CONSTANT
208
+ | '::@' CONSTANT
209
+ | backref
210
+
211
+ lhs: variable
212
+ | primary_value '[@' aref_args ']'
213
+ {
214
+ # result = "result = ['aref', val[0], val[2]];"
215
+ result = "result = new this.ArefNode(val[0], val[2]);"
216
+ }
217
+ | primary_value '.' IDENTIFIER
218
+ {
219
+ # result = "result = ['call', val[0], val[2], [[]]];"
220
+ result = "result = new this.CallNode(val[0], val[2], [[]]);"
221
+ }
222
+ | primary_value '::' IDENTIFIER
223
+ | primary_value '.' CONSTANT
224
+ | primary_value '::' CONSTANT
225
+ | '::@' CONSTANT
226
+ | backref
227
+
228
+ cname: CONSTANT
229
+
230
+ cpath: '::@' cname
231
+ {
232
+ result = "result = ['::', val[1]];"
233
+ }
234
+ | cname
235
+ {
236
+ result = "result = [null, val[0]];"
237
+ }
238
+ | primary_value '::' cname
239
+ {
240
+ result = "result = [val[0], val[2]];"
241
+ }
242
+
243
+ fname: IDENTIFIER
244
+ | CONSTANT
245
+ | FID
246
+ | op
247
+ | reswords
248
+
249
+ fitem: fname
250
+ | symbol
251
+
252
+ undef_list: fitem
253
+ | undef_list ',' fitem
254
+
255
+ op: '|' | '^' | '&' | '<=>' | '==' | '==='
256
+ | '=~' | '>' | '>=' | '<' | '<=' | '<<'
257
+ | '>>' | '+' | '-' | '*' | SPLAT | '/'
258
+ | '%' | '**' | '~' | '+@' | '-@' | '[]'
259
+ | '[]=' | BACK_REF2
260
+
261
+ reswords: LINE | FILE | klBEGIN | klEND | ALIAS | AND
262
+ | BEGIN | BREAK | CASE | CLASS | DEF | DEFINED
263
+ | DO | ELSE | ELSIF | END | ENSURE | FALSE
264
+ | FOR | IN | MODULE | NEXT | NIL | NOT
265
+ | OR | REDO | RESCUE | RETRY | RETURN | SELF
266
+ | SUPER | THEN | TRUE | UNDEF | WHEN | YIELD
267
+ | IF_MOD | UNLESS_MOD | WHILE_MOD | UNTIL_MOD | RESCUE_MOD
268
+ | BLOCK_GIVEN
269
+
270
+ arg:
271
+ lhs '=' arg
272
+ {
273
+ result = "result = new this.AssignNode(val[0], val[2], val[1]);"
274
+ }
275
+ | lhs '=' arg RESCUE_MOD arg
276
+ | var_lhs OP_ASGN arg
277
+ {
278
+ result = "result = new this.OpAsgnNode(val[1], val[0], val[2]);"
279
+ }
280
+ | primary_value '[@' aref_args ']' OP_ASGN arg
281
+ | primary_value '.' IDENTIFIER OP_ASGN arg
282
+ | primary_value '.' CONSTANT OP_ASGN arg
283
+ | primary_value '::' IDENTIFIER OP_ASGN arg
284
+ | primary_value '::' CONSTANT OP_ASGN arg
285
+ | '::@' CONSTANT OP_ASGN arg
286
+ | backref OP_ASGN arg
287
+ | arg '..' arg
288
+ {
289
+ result = "result = ['range', val[1], val[0], val[2]];"
290
+ }
291
+ | arg '...' arg
292
+ {
293
+ result = "result = ['range', val[1], val[0], val[2]];"
294
+ }
295
+ | arg '+' arg
296
+ {
297
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
298
+ }
299
+ | arg '-' arg
300
+ {
301
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
302
+ }
303
+ | arg '*' arg
304
+ {
305
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
306
+ }
307
+ | arg '/' arg
308
+ {
309
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
310
+ }
311
+ | arg '%' arg
312
+ {
313
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
314
+ }
315
+ | arg '**' arg
316
+ {
317
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
318
+ }
319
+ | '-@NUM' INTEGER '**' arg
320
+ | '-@NUM' FLOAT '**' arg
321
+ | '+@' arg
322
+ {
323
+ result = "result = new this.CallNode(val[1], val[0], [[]]);"
324
+ }
325
+ | '-@' arg
326
+ {
327
+ result = "result = new this.CallNode(val[1], val[0], [[]]);"
328
+ }
329
+ | arg '|' arg
330
+ {
331
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
332
+ }
333
+ | arg '^' arg
334
+ {
335
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
336
+ }
337
+ | arg '&' arg
338
+ {
339
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
340
+ }
341
+ | arg '<=>' arg
342
+ {
343
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
344
+ }
345
+ | arg '>' arg
346
+ {
347
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
348
+ }
349
+ | arg '>=' arg
350
+ {
351
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
352
+ }
353
+ | arg '<' arg
354
+ {
355
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
356
+ }
357
+ | arg '<=' arg
358
+ {
359
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
360
+ }
361
+ | arg '==' arg
362
+ {
363
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
364
+ }
365
+ | arg '===' arg
366
+ {
367
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
368
+ }
369
+ | arg '!=' arg
370
+ {
371
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
372
+ }
373
+ | arg '=~' arg
374
+ {
375
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
376
+ }
377
+ | arg '!~' arg
378
+ {
379
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
380
+ }
381
+ | '!' arg
382
+ {
383
+ result = "result = new this.CallNode(val[1], val[0], [[]]);"
384
+ }
385
+ | '~' arg
386
+ {
387
+ result = "result = new this.CallNode(val[1], val[0], [[]]);"
388
+ }
389
+ | arg '<<' arg
390
+ {
391
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
392
+ }
393
+ | arg '>>' arg
394
+ {
395
+ result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
396
+ }
397
+ | arg '&&' arg
398
+ {
399
+ result = "result = new this.AndNode(val[1], val[0], val[2]);"
400
+ }
401
+ | arg '||' arg
402
+ {
403
+ result = "result = new this.OrNode(val[1], val[0], val[2]);"
404
+ }
405
+ | DEFINED opt_nl arg
406
+ | arg '?' arg ':' arg
407
+ {
408
+ result = "result = ['ternary', val[0], val[2], val[4]];"
409
+ }
410
+ | primary
411
+
412
+ arg_value: arg
413
+
414
+ aref_args: none
415
+ {
416
+ result = "result = [[], null];"
417
+ }
418
+ | command opt_nl
419
+ | args trailer
420
+ {
421
+ result = "result = [val[0], null];"
422
+ }
423
+ | args ',' SPLAT arg opt_nl
424
+ {
425
+ result = "result = [val[0], val[3]];"
426
+ }
427
+ | assocs trailer
428
+ | SPLAT arg opt_nl
429
+ {
430
+ result = "result = [[], val[1]];"
431
+ }
432
+
433
+ paren_args: '(' none ')'
434
+ {
435
+ result = "result = [[]];"
436
+ }
437
+ | '(' call_args opt_nl ')'
438
+ {
439
+ result = "result = val[1];"
440
+ }
441
+ | '(' block_call opt_nl ')'
442
+ | '(' args ',' block_call opt_nl ')'
443
+
444
+ opt_paren_args: none
445
+ {
446
+ result = "result = [];"
447
+ }
448
+ | paren_args
449
+
450
+ call_args: command
451
+ {
452
+ result = "result = [[val[0]], null, null, null];"
453
+ }
454
+ | args opt_block_arg
455
+ {
456
+ result = "result = [val[0], null, null, val[1]];"
457
+ }
458
+ | args ',' SPLAT arg_value opt_block_arg
459
+ {
460
+ result = "result = [val[0], val[3], null, val[4]];"
461
+ }
462
+ | assocs opt_block_arg
463
+ {
464
+ result = "result = [null, null, val[0], val[1]];"
465
+ }
466
+ | assocs ',' SPLAT arg_value opt_block_arg
467
+ {
468
+ result = "result = [null, val[3], val[0], val[4]];"
469
+ }
470
+ | args ',' assocs opt_block_arg
471
+ {
472
+ result = "result = [val[0], null, val[2], val[3]];"
473
+ }
474
+ | args ',' assocs ',' SPLAT arg opt_block_arg
475
+ {
476
+ result = "result = [val[0], val[5], val[2], val[6]];"
477
+ }
478
+ | SPLAT arg_value opt_block_arg
479
+ {
480
+ result = "result = [null, val[1], null, val[2]];"
481
+ }
482
+ | block_arg
483
+ {
484
+ result = "result = [null, null, null, val[0]];"
485
+ }
486
+
487
+ call_args2: arg_value ',' args opt_block_arg
488
+ | arg_value ',' block_arg
489
+ | arg_value ',' SPLAT arg_value opt_block_arg
490
+ | arg_value ',' args ',' SPLAT arg_value opt_block_arg
491
+ | assocs opt_block_arg
492
+ | assocs ',' SPLAT arg_value opt_block_arg
493
+ | arg_value ',' assocs opt_block_arg
494
+ | arg_value ',' args ',' assocs opt_block_arg
495
+ | arg_value ',' assocs ',' SPLAT arg_value opt_block_arg
496
+ | arg_value ',' args ',' assocs ',' SPLAT arg_value opt_block_arg
497
+ | SPLAT arg_value opt_block_arg
498
+ | block_arg
499
+
500
+ command_args:
501
+ {
502
+ result = "this.cmdarg_push(1);"
503
+ }
504
+ open_args
505
+ {
506
+ result = "this.cmdarg_pop(); result = val[1];"
507
+ }
508
+
509
+ open_args: call_args
510
+ | tLPAREN_ARG ')'
511
+ {
512
+ result = "result = [[]];"
513
+ }
514
+ | tLPAREN_ARG call_args2 ')'
515
+ {
516
+ result = "result = val[1];"
517
+ }
518
+
519
+ block_arg: '&@' arg_value
520
+ {
521
+ result = "result = val[1];"
522
+ }
523
+
524
+ opt_block_arg: ',' block_arg
525
+ {
526
+ result = "result = val[1];"
527
+ }
528
+ | none_block_pass
529
+ {
530
+ result = "result = null;"
531
+ }
532
+
533
+ args: arg_value
534
+ {
535
+ result = "result = [val[0]];"
536
+ }
537
+ | args ',' arg_value
538
+ {
539
+ result = "result = val[0].concat([val[2]]);"
540
+ }
541
+
542
+ mrhs: args ',' arg_value
543
+ | args ',' SPLAT arg_value
544
+ | SPLAT arg_value
545
+
546
+ primary: literal
547
+ | strings
548
+ | xstring
549
+ | regexp
550
+ | words
551
+ | awords
552
+ | var_ref
553
+ | backref
554
+ | FID
555
+ | BEGIN bodystmt END
556
+ {
557
+ result = "result = new this.BeginNode(val[0], val[1], val[2]);"
558
+ }
559
+ | tLPAREN_ARG expr opt_nl ')'
560
+ | PAREN_BEG compstmt ')'
561
+ {
562
+ result = "result = new this.ParenNode(val[0], val[1], val[2]);"
563
+ }
564
+ | primary_value '::' CONSTANT
565
+ {
566
+ result = "result = new this.Colon2Node(val[0], val[2]);"
567
+ }
568
+ | '::@' CONSTANT
569
+ | primary_value '[@' aref_args ']'
570
+ {
571
+ result = "result = new this.CallNode(val[0], { line: val[1].line, value: '[]' }, val[2]);"
572
+ # result = "result = ['aref', val[0], val[2]];"<D-/>
573
+ }
574
+ | '[' aref_args ']'
575
+ {
576
+ result = "result = new this.ArrayNode(val[1], val[0], val[2]);"
577
+ }
578
+ | '{' assoc_list '}'
579
+ {
580
+ result = "result = new this.HashNode(val[1], val[0], val[2]);"
581
+ }
582
+ | RETURN
583
+ {
584
+ result = "result = new this.ReturnNode(val[0], [[]]);"
585
+ }
586
+ | YIELD '(' call_args ')'
587
+ {
588
+ result = "result = new this.YieldNode(val[0], val[2]);"
589
+ }
590
+ | YIELD '(' ')'
591
+ {
592
+ result = "result = new this.YieldNode(val[0], [[]]);"
593
+ }
594
+ | YIELD
595
+ {
596
+ result = "result = new this.YieldNode(val[0], [[]]);"
597
+ }
598
+ | DEFINED opt_nl '(' expr ')'
599
+ | operation brace_block
600
+ {
601
+ result = "result = new this.CallNode(null, val[0], [[]]); result.block = val[1];"
602
+ }
603
+ | method_call
604
+ | method_call brace_block
605
+ {
606
+ # result = "val[0][4] = val[1]; result = val[0];"
607
+ result = "result = val[0]; result.block = val[1];"
608
+ }
609
+ | IF expr_value then compstmt if_tail END
610
+ {
611
+ result = "result = new this.IfNode(val[0], val[1], val[3], val[4], val[5]);"
612
+ }
613
+ | UNLESS expr_value then compstmt opt_else END
614
+ {
615
+ result = "result = ['unless', val[1], val[3], val[4]];"
616
+ }
617
+ | WHILE
618
+ {
619
+ result = "this.cond_push(1);"
620
+ }
621
+ expr_value do
622
+ {
623
+ result = "this.cond_pop();"
624
+ }
625
+ compstmt END
626
+ {
627
+ result = "result = ['while', val[0], val[2], val[5]];"
628
+ }
629
+ | UNTIL
630
+ {
631
+ result = "this.cond_push(1);"
632
+ }
633
+ expr_value do
634
+ {
635
+ result = "this.cond_pop();"
636
+ }
637
+ compstmt END
638
+ {
639
+ result = "result = ['while', val[0], val[2], val[5]];"
640
+ }
641
+ | CASE expr_value opt_terms case_body END
642
+ {
643
+ result = "result = ['case', val[1], val[3]];"
644
+ }
645
+ | CASE opt_terms case_body END
646
+ {
647
+ result = "result = ['case', null, val[2]];"
648
+ }
649
+ | CASE opt_terms ELSE compstmt END
650
+ | FOR block_var IN
651
+ {
652
+ result = "this.cond_push(1);"
653
+ }
654
+ expr_value do
655
+ {
656
+ result = "this.cond_pop();"
657
+ }
658
+ compstmt END
659
+ | CLASS cpath superclass bodystmt END
660
+ {
661
+ # result = "result = ['class', val[1], val[2], val[3]];"
662
+ result = "result = new this.ClassNode(val[0], val[1], val[2], val[3], val[4]);"
663
+ }
664
+ | CLASS '<<' expr term bodystmt END
665
+ {
666
+ result = "result = ['class_shift', val[2], val[4]];"
667
+ }
668
+ | MODULE cpath bodystmt END
669
+ {
670
+ result = "result = new this.ModuleNode(val[0], val[1], val[2], val[3]);"
671
+ }
672
+ | DEF fname f_arglist bodystmt END
673
+ {
674
+ result = "result = new this.DefNode(val[0], null, val[1], val[2], val[3], val[4]);"
675
+ }
676
+ | DEF singleton dot_or_colon fname f_arglist bodystmt END
677
+ {
678
+ result = "result = new this.DefNode(val[0], val[1], val[3], val[4], val[5], val[6]);"
679
+ }
680
+ | BREAK
681
+ {
682
+ result = "result = ['break', null];"
683
+ }
684
+ | NEXT
685
+ {
686
+ result = "result = ['next', null];"
687
+ }
688
+ | REDO
689
+ | RETRY
690
+
691
+ primary_value: primary
692
+
693
+ then: term
694
+ | ':'
695
+ | THEN
696
+ | term THEN
697
+
698
+ do: term
699
+ | ':'
700
+ | DO_COND
701
+
702
+ if_tail:
703
+ opt_else
704
+ {
705
+ result = "result = val[0];"
706
+ }
707
+ | ELSIF expr_value then compstmt if_tail
708
+ {
709
+ result = "result =
710
+ [[val[0], val[1], val[3]]].concat(val[4]);"
711
+ }
712
+
713
+ opt_else:
714
+ none
715
+ {
716
+ result = "result = [];"
717
+ }
718
+ | ELSE compstmt
719
+ {
720
+ result = "result = [[val[0], val[1]]];"
721
+ }
722
+
723
+ # block_var: lhs
724
+ # | mlhs
725
+
726
+ block_var: block_var_args
727
+ {
728
+ result = 'result = [val[0], null];'
729
+ }
730
+
731
+ block_var_args: f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
732
+ {
733
+ result = "result = [val[0], val[2], val[4], val[5]];"
734
+ }
735
+ | f_arg ',' f_block_optarg opt_f_block_arg
736
+ {
737
+ result = "result = [val[0], val[2], null, val[3]];"
738
+ }
739
+ | f_arg ',' f_rest_arg opt_f_block_arg
740
+ {
741
+ result = "result = [val[0], null, val[2], val[3]];"
742
+ }
743
+ | f_arg opt_f_block_arg
744
+ {
745
+ result = "result = [val[0], null, null, val[1]];"
746
+ }
747
+ | f_block_optarg ',' f_rest_arg opt_f_block_arg
748
+ {
749
+ result = "result = [[], val[0], val[2], val[3]];"
750
+ }
751
+ | f_block_optarg opt_f_block_arg
752
+ {
753
+ result = "result = [[], val[0], null, val[1]];"
754
+ }
755
+ | f_rest_arg opt_f_block_arg
756
+ {
757
+ result = "result = [[], null, val[0], val[1]];"
758
+ }
759
+ | f_block_arg
760
+ {
761
+ result = "result = [[], null, null, val[0]];"
762
+ }
763
+
764
+ f_block_optarg: f_block_opt
765
+ {
766
+ result = "result = [val[0]];"
767
+ }
768
+ | f_block_optarg ',' f_block_opt
769
+ {
770
+ result = "result = val[0].concat([val[2]]);"
771
+ }
772
+
773
+ f_block_opt: IDENTIFIER '=' primary_value
774
+ {
775
+ result = "result = [val[0], val[2]];"
776
+ }
777
+
778
+ opt_block_var: none
779
+ {
780
+ result = "result = [null];"
781
+ }
782
+ | '|' '|'
783
+ {
784
+ result = "result = [null];"
785
+ }
786
+ | '||'
787
+ {
788
+ result = "result = [null];"
789
+ }
790
+ | '|' block_var '|'
791
+ {
792
+ result = "result = val[1];"
793
+ }
794
+
795
+ do_block: DO_BLOCK
796
+ {
797
+ # result = "print('doing half command');"
798
+ }
799
+ opt_block_var compstmt END
800
+ {
801
+ # result = "result = [val[2], val[3]];"
802
+ result = "result = new this.BlockNode(val[0], val[2], val[3], val[4]);"
803
+ }
804
+
805
+ block_call: command do_block
806
+ {
807
+ result = "result = val[0]; val[0].block = val[1];"
808
+ # result = "val[0][4] = val[1]; result = val[0];"
809
+ }
810
+ | block_call '.' operation2 opt_paren_args
811
+ | block_call '::' operation2 opt_paren_args
812
+
813
+ method_call: operation paren_args
814
+ {
815
+ # result = "result = ['call', null, val[0], val[1]];"
816
+ result = "result = new this.CallNode(null, val[0], val[1]);"
817
+ }
818
+ | primary_value '.' operation2 opt_paren_args
819
+ {
820
+ # result = "result = ['call', val[0], val[2], val[3]];"
821
+ result = "result = new this.CallNode(val[0], val[2], val[3]);"
822
+ }
823
+ | primary_value '::' operation2 paren_args
824
+ | primary_value '::' operation3
825
+ | SUPER paren_args
826
+ {
827
+ result = "result = ['super', val[1]];"
828
+ }
829
+ | SUPER
830
+ {
831
+ result = "result = ['super', [[]]];"
832
+ }
833
+
834
+ brace_block:
835
+ '{@' opt_block_var compstmt '}'
836
+ {
837
+ result = "result = new this.BlockNode(val[0], val[1], val[2], val[3]);"
838
+ }
839
+ | DO opt_block_var compstmt END
840
+ {
841
+ result = "result = new this.BlockNode(val[0], val[1], val[2], val[3]);"
842
+ }
843
+
844
+ case_body: WHEN when_args then compstmt cases
845
+ {
846
+ result =
847
+ "result = [['when', val[1], val[3]]].concat(val[4]);"
848
+ }
849
+
850
+ when_args: args
851
+ {
852
+ result = "result = val[0];"
853
+ }
854
+ | args ',' SPLAT arg_value
855
+ {
856
+ result = "result = val[0];"
857
+ }
858
+ | SPLAT arg_value
859
+ {
860
+ result = "result = [];"
861
+ }
862
+
863
+ cases: opt_else
864
+ | case_body
865
+
866
+ opt_rescue:
867
+ RESCUE exc_list exc_var then compstmt opt_rescue
868
+ {
869
+ result = "result = [[val[0], val[1], val[2], val[4]]].concat(val[5]);"
870
+ }
871
+ |
872
+ {
873
+ result = "result = [];"
874
+ }
875
+
876
+ exc_list: arg_value
877
+ | mrhs
878
+ | none
879
+
880
+ exc_var: '=>' lhs
881
+ {
882
+ result = "result = val[1];"
883
+ }
884
+ | none
885
+ {
886
+ result = "result = null;"
887
+ }
888
+
889
+ opt_ensure: ENSURE compstmt
890
+ | none
891
+
892
+ literal: numeric
893
+ | symbol
894
+ | dsym
895
+
896
+ strings: string
897
+
898
+ string: string1
899
+ | string string1
900
+
901
+ string1: STRING_BEG string_contents STRING_END
902
+ {
903
+ result = "result = new this.StringNode(val[1], val[2]);"
904
+ }
905
+ | STRING
906
+
907
+ xstring:
908
+ XSTRING_BEG xstring_contents STRING_END
909
+ {
910
+ result = "result = new this.XStringNode(val[0], val[1], val[2]);"
911
+ }
912
+
913
+ regexp: REGEXP_BEG xstring_contents REGEXP_END
914
+ {
915
+ result = "result = ['regexp', val[1], val[2]];"
916
+ }
917
+
918
+ words: WORDS_BEG SPACE STRING_END
919
+ | WORDS_BEG word_list STRING_END
920
+
921
+ word_list: none
922
+ | word_list word SPACE
923
+ word: string_content
924
+ | word string_content
925
+
926
+ awords: tAWORDS_BEG SPACE STRING_END
927
+ | tAWORDS_BEG qword_list STRING_END
928
+
929
+ qword_list: none
930
+ | qword_list STRING_CONTENT SPACE
931
+
932
+ string_contents: none
933
+ {
934
+ result = "result = [];"
935
+ }
936
+ | string_contents string_content
937
+ {
938
+ result = "result = val[0].concat([val[1]]);"
939
+ }
940
+
941
+ xstring_contents: none
942
+ {
943
+ result = "result = [];"
944
+ }
945
+ | xstring_contents string_content
946
+ {
947
+ result = "result = val[0].concat([val[1]]);"
948
+ }
949
+
950
+ string_content: STRING_CONTENT
951
+ {
952
+ result = "result = ['string_content', val[0]];"
953
+ }
954
+ | STRING_DVAR string_dvar
955
+ {
956
+ result = "result = ['string_dvar', val[1]];"
957
+ }
958
+ | STRING_DBEG
959
+ {
960
+ result = "this.cond_push(0); this.cmdarg_push(0);"
961
+ }
962
+ compstmt '}'
963
+ {
964
+ result = "this.cond_lexpop(); this.cmdarg_lexpop();
965
+ result = ['string_dbegin', val[2]];"
966
+ }
967
+
968
+ string_dvar: GVAR
969
+ | IVAR
970
+ | CVAR
971
+ | backref
972
+
973
+
974
+ symbol:
975
+ SYMBOL_BEG sym
976
+ {
977
+ result = "result = new this.SymbolNode(val[1]);"
978
+ }
979
+ | SYMBOL
980
+
981
+ sym: fname
982
+ | IVAR
983
+ | GVAR
984
+ | CVAR
985
+
986
+ dsym: SYMBOL_BEG xstring_contents STRING_END
987
+ {
988
+ result = "result = ['dsym', val[1]];"
989
+ }
990
+
991
+ numeric:
992
+ INTEGER
993
+ {
994
+ result = "result = new this.NumericNode(val[0]);"
995
+ }
996
+ | FLOAT
997
+ {
998
+ result = "result = new this.NumericNode(val[0]);"
999
+ }
1000
+ | '-@NUM' INTEGER =LOWEST
1001
+ | '-@NUM' FLOAT =LOWEST
1002
+
1003
+ variable: IDENTIFIER
1004
+ {
1005
+ result = "result = new this.IdentifierNode(val[0]);"
1006
+ }
1007
+ | IVAR
1008
+ {
1009
+ result = "result = new this.IvarNode(val[0]);"
1010
+ }
1011
+ | GVAR
1012
+ {
1013
+ result = "result = ['gvar', val[0]];"
1014
+ }
1015
+ | CONSTANT
1016
+ {
1017
+ result = "result = new this.ConstantNode(val[0]);"
1018
+ }
1019
+ | CVAR
1020
+ {
1021
+ result = "result = ['cvar', val[0]];"
1022
+ }
1023
+ | NIL
1024
+ {
1025
+ result = "result = new this.NilNode(val[0]);"
1026
+ }
1027
+ | SELF
1028
+ {
1029
+ # result = "result = ['self'];"
1030
+ result = "result = new this.SelfNode(val[0]);"
1031
+ }
1032
+ | TRUE
1033
+ {
1034
+ result = "result = new this.TrueNode(val[0]);"
1035
+ }
1036
+ | FALSE
1037
+ {
1038
+ result = "result = new this.FalseNode(val[0]);"
1039
+ }
1040
+ | FILE
1041
+ {
1042
+ result = "result = ['file'];"
1043
+ }
1044
+ | LINE
1045
+ {
1046
+ result = "result = ['line'];"
1047
+ }
1048
+ | BLOCK_GIVEN
1049
+ {
1050
+ result = "result = new this.BlockGivenNode(val[0]);"
1051
+ }
1052
+
1053
+ var_ref: variable
1054
+
1055
+ var_lhs: variable
1056
+
1057
+ backref: NTH_REF
1058
+ | BACK_REF
1059
+
1060
+ superclass: term
1061
+ {
1062
+ result = "result = null;"
1063
+ }
1064
+ | '<' expr_value term
1065
+ {
1066
+ result = "result = val[1];"
1067
+ }
1068
+ | error term
1069
+ {
1070
+ result = "result = null;"
1071
+ }
1072
+
1073
+ f_arglist: '(' f_args opt_nl ')'
1074
+ {
1075
+ result = "result = val[1];"
1076
+ }
1077
+ | f_args term
1078
+ {
1079
+ result = "result = val[0];"
1080
+ }
1081
+
1082
+ f_args: f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
1083
+ {
1084
+ result = "result = [val[0], val[2], val[4], val[5]];"
1085
+ }
1086
+ | f_arg ',' f_optarg opt_f_block_arg
1087
+ {
1088
+ result = "result = [val[0], val[2], null, val[3]];"
1089
+ }
1090
+ | f_arg ',' f_rest_arg opt_f_block_arg
1091
+ {
1092
+ result = "result = [val[0], [], val[2], val[3]];"
1093
+ }
1094
+ | f_arg opt_f_block_arg
1095
+ {
1096
+ result = "result = [val[0], [], null, val[1]];"
1097
+ }
1098
+ | f_optarg ',' f_rest_arg opt_f_block_arg
1099
+ {
1100
+ result = "result = [[], val[0], val[2], val[3]];"
1101
+ }
1102
+ | f_optarg opt_f_block_arg
1103
+ {
1104
+ result = "result = [[], val[0], null, val[1]];"
1105
+ }
1106
+ | f_rest_arg opt_f_block_arg
1107
+ {
1108
+ result = "result = [[], [], val[0], val[1]];"
1109
+ }
1110
+ | f_block_arg
1111
+ {
1112
+ result = "result = [[], [], null, val[0]];"
1113
+ }
1114
+ |
1115
+ {
1116
+ result = "result = [[], [], null, null];"
1117
+ }
1118
+
1119
+ f_norm_arg: CONSTANT
1120
+ {
1121
+ result = "this.yyerror(
1122
+ 'formal argument cannot be a constant');"
1123
+ }
1124
+ | IVAR
1125
+ {
1126
+ result = "this.yyerror(
1127
+ 'formal argument cannot be an instance variable');"
1128
+ }
1129
+ | CVAR
1130
+ {
1131
+ result = "this.yyerror(
1132
+ 'formal argument cannot be a class variable');"
1133
+ }
1134
+ | GVAR
1135
+ {
1136
+ result = "this.yyerror(
1137
+ 'formal argument cannot be a global variable');"
1138
+ }
1139
+ | IDENTIFIER
1140
+
1141
+ f_arg: f_norm_arg
1142
+ {
1143
+ result = "result = [val[0]];"
1144
+ }
1145
+ | f_arg ',' f_norm_arg
1146
+ {
1147
+ result = "result = val[0].concat([val[2]]);"
1148
+ }
1149
+
1150
+ f_opt: IDENTIFIER '=' arg_value
1151
+ {
1152
+ result = "result = [val[0], val[2]];"
1153
+ }
1154
+
1155
+ f_optarg: f_opt
1156
+ {
1157
+ result = "result = [val[0]];"
1158
+ }
1159
+ | f_optarg ',' f_opt
1160
+ {
1161
+ result = "result = val[0].concat([val[2]]);"
1162
+ }
1163
+
1164
+ restarg_mark: '*'
1165
+ | SPLAT
1166
+
1167
+ f_rest_arg: restarg_mark IDENTIFIER
1168
+ {
1169
+ result = "result = val[1];"
1170
+ }
1171
+ | restarg_mark
1172
+ {
1173
+ result = "result = '__unamed_splat__';"
1174
+ }
1175
+
1176
+ blkarg_mark: '&'
1177
+ | '&@'
1178
+
1179
+ f_block_arg: blkarg_mark IDENTIFIER
1180
+ {
1181
+ result = "result = val[1];"
1182
+ }
1183
+
1184
+ opt_f_block_arg: ',' f_block_arg
1185
+ {
1186
+ result = "result = val[1];"
1187
+ }
1188
+ |
1189
+ {
1190
+ result = "result = null;"
1191
+ }
1192
+
1193
+ singleton: var_ref
1194
+ {
1195
+ result = "result = val[0];"
1196
+ }
1197
+ | '(' expr opt_nl ')'
1198
+ {
1199
+ result = "result = val[1];"
1200
+ }
1201
+
1202
+ assoc_list: none
1203
+ {
1204
+ result = "result = [];"
1205
+ }
1206
+ | assocs trailer
1207
+ {
1208
+ result = "result = val[0];"
1209
+ }
1210
+ | args trailer
1211
+ {
1212
+ result = "this.yyerror('unsupported assoc list type');"
1213
+ }
1214
+
1215
+ assocs: assoc
1216
+ {
1217
+ result = "result = [val[0]];"
1218
+ }
1219
+ | assocs ',' assoc
1220
+ {
1221
+ result = "result = val[0].concat([val[2]]);"
1222
+ }
1223
+
1224
+ assoc: arg_value '=>' arg_value
1225
+ {
1226
+ result = "result = [val[0], val[2]];"
1227
+ }
1228
+
1229
+ operation: IDENTIFIER
1230
+ | CONSTANT
1231
+ | FID
1232
+
1233
+ operation2: IDENTIFIER
1234
+ | CONSTANT
1235
+ | FID
1236
+ | op
1237
+
1238
+ operation3: IDENTIFIER
1239
+ | FID
1240
+ | op
1241
+
1242
+ dot_or_colon: '.'
1243
+ | '::'
1244
+
1245
+ opt_terms:
1246
+ | terms
1247
+
1248
+ opt_nl:
1249
+ | '\\n'
1250
+
1251
+ trailer:
1252
+ | '\\n'
1253
+ | ','
1254
+
1255
+ term: ';'
1256
+ | '\\n'
1257
+
1258
+ terms: term
1259
+ | terms ';'
1260
+
1261
+ none:
1262
+
1263
+ none_block_pass:
1264
+
1265
+ end
1266
+
1267
+ ---- inner