opal-cj 0.7.0.beta1

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 (470) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +27 -0
  4. data/.rspec +3 -0
  5. data/.spectator +2 -0
  6. data/.spectator-mspec +3 -0
  7. data/.travis.yml +45 -0
  8. data/CHANGELOG.md +406 -0
  9. data/CONTRIBUTING.md +41 -0
  10. data/Gemfile +27 -0
  11. data/Guardfile +77 -0
  12. data/LICENSE +19 -0
  13. data/README.md +178 -0
  14. data/Rakefile +116 -0
  15. data/benchmarks/operators.rb +11 -0
  16. data/bin/opal +22 -0
  17. data/bin/opal-build +77 -0
  18. data/bin/opal-mspec +10 -0
  19. data/bin/opal-repl +72 -0
  20. data/config.ru +14 -0
  21. data/examples/rack/Gemfile +3 -0
  22. data/examples/rack/app/application.rb +13 -0
  23. data/examples/rack/app/user.rb +21 -0
  24. data/examples/rack/config.ru +7 -0
  25. data/examples/rack/index.html.erb +10 -0
  26. data/examples/sinatra/Gemfile +4 -0
  27. data/examples/sinatra/app/application.rb +7 -0
  28. data/examples/sinatra/config.ru +28 -0
  29. data/lib/mspec/opal/main.rb.erb +9 -0
  30. data/lib/mspec/opal/rake_task.rb +278 -0
  31. data/lib/mspec/opal/runner.rb +206 -0
  32. data/lib/mspec/opal/sprockets.js +57 -0
  33. data/lib/opal.rb +11 -0
  34. data/lib/opal/builder.rb +135 -0
  35. data/lib/opal/builder_processors.rb +165 -0
  36. data/lib/opal/cli.rb +145 -0
  37. data/lib/opal/cli_options.rb +149 -0
  38. data/lib/opal/cli_runners.rb +10 -0
  39. data/lib/opal/cli_runners/nodejs.rb +56 -0
  40. data/lib/opal/cli_runners/phantom.js +35 -0
  41. data/lib/opal/cli_runners/phantomjs.rb +28 -0
  42. data/lib/opal/cli_runners/server.rb +54 -0
  43. data/lib/opal/compiler.rb +307 -0
  44. data/lib/opal/erb.rb +64 -0
  45. data/lib/opal/fragment.rb +41 -0
  46. data/lib/opal/hike_path_finder.rb +18 -0
  47. data/lib/opal/nodes.rb +26 -0
  48. data/lib/opal/nodes/arglist.rb +56 -0
  49. data/lib/opal/nodes/array.rb +54 -0
  50. data/lib/opal/nodes/base.rb +151 -0
  51. data/lib/opal/nodes/call.rb +283 -0
  52. data/lib/opal/nodes/call_special.rb +178 -0
  53. data/lib/opal/nodes/case.rb +96 -0
  54. data/lib/opal/nodes/class.rb +42 -0
  55. data/lib/opal/nodes/constants.rb +78 -0
  56. data/lib/opal/nodes/def.rb +157 -0
  57. data/lib/opal/nodes/defined.rb +113 -0
  58. data/lib/opal/nodes/definitions.rb +168 -0
  59. data/lib/opal/nodes/for.rb +35 -0
  60. data/lib/opal/nodes/hash.rb +67 -0
  61. data/lib/opal/nodes/helpers.rb +114 -0
  62. data/lib/opal/nodes/if.rb +67 -0
  63. data/lib/opal/nodes/iter.rb +131 -0
  64. data/lib/opal/nodes/literal.rb +230 -0
  65. data/lib/opal/nodes/logic.rb +217 -0
  66. data/lib/opal/nodes/masgn.rb +62 -0
  67. data/lib/opal/nodes/module.rb +46 -0
  68. data/lib/opal/nodes/rescue.rb +135 -0
  69. data/lib/opal/nodes/runtime_helpers.rb +45 -0
  70. data/lib/opal/nodes/scope.rb +293 -0
  71. data/lib/opal/nodes/singleton_class.rb +25 -0
  72. data/lib/opal/nodes/super.rb +97 -0
  73. data/lib/opal/nodes/top.rb +101 -0
  74. data/lib/opal/nodes/variables.rb +158 -0
  75. data/lib/opal/nodes/while.rb +65 -0
  76. data/lib/opal/nodes/yield.rb +95 -0
  77. data/lib/opal/parser.rb +658 -0
  78. data/lib/opal/parser/grammar.rb +5452 -0
  79. data/lib/opal/parser/grammar.y +1684 -0
  80. data/lib/opal/parser/keywords.rb +66 -0
  81. data/lib/opal/parser/lexer.rb +1208 -0
  82. data/lib/opal/parser/parser_scope.rb +25 -0
  83. data/lib/opal/parser/sexp.rb +75 -0
  84. data/lib/opal/path_reader.rb +28 -0
  85. data/lib/opal/paths.rb +38 -0
  86. data/lib/opal/source_map.rb +70 -0
  87. data/lib/opal/sprockets.rb +4 -0
  88. data/lib/opal/sprockets/cache_key_fix.rb +17 -0
  89. data/lib/opal/sprockets/environment.rb +37 -0
  90. data/lib/opal/sprockets/erb.rb +37 -0
  91. data/lib/opal/sprockets/path_reader.rb +34 -0
  92. data/lib/opal/sprockets/processor.rb +124 -0
  93. data/lib/opal/sprockets/server.rb +180 -0
  94. data/lib/opal/util.rb +64 -0
  95. data/lib/opal/version.rb +3 -0
  96. data/opal.gemspec +36 -0
  97. data/opal/README.md +6 -0
  98. data/opal/corelib/array.rb +1556 -0
  99. data/opal/corelib/array/inheritance.rb +113 -0
  100. data/opal/corelib/basic_object.rb +73 -0
  101. data/opal/corelib/boolean.rb +41 -0
  102. data/opal/corelib/class.rb +55 -0
  103. data/opal/corelib/comparable.rb +56 -0
  104. data/opal/corelib/complex.rb +3 -0
  105. data/opal/corelib/dir.rb +20 -0
  106. data/opal/corelib/enumerable.rb +1132 -0
  107. data/opal/corelib/enumerator.rb +422 -0
  108. data/opal/corelib/error.rb +63 -0
  109. data/opal/corelib/file.rb +56 -0
  110. data/opal/corelib/hash.rb +728 -0
  111. data/opal/corelib/helpers.rb +102 -0
  112. data/opal/corelib/io.rb +59 -0
  113. data/opal/corelib/kernel.rb +569 -0
  114. data/opal/corelib/main.rb +7 -0
  115. data/opal/corelib/match_data.rb +114 -0
  116. data/opal/corelib/method.rb +58 -0
  117. data/opal/corelib/module.rb +462 -0
  118. data/opal/corelib/nil_class.rb +62 -0
  119. data/opal/corelib/numeric.rb +532 -0
  120. data/opal/corelib/proc.rb +52 -0
  121. data/opal/corelib/range.rb +116 -0
  122. data/opal/corelib/rational.rb +3 -0
  123. data/opal/corelib/regexp.rb +133 -0
  124. data/opal/corelib/runtime.js +1240 -0
  125. data/opal/corelib/string.rb +1212 -0
  126. data/opal/corelib/string/inheritance.rb +78 -0
  127. data/opal/corelib/struct.rb +141 -0
  128. data/opal/corelib/time.rb +584 -0
  129. data/opal/corelib/variables.rb +24 -0
  130. data/opal/opal.rb +32 -0
  131. data/package.json +9 -0
  132. data/spec/filters/bugs/array.rb +232 -0
  133. data/spec/filters/bugs/basic_object.rb +14 -0
  134. data/spec/filters/bugs/class.rb +21 -0
  135. data/spec/filters/bugs/enumerable.rb +69 -0
  136. data/spec/filters/bugs/enumerator.rb +3 -0
  137. data/spec/filters/bugs/hash.rb +128 -0
  138. data/spec/filters/bugs/kernel.rb +10 -0
  139. data/spec/filters/bugs/language.rb +415 -0
  140. data/spec/filters/bugs/math.rb +95 -0
  141. data/spec/filters/bugs/module.rb +14 -0
  142. data/spec/filters/bugs/nil.rb +7 -0
  143. data/spec/filters/bugs/numeric.rb +20 -0
  144. data/spec/filters/bugs/opal.rb +14 -0
  145. data/spec/filters/bugs/regexp.rb +11 -0
  146. data/spec/filters/bugs/set.rb +7 -0
  147. data/spec/filters/bugs/singleton.rb +6 -0
  148. data/spec/filters/bugs/string.rb +360 -0
  149. data/spec/filters/bugs/stringscanner.rb +22 -0
  150. data/spec/filters/bugs/struct.rb +45 -0
  151. data/spec/filters/bugs/time.rb +177 -0
  152. data/spec/filters/bugs/unknown.rb +11 -0
  153. data/spec/filters/unsupported/encoding.rb +95 -0
  154. data/spec/filters/unsupported/enumerator.rb +14 -0
  155. data/spec/filters/unsupported/float.rb +5 -0
  156. data/spec/filters/unsupported/frozen.rb +90 -0
  157. data/spec/filters/unsupported/hash_compare_by_identity.rb +16 -0
  158. data/spec/filters/unsupported/integer_size.rb +7 -0
  159. data/spec/filters/unsupported/method_added.rb +10 -0
  160. data/spec/filters/unsupported/mutable_strings.rb +361 -0
  161. data/spec/filters/unsupported/private_constants.rb +30 -0
  162. data/spec/filters/unsupported/private_methods.rb +44 -0
  163. data/spec/filters/unsupported/random.rb +4 -0
  164. data/spec/filters/unsupported/ruby_exe.rb +5 -0
  165. data/spec/filters/unsupported/tainted.rb +155 -0
  166. data/spec/filters/unsupported/time.rb +21 -0
  167. data/spec/filters/unsupported/trusted.rb +80 -0
  168. data/spec/lib/builder_processors_spec.rb +27 -0
  169. data/spec/lib/builder_spec.rb +66 -0
  170. data/spec/lib/cli_spec.rb +134 -0
  171. data/spec/lib/compiler_spec.rb +197 -0
  172. data/spec/lib/dependency_resolver_spec.rb +40 -0
  173. data/spec/lib/fixtures/no_requires.rb +1 -0
  174. data/spec/lib/fixtures/opal_file.rb +2 -0
  175. data/spec/lib/fixtures/require_tree_test.rb +3 -0
  176. data/spec/lib/fixtures/required_tree_test/required_file1.rb +1 -0
  177. data/spec/lib/fixtures/required_tree_test/required_file2.rb +1 -0
  178. data/spec/lib/fixtures/requires.rb +7 -0
  179. data/spec/lib/fixtures/sprockets_file.js.rb +3 -0
  180. data/spec/lib/fixtures/sprockets_require_tree_test.rb +3 -0
  181. data/spec/lib/hike_path_finder_spec.rb +23 -0
  182. data/spec/lib/lexer_spec.rb +110 -0
  183. data/spec/lib/parser/alias_spec.rb +26 -0
  184. data/spec/lib/parser/and_spec.rb +13 -0
  185. data/spec/lib/parser/attrasgn_spec.rb +28 -0
  186. data/spec/lib/parser/begin_spec.rb +42 -0
  187. data/spec/lib/parser/block_spec.rb +12 -0
  188. data/spec/lib/parser/break_spec.rb +17 -0
  189. data/spec/lib/parser/call_spec.rb +139 -0
  190. data/spec/lib/parser/class_spec.rb +35 -0
  191. data/spec/lib/parser/comments_spec.rb +11 -0
  192. data/spec/lib/parser/def_spec.rb +61 -0
  193. data/spec/lib/parser/if_spec.rb +26 -0
  194. data/spec/lib/parser/iter_spec.rb +59 -0
  195. data/spec/lib/parser/lambda_spec.rb +64 -0
  196. data/spec/lib/parser/literal_spec.rb +118 -0
  197. data/spec/lib/parser/masgn_spec.rb +37 -0
  198. data/spec/lib/parser/module_spec.rb +27 -0
  199. data/spec/lib/parser/not_spec.rb +27 -0
  200. data/spec/lib/parser/op_asgn1_spec.rb +23 -0
  201. data/spec/lib/parser/op_asgn2_spec.rb +23 -0
  202. data/spec/lib/parser/or_spec.rb +13 -0
  203. data/spec/lib/parser/return_spec.rb +17 -0
  204. data/spec/lib/parser/sclass_spec.rb +21 -0
  205. data/spec/lib/parser/string_spec.rb +276 -0
  206. data/spec/lib/parser/super_spec.rb +20 -0
  207. data/spec/lib/parser/unary_spec.rb +48 -0
  208. data/spec/lib/parser/undef_spec.rb +15 -0
  209. data/spec/lib/parser/unless_spec.rb +13 -0
  210. data/spec/lib/parser/variables_spec.rb +92 -0
  211. data/spec/lib/parser/while_spec.rb +15 -0
  212. data/spec/lib/parser/yield_spec.rb +20 -0
  213. data/spec/lib/path_reader_spec.rb +24 -0
  214. data/spec/lib/shared/path_finder_shared.rb +19 -0
  215. data/spec/lib/shared/path_reader_shared.rb +31 -0
  216. data/spec/lib/spec_helper.rb +9 -0
  217. data/spec/lib/sprockets/environment_spec.rb +30 -0
  218. data/spec/lib/sprockets/erb_spec.rb +25 -0
  219. data/spec/lib/sprockets/path_reader_spec.rb +25 -0
  220. data/spec/lib/sprockets/processor_spec.rb +35 -0
  221. data/spec/lib/sprockets/server_spec.rb +20 -0
  222. data/spec/opal/compiler/irb_spec.rb +44 -0
  223. data/spec/opal/core/array/select_spec.rb +14 -0
  224. data/spec/opal/core/array/set_range_to_array_spec.rb +7 -0
  225. data/spec/opal/core/date_spec.rb +122 -0
  226. data/spec/opal/core/enumerable/all_break_spec.rb +5 -0
  227. data/spec/opal/core/enumerable/any_break_spec.rb +5 -0
  228. data/spec/opal/core/enumerable/collect_break_spec.rb +13 -0
  229. data/spec/opal/core/enumerable/count_break_spec.rb +5 -0
  230. data/spec/opal/core/enumerable/detect_break_spec.rb +5 -0
  231. data/spec/opal/core/enumerable/drop_while_break_spec.rb +5 -0
  232. data/spec/opal/core/enumerable/each_slice_break.rb +6 -0
  233. data/spec/opal/core/enumerable/each_with_index_break_spec.rb +5 -0
  234. data/spec/opal/core/enumerable/each_with_object_break_spec.rb +5 -0
  235. data/spec/opal/core/enumerable/find_all_break_spec.rb +5 -0
  236. data/spec/opal/core/enumerable/find_index_break_spec.rb +5 -0
  237. data/spec/opal/core/enumerable/grep_break_spec.rb +5 -0
  238. data/spec/opal/core/enumerable/max_break_spec.rb +5 -0
  239. data/spec/opal/core/enumerable/max_by_break_spec.rb +5 -0
  240. data/spec/opal/core/enumerable/min_break_spec.rb +5 -0
  241. data/spec/opal/core/enumerable/min_by_break_spec.rb +5 -0
  242. data/spec/opal/core/enumerable/none_break_spec.rb +5 -0
  243. data/spec/opal/core/enumerable/one_break_spec.rb +5 -0
  244. data/spec/opal/core/enumerable/reduce_break_spec.rb +5 -0
  245. data/spec/opal/core/enumerable/take_while_break_spec.rb +5 -0
  246. data/spec/opal/core/fixtures/class.rb +124 -0
  247. data/spec/opal/core/fixtures/class_variables.rb +0 -0
  248. data/spec/opal/core/fixtures/constants.rb +33 -0
  249. data/spec/opal/core/fixtures/require_tree_files/file 1.rb +1 -0
  250. data/spec/opal/core/fixtures/require_tree_files/file 2.rb +1 -0
  251. data/spec/opal/core/fixtures/require_tree_files/file 3.rb +1 -0
  252. data/spec/opal/core/fixtures/require_tree_files/file 4.rb +1 -0
  253. data/spec/opal/core/fixtures/require_tree_files/file 5.rb +1 -0
  254. data/spec/opal/core/kernel/Array_spec.rb +10 -0
  255. data/spec/opal/core/kernel/block_given_spec.rb +30 -0
  256. data/spec/opal/core/kernel/class_spec.rb +6 -0
  257. data/spec/opal/core/kernel/define_singleton_method_spec.rb +21 -0
  258. data/spec/opal/core/kernel/equal_value_spec.rb +12 -0
  259. data/spec/opal/core/kernel/extend_spec.rb +21 -0
  260. data/spec/opal/core/kernel/format_spec.rb +122 -0
  261. data/spec/opal/core/kernel/freeze_spec.rb +15 -0
  262. data/spec/opal/core/kernel/instance_eval_spec.rb +28 -0
  263. data/spec/opal/core/kernel/instance_variable_defined_spec.rb +15 -0
  264. data/spec/opal/core/kernel/instance_variable_get_spec.rb +14 -0
  265. data/spec/opal/core/kernel/instance_variable_set_spec.rb +10 -0
  266. data/spec/opal/core/kernel/loop_spec.rb +23 -0
  267. data/spec/opal/core/kernel/match_spec.rb +5 -0
  268. data/spec/opal/core/kernel/method_spec.rb +31 -0
  269. data/spec/opal/core/kernel/methods_spec.rb +25 -0
  270. data/spec/opal/core/kernel/nil_spec.rb +7 -0
  271. data/spec/opal/core/kernel/p_spec.rb +15 -0
  272. data/spec/opal/core/kernel/printf_spec.rb +11 -0
  273. data/spec/opal/core/kernel/proc_spec.rb +13 -0
  274. data/spec/opal/core/kernel/rand_spec.rb +23 -0
  275. data/spec/opal/core/kernel/require_tree_spec.rb +7 -0
  276. data/spec/opal/core/kernel/respond_to_spec.rb +41 -0
  277. data/spec/opal/core/kernel/send_spec.rb +56 -0
  278. data/spec/opal/core/kernel/sprintf_spec.rb +5 -0
  279. data/spec/opal/core/language/block_spec.rb +538 -0
  280. data/spec/opal/core/language/fixtures/array.rb +11 -0
  281. data/spec/opal/core/language/fixtures/block.rb +57 -0
  282. data/spec/opal/core/language/fixtures/break.rb +240 -0
  283. data/spec/opal/core/language/fixtures/ensure.rb +72 -0
  284. data/spec/opal/core/language/fixtures/literal_lambda.rb +7 -0
  285. data/spec/opal/core/language/fixtures/metaclass.rb +33 -0
  286. data/spec/opal/core/language/fixtures/module.rb +24 -0
  287. data/spec/opal/core/language/fixtures/next.rb +128 -0
  288. data/spec/opal/core/language/fixtures/return.rb +118 -0
  289. data/spec/opal/core/language/fixtures/send.rb +110 -0
  290. data/spec/opal/core/language/fixtures/send_1.9.rb +22 -0
  291. data/spec/opal/core/language/fixtures/super.rb +308 -0
  292. data/spec/opal/core/language/fixtures/variables.rb +58 -0
  293. data/spec/opal/core/language/fixtures/yield.rb +28 -0
  294. data/spec/opal/core/language/predefined_spec.rb +85 -0
  295. data/spec/opal/core/language/proc_spec.rb +263 -0
  296. data/spec/opal/core/language/regexp_spec.rb +20 -0
  297. data/spec/opal/core/language/send_spec.rb +225 -0
  298. data/spec/opal/core/language/string_spec.rb +44 -0
  299. data/spec/opal/core/language/symbol_spec.rb +40 -0
  300. data/spec/opal/core/language/variables_spec.rb +1366 -0
  301. data/spec/opal/core/language/versions/array_1.9.rb +39 -0
  302. data/spec/opal/core/language/versions/block_1.9.rb +0 -0
  303. data/spec/opal/core/language/versions/break_1.9.rb +0 -0
  304. data/spec/opal/core/language/versions/case_1.9.rb +20 -0
  305. data/spec/opal/core/language/versions/hash_1.9.rb +18 -0
  306. data/spec/opal/core/language/versions/literal_lambda_1.9.rb +143 -0
  307. data/spec/opal/core/language/versions/not_1.9.rb +22 -0
  308. data/spec/opal/core/language/versions/send_1.9.rb +241 -0
  309. data/spec/opal/core/language/versions/symbol_1.9.rb +15 -0
  310. data/spec/opal/core/language/versions/variables_1.9.rb +8 -0
  311. data/spec/opal/core/module/alias_method_spec.rb +28 -0
  312. data/spec/opal/core/module/ancestors_spec.rb +11 -0
  313. data/spec/opal/core/module/append_features_spec.rb +14 -0
  314. data/spec/opal/core/module/attr_accessor_spec.rb +26 -0
  315. data/spec/opal/core/module/const_defined_spec.rb +85 -0
  316. data/spec/opal/core/module/const_get_spec.rb +85 -0
  317. data/spec/opal/core/module/const_missing_spec.rb +17 -0
  318. data/spec/opal/core/module/const_set_spec.rb +64 -0
  319. data/spec/opal/core/module/constants_spec.rb +49 -0
  320. data/spec/opal/core/module/fixtures/classes.rb +434 -0
  321. data/spec/opal/core/module/method_defined_spec.rb +48 -0
  322. data/spec/opal/core/module/module_function_spec.rb +25 -0
  323. data/spec/opal/core/module/name_spec.rb +52 -0
  324. data/spec/opal/core/module/public_method_defined_spec.rb +18 -0
  325. data/spec/opal/core/module/remove_const_spec.rb +22 -0
  326. data/spec/opal/core/module/undef_method_spec.rb +66 -0
  327. data/spec/opal/core/numeric/bit_and_spec.rb +7 -0
  328. data/spec/opal/core/numeric/bit_or_spec.rb +8 -0
  329. data/spec/opal/core/numeric/bit_xor_spec.rb +6 -0
  330. data/spec/opal/core/numeric/ceil_spec.rb +8 -0
  331. data/spec/opal/core/numeric/chr_spec.rb +8 -0
  332. data/spec/opal/core/numeric/comparison_spec.rb +24 -0
  333. data/spec/opal/core/numeric/complement_spec.rb +8 -0
  334. data/spec/opal/core/numeric/divide_spec.rb +10 -0
  335. data/spec/opal/core/numeric/eql_spec.rb +9 -0
  336. data/spec/opal/core/numeric/exponent_spec.rb +33 -0
  337. data/spec/opal/core/numeric/floor_spec.rb +8 -0
  338. data/spec/opal/core/numeric/gt_spec.rb +11 -0
  339. data/spec/opal/core/numeric/gte_spec.rb +12 -0
  340. data/spec/opal/core/numeric/integer_spec.rb +9 -0
  341. data/spec/opal/core/numeric/left_shift_spec.rb +21 -0
  342. data/spec/opal/core/numeric/lt_spec.rb +11 -0
  343. data/spec/opal/core/numeric/lte_spec.rb +12 -0
  344. data/spec/opal/core/numeric/minus_spec.rb +8 -0
  345. data/spec/opal/core/numeric/modulo_spec.rb +19 -0
  346. data/spec/opal/core/numeric/multiply_spec.rb +9 -0
  347. data/spec/opal/core/numeric/next_spec.rb +9 -0
  348. data/spec/opal/core/numeric/ord_spec.rb +9 -0
  349. data/spec/opal/core/numeric/plus_spec.rb +8 -0
  350. data/spec/opal/core/numeric/pred_spec.rb +7 -0
  351. data/spec/opal/core/numeric/right_shift_spec.rb +25 -0
  352. data/spec/opal/core/numeric/step_spec.rb +11 -0
  353. data/spec/opal/core/numeric/succ_spec.rb +9 -0
  354. data/spec/opal/core/numeric/times_spec.rb +36 -0
  355. data/spec/opal/core/numeric/to_f_spec.rb +7 -0
  356. data/spec/opal/core/numeric/to_i_spec.rb +7 -0
  357. data/spec/opal/core/numeric/to_json_spec.rb +8 -0
  358. data/spec/opal/core/numeric/to_s_spec.rb +26 -0
  359. data/spec/opal/core/numeric/uminus_spec.rb +9 -0
  360. data/spec/opal/core/numeric/upto_spec.rb +19 -0
  361. data/spec/opal/core/numeric/zero_spec.rb +7 -0
  362. data/spec/opal/core/proc/call_spec.rb +21 -0
  363. data/spec/opal/core/proc/element_reference_spec.rb +21 -0
  364. data/spec/opal/core/proc/proc_tricks_spec.rb +7 -0
  365. data/spec/opal/core/runtime/begin_spec.rb +39 -0
  366. data/spec/opal/core/runtime/block_send_spec.rb +28 -0
  367. data/spec/opal/core/runtime/block_spec.rb +23 -0
  368. data/spec/opal/core/runtime/bridged_classes_spec.rb +64 -0
  369. data/spec/opal/core/runtime/constants_spec.rb +13 -0
  370. data/spec/opal/core/runtime/eval_spec.rb +5 -0
  371. data/spec/opal/core/runtime/main_methods_spec.rb +27 -0
  372. data/spec/opal/core/runtime/method_missing_spec.rb +62 -0
  373. data/spec/opal/core/runtime/method_spec.rb +31 -0
  374. data/spec/opal/core/runtime/operator_call_spec.rb +13 -0
  375. data/spec/opal/core/runtime/paren_spec.rb +14 -0
  376. data/spec/opal/core/runtime/rescue_spec.rb +38 -0
  377. data/spec/opal/core/runtime/return_spec.rb +38 -0
  378. data/spec/opal/core/runtime/send_spec.rb +34 -0
  379. data/spec/opal/core/runtime/singleton_class_spec.rb +13 -0
  380. data/spec/opal/core/runtime/super_spec.rb +212 -0
  381. data/spec/opal/core/runtime/truthy_spec.rb +23 -0
  382. data/spec/opal/core/runtime/variables_spec.rb +20 -0
  383. data/spec/opal/core/source_map_spec.rb +15 -0
  384. data/spec/opal/core/string_spec.rb +11 -0
  385. data/spec/opal/stdlib/erb/erb_spec.rb +30 -0
  386. data/spec/opal/stdlib/erb/inline_block.opalerb +3 -0
  387. data/spec/opal/stdlib/erb/quoted.opalerb +1 -0
  388. data/spec/opal/stdlib/erb/simple.opalerb +1 -0
  389. data/spec/opal/stdlib/json/ext_spec.rb +48 -0
  390. data/spec/opal/stdlib/json/parse_spec.rb +33 -0
  391. data/spec/opal/stdlib/native/alias_native_spec.rb +27 -0
  392. data/spec/opal/stdlib/native/each_spec.rb +13 -0
  393. data/spec/opal/stdlib/native/element_reference_spec.rb +16 -0
  394. data/spec/opal/stdlib/native/exposure_spec.rb +33 -0
  395. data/spec/opal/stdlib/native/ext_spec.rb +19 -0
  396. data/spec/opal/stdlib/native/initialize_spec.rb +17 -0
  397. data/spec/opal/stdlib/native/method_missing_spec.rb +51 -0
  398. data/spec/opal/stdlib/native/native_reader_spec.rb +22 -0
  399. data/spec/opal/stdlib/native/native_writer_spec.rb +30 -0
  400. data/spec/opal/stdlib/native/new_spec.rb +8 -0
  401. data/spec/opal/stdlib/promise/error_spec.rb +15 -0
  402. data/spec/opal/stdlib/promise/rescue_spec.rb +35 -0
  403. data/spec/opal/stdlib/promise/then_spec.rb +54 -0
  404. data/spec/opal/stdlib/promise/trace_spec.rb +35 -0
  405. data/spec/opal/stdlib/promise/value_spec.rb +15 -0
  406. data/spec/opal/stdlib/promise/when_spec.rb +34 -0
  407. data/spec/opal/stdlib/template/paths_spec.rb +10 -0
  408. data/spec/opal/stdlib/thread/mutex_spec.rb +40 -0
  409. data/spec/opal/stdlib/thread/thread_queue_spec.rb +32 -0
  410. data/spec/opal/stdlib/thread/thread_spec.rb +60 -0
  411. data/spec/rubyspecs +329 -0
  412. data/spec/spec_helper.rb +42 -0
  413. data/spec/support/mspec_rspec_adapter.rb +33 -0
  414. data/spec/support/parser_helpers.rb +37 -0
  415. data/stdlib/README.md +3 -0
  416. data/stdlib/base64.rb +152 -0
  417. data/stdlib/benchmark.rb +10 -0
  418. data/stdlib/buffer.rb +40 -0
  419. data/stdlib/buffer/array.rb +66 -0
  420. data/stdlib/buffer/view.rb +70 -0
  421. data/stdlib/date.rb +170 -0
  422. data/stdlib/delegate.rb +29 -0
  423. data/stdlib/dir.rb +1 -0
  424. data/stdlib/encoding.rb +166 -0
  425. data/stdlib/enumerator.rb +1 -0
  426. data/stdlib/erb.rb +16 -0
  427. data/stdlib/file.rb +1 -0
  428. data/stdlib/forwardable.rb +71 -0
  429. data/stdlib/json.rb +182 -0
  430. data/stdlib/math.rb +370 -0
  431. data/stdlib/native.rb +530 -0
  432. data/stdlib/nodejs.rb +5 -0
  433. data/stdlib/nodejs/dir.rb +13 -0
  434. data/stdlib/nodejs/file.rb +98 -0
  435. data/stdlib/nodejs/fileutils.rb +26 -0
  436. data/stdlib/nodejs/io.rb +2 -0
  437. data/stdlib/nodejs/irb.rb +45 -0
  438. data/stdlib/nodejs/process.rb +16 -0
  439. data/stdlib/nodejs/require.rb +32 -0
  440. data/stdlib/nodejs/rubygems.rb +68 -0
  441. data/stdlib/nodejs/runtime.rb +25 -0
  442. data/stdlib/nodejs/yaml.rb +11 -0
  443. data/stdlib/observer.rb +202 -0
  444. data/stdlib/opal-parser.rb +53 -0
  445. data/stdlib/opal-source-maps.rb +2 -0
  446. data/stdlib/ostruct.rb +69 -0
  447. data/stdlib/pathname.rb +31 -0
  448. data/stdlib/phantomjs.rb +8 -0
  449. data/stdlib/pp.rb +12 -0
  450. data/stdlib/process.rb +10 -0
  451. data/stdlib/promise.rb +300 -0
  452. data/stdlib/racc/parser.rb +215 -0
  453. data/stdlib/rbconfig.rb +20 -0
  454. data/stdlib/securerandom.rb +12 -0
  455. data/stdlib/set.rb +116 -0
  456. data/stdlib/singleton.rb +40 -0
  457. data/stdlib/source_map.rb +5 -0
  458. data/stdlib/source_map/map.rb +220 -0
  459. data/stdlib/source_map/mapping.rb +26 -0
  460. data/stdlib/source_map/offset.rb +88 -0
  461. data/stdlib/source_map/version.rb +3 -0
  462. data/stdlib/source_map/vlq.rb +98 -0
  463. data/stdlib/sourcemap.rb +1 -0
  464. data/stdlib/stringio.rb +181 -0
  465. data/stdlib/strscan.rb +155 -0
  466. data/stdlib/template.rb +46 -0
  467. data/stdlib/thread.rb +160 -0
  468. data/stdlib/time.rb +9 -0
  469. data/tasks/github.rake +19 -0
  470. metadata +690 -0
@@ -0,0 +1,1684 @@
1
+ class Opal::Parser
2
+
3
+ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
4
+ kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT
5
+ kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER
6
+ kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD
7
+ kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__
8
+ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT
9
+ tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT
10
+ tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP
11
+ tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT
12
+ tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG
13
+ ARRAY_BEG tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2
14
+ tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET
15
+ tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
16
+ tWORDS_BEG tAWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING
17
+ tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG
18
+ tLBRACK2 tLBRACK
19
+
20
+ prechigh
21
+ right tBANG tTILDE tUPLUS
22
+ right tPOW
23
+ right tUMINUS_NUM tUMINUS
24
+ left tSTAR2 tDIVIDE tPERCENT
25
+ left tPLUS tMINUS
26
+ left tLSHFT tRSHFT
27
+ left tAMPER2
28
+ left tPIPE tCARET
29
+ left tGT tGEQ tLT tLEQ
30
+ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
31
+ left tANDOP
32
+ left tOROP
33
+ nonassoc tDOT2 tDOT3
34
+ right tEH tCOLON
35
+ left kRESCUE_MOD
36
+ right tEQL tOP_ASGN
37
+ nonassoc kDEFINED
38
+ right kNOT
39
+ left kOR kAND
40
+ nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD
41
+ nonassoc tLBRACE_ARG
42
+ nonassoc tLOWEST
43
+ preclow
44
+
45
+ rule
46
+
47
+ program: top_compstmt
48
+
49
+ top_compstmt: top_stmts opt_terms
50
+ {
51
+ result = new_compstmt val[0]
52
+ }
53
+
54
+ top_stmts: # none
55
+ {
56
+ result = new_block
57
+ }
58
+ | top_stmt
59
+ {
60
+ result = new_block val[0]
61
+ }
62
+ | top_stmts terms top_stmt
63
+ {
64
+ val[0] << val[2]
65
+ result = val[0]
66
+ }
67
+
68
+ top_stmt: stmt
69
+ | klBEGIN tLCURLY top_compstmt tRCURLY
70
+ {
71
+ result = val[2]
72
+ }
73
+
74
+ bodystmt: compstmt opt_rescue opt_else opt_ensure
75
+ {
76
+ result = new_body(val[0], val[1], val[2], val[3])
77
+ }
78
+
79
+ compstmt: stmts opt_terms
80
+ {
81
+ result = new_compstmt val[0]
82
+ }
83
+
84
+ stmts: # none
85
+ {
86
+ result = new_block
87
+ }
88
+ | stmt
89
+ {
90
+ result = new_block val[0]
91
+ }
92
+ | stmts terms stmt
93
+ {
94
+ val[0] << val[2]
95
+ result = val[0]
96
+ }
97
+
98
+ stmt: kALIAS fitem
99
+ {
100
+ lexer.lex_state = :expr_fname
101
+ }
102
+ fitem
103
+ {
104
+ result = new_alias(val[0], val[1], val[3])
105
+ }
106
+ | kALIAS tGVAR tGVAR
107
+ {
108
+ result = s(:valias, value(val[1]).to_sym, value(val[2]).to_sym)
109
+ }
110
+ | kALIAS tGVAR tBACK_REF
111
+ | kALIAS tGVAR tNTH_REF
112
+ {
113
+ result = s(:valias, value(val[1]).to_sym, value(val[2]).to_sym)
114
+ }
115
+ | kUNDEF undef_list
116
+ {
117
+ result = val[1]
118
+ }
119
+ | stmt kIF_MOD expr_value
120
+ {
121
+ result = new_if(val[1], val[2], val[0], nil)
122
+ }
123
+ | stmt kUNLESS_MOD expr_value
124
+ {
125
+ result = new_if(val[1], val[2], nil, val[0])
126
+ }
127
+ | stmt kWHILE_MOD expr_value
128
+ {
129
+ result = new_while(val[1], val[2], val[0])
130
+ }
131
+ | stmt kUNTIL_MOD expr_value
132
+ {
133
+ result = new_until(val[1], val[2], val[0])
134
+ }
135
+ | stmt kRESCUE_MOD stmt
136
+ {
137
+ result = new_rescue_mod(val[1], val[0], val[2])
138
+ }
139
+ | klEND tLCURLY compstmt tRCURLY
140
+ | lhs tEQL command_call
141
+ {
142
+ result = new_assign(val[0], val[1], val[2])
143
+ }
144
+ | mlhs tEQL command_call
145
+ {
146
+ result = s(:masgn, val[0], s(:to_ary, val[2]))
147
+ }
148
+ | var_lhs tOP_ASGN command_call
149
+ {
150
+ result = new_op_asgn val[1], val[0], val[2]
151
+ }
152
+ | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call
153
+ | primary_value tDOT tIDENTIFIER tOP_ASGN command_call
154
+ {
155
+ result = s(:op_asgn2, val[0], op_to_setter(val[2]), value(val[3]).to_sym, val[4])
156
+ }
157
+ | primary_value tDOT tCONSTANT tOP_ASGN command_call
158
+ | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call
159
+ | backref tOP_ASGN command_call
160
+ | lhs tEQL mrhs
161
+ {
162
+ result = new_assign val[0], val[1], s(:svalue, val[2])
163
+ }
164
+ | mlhs tEQL arg_value
165
+ {
166
+ result = s(:masgn, val[0], s(:to_ary, val[2]))
167
+ }
168
+ | mlhs tEQL mrhs
169
+ {
170
+ result = s(:masgn, val[0], val[2])
171
+ }
172
+ | expr
173
+
174
+ expr: command_call
175
+ | expr kAND expr
176
+ {
177
+ result = s(:and, val[0], val[2])
178
+ }
179
+ | expr kOR expr
180
+ {
181
+ result = s(:or, val[0], val[2])
182
+ }
183
+ | kNOT expr
184
+ {
185
+ result = new_unary_call(['!', []], val[1])
186
+ }
187
+ | tBANG command_call
188
+ {
189
+ result = new_unary_call(val[0], val[1])
190
+ }
191
+ | arg
192
+
193
+ expr_value: expr
194
+
195
+ command_call: command
196
+ | block_command
197
+ | kRETURN call_args
198
+ {
199
+ result = new_return(val[0], val[1])
200
+ }
201
+ | kBREAK call_args
202
+ {
203
+ result = new_break(val[0], val[1])
204
+ }
205
+ | kNEXT call_args
206
+ {
207
+ result = new_next(val[0], val[1])
208
+ }
209
+
210
+ block_command: block_call
211
+ | block_call tDOT operation2 command_args
212
+ | block_call tCOLON2 operation2 command_args
213
+
214
+ cmd_brace_block: tLBRACE_ARG opt_block_var compstmt tRCURLY
215
+
216
+ command: operation command_args =tLOWEST
217
+ {
218
+ result = new_call(nil, val[0], val[1])
219
+ }
220
+ | operation command_args cmd_brace_block
221
+ | primary_value tDOT operation2 command_args =tLOWEST
222
+ {
223
+ result = new_call(val[0], val[2], val[3])
224
+ }
225
+ | primary_value tDOT operation2 command_args cmd_brace_block
226
+ | primary_value tCOLON2 operation2 command_args =tLOWEST
227
+ {
228
+ result = new_call(val[0], val[2], val[3])
229
+ }
230
+ | primary_value tCOLON2 operation2 command_args cmd_brace_block
231
+ | kSUPER command_args
232
+ {
233
+ result = new_super(val[0], val[1])
234
+ }
235
+ | kYIELD command_args
236
+ {
237
+ result = new_yield val[1]
238
+ }
239
+
240
+ mlhs: mlhs_basic
241
+ {
242
+ result = val[0]
243
+ }
244
+ | tLPAREN mlhs_entry tRPAREN
245
+ {
246
+ result = val[1]
247
+ }
248
+
249
+ mlhs_entry: mlhs_basic
250
+ {
251
+ result = val[0]
252
+ }
253
+ | tLPAREN mlhs_entry tRPAREN
254
+ {
255
+ result = val[1]
256
+ }
257
+
258
+ mlhs_basic: mlhs_head
259
+ {
260
+ result = val[0]
261
+ }
262
+ | mlhs_head mlhs_item
263
+ {
264
+ result = val[0] << val[1]
265
+ }
266
+ | mlhs_head tSTAR mlhs_node
267
+ {
268
+ result = val[0] << s(:splat, val[2])
269
+ }
270
+ | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post
271
+ | mlhs_head tSTAR
272
+ {
273
+ result = val[0] << s(:splat)
274
+ }
275
+ | mlhs_head tSTAR tCOMMA mlhs_post
276
+ | tSTAR mlhs_node
277
+ {
278
+ result = s(:array, s(:splat, val[1]))
279
+ }
280
+ | tSTAR
281
+ {
282
+ result = s(:array, s(:splat))
283
+ }
284
+ | tSTAR tCOMMA mlhs_post
285
+
286
+ mlhs_item: mlhs_node
287
+ {
288
+ result = val[0]
289
+ }
290
+ | tLPAREN mlhs_entry tRPAREN
291
+ {
292
+ result = val[1]
293
+ }
294
+
295
+ mlhs_head: mlhs_item tCOMMA
296
+ {
297
+ result = s(:array, val[0])
298
+ }
299
+ | mlhs_head mlhs_item tCOMMA
300
+ {
301
+ result = val[0] << val[1]
302
+ }
303
+
304
+ mlhs_post: mlhs_item
305
+ | mlhs_post tCOMMA mlhs_item
306
+
307
+ mlhs_node: variable
308
+ {
309
+ result = new_assignable val[0]
310
+ }
311
+ | primary_value tLBRACK2 aref_args tRBRACK
312
+ {
313
+ args = val[2] ? val[2] : []
314
+ result = s(:attrasgn, val[0], :[]=, s(:arglist, *args))
315
+ }
316
+ | primary_value tDOT tIDENTIFIER
317
+ {
318
+ result = new_call val[0], val[2], []
319
+ }
320
+ | primary_value tCOLON2 tIDENTIFIER
321
+ | primary_value tDOT tCONSTANT
322
+ | primary_value tCOLON2 tCONSTANT
323
+ | tCOLON3 tCONSTANT
324
+ | backref
325
+
326
+ lhs: variable
327
+ {
328
+ result = new_assignable val[0]
329
+ }
330
+ | primary_value tLBRACK2 aref_args tRBRACK
331
+ {
332
+ result = new_attrasgn(val[0], :[]=, val[2])
333
+ }
334
+ | primary_value tDOT tIDENTIFIER
335
+ {
336
+ result = new_attrasgn(val[0], op_to_setter(val[2]))
337
+ }
338
+ | primary_value tCOLON2 tIDENTIFIER
339
+ {
340
+ result = new_attrasgn(val[0], op_to_setter(val[2]))
341
+ }
342
+ | primary_value tDOT tCONSTANT
343
+ {
344
+ result = new_attrasgn(val[0], op_to_setter(val[2]))
345
+ }
346
+ | primary_value tCOLON2 tCONSTANT
347
+ {
348
+ result = new_colon2(val[0], val[1], val[2])
349
+ }
350
+ | tCOLON3 tCONSTANT
351
+ {
352
+ result = new_colon3(val[0], val[1])
353
+ }
354
+ | backref
355
+
356
+ cname: tCONSTANT
357
+
358
+ cpath: tCOLON3 cname
359
+ {
360
+ result = new_colon3(val[0], val[1])
361
+ }
362
+ | cname
363
+ {
364
+ result = new_const(val[0])
365
+ }
366
+ | primary_value tCOLON2 cname
367
+ {
368
+ result = new_colon2(val[0], val[1], val[2])
369
+ }
370
+
371
+ fname: tIDENTIFIER
372
+ | tCONSTANT
373
+ | tFID
374
+ | op
375
+ {
376
+ lexer.lex_state = :expr_end
377
+ result = val[0]
378
+ }
379
+ | reswords
380
+ {
381
+ lexer.lex_state = :expr_end
382
+ result = val[0]
383
+ }
384
+
385
+ fitem: fname
386
+ {
387
+ result = new_sym(val[0])
388
+ }
389
+ | symbol
390
+
391
+ undef_list: fitem
392
+ {
393
+ result = s(:undef, val[0])
394
+ }
395
+ | undef_list tCOMMA fitem
396
+ {
397
+ result = val[0] << val[2]
398
+ }
399
+
400
+ op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ
401
+ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ
402
+ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
403
+ | tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE
404
+ | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2
405
+
406
+ reswords: k__LINE__ | k__FILE__ | klBEGIN | klEND | kALIAS | kAND
407
+ | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED
408
+ | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE
409
+ | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT
410
+ | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF
411
+ | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD
412
+ | kIF_MOD | kUNLESS_MOD | kWHILE_MOD | kUNTIL_MOD | kRESCUE_MOD
413
+ | kIF | kWHILE | kUNTIL | kUNLESS
414
+
415
+ arg: lhs tEQL arg
416
+ {
417
+ result = new_assign(val[0], val[1], val[2])
418
+ }
419
+ | lhs tEQL arg kRESCUE_MOD arg
420
+ {
421
+ result = new_assign val[0], val[1], s(:rescue_mod, val[2], val[4])
422
+ }
423
+ | var_lhs tOP_ASGN arg
424
+ {
425
+ result = new_op_asgn val[1], val[0], val[2]
426
+ }
427
+ | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg
428
+ {
429
+ result = new_op_asgn1(val[0], val[2], val[4], val[5])
430
+ }
431
+ | primary_value tDOT tIDENTIFIER tOP_ASGN arg
432
+ {
433
+ result = s(:op_asgn2, val[0], op_to_setter(val[2]), value(val[3]).to_sym, val[4])
434
+ }
435
+ | primary_value tDOT tCONSTANT tOP_ASGN arg
436
+ | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg
437
+ | primary_value tCOLON2 tCONSTANT tOP_ASGN arg
438
+ | tCOLON3 tCONSTANT tOP_ASGN arg
439
+ | backref tOP_ASGN arg
440
+ | arg tDOT2 arg
441
+ {
442
+ result = new_irange(val[0], val[1], val[2])
443
+ }
444
+ | arg tDOT3 arg
445
+ {
446
+ result = new_erange(val[0], val[1], val[2])
447
+ }
448
+ | arg tPLUS arg
449
+ {
450
+ result = new_binary_call(val[0], val[1], val[2])
451
+ }
452
+ | arg tMINUS arg
453
+ {
454
+ result = new_binary_call(val[0], val[1], val[2])
455
+ }
456
+ | arg tSTAR2 arg
457
+ {
458
+ result = new_binary_call(val[0], val[1], val[2])
459
+ }
460
+ | arg tDIVIDE arg
461
+ {
462
+ result = new_binary_call(val[0], val[1], val[2])
463
+ }
464
+ | arg tPERCENT arg
465
+ {
466
+ result = new_binary_call(val[0], val[1], val[2])
467
+ }
468
+ | arg tPOW arg
469
+ {
470
+ result = new_binary_call(val[0], val[1], val[2])
471
+ }
472
+ | '-@NUM' tINTEGER tPOW arg
473
+ {
474
+ result = new_call new_binary_call(new_int(val[1]), val[2], val[3]), [:"-@", []], []
475
+ }
476
+ | '-@NUM' tFLOAT tPOW arg
477
+ {
478
+ result = new_call new_binary_call(new_float(val[1]), val[2], val[3]), [:"-@", []], []
479
+ }
480
+ | tUPLUS arg
481
+ {
482
+ result = new_call val[1], [:"+@", []], []
483
+ if [:int, :float].include? val[1].type
484
+ result = val[1]
485
+ end
486
+ }
487
+ | tUMINUS arg
488
+ {
489
+ result = new_call val[1], [:"-@", []], []
490
+ if val[1].type == :int
491
+ val[1][1] = -val[1][1]
492
+ result = val[1]
493
+ elsif val[1].type == :float
494
+ val[1][1] = -val[1][1].to_f
495
+ result = val[1]
496
+ end
497
+ }
498
+ | arg tPIPE arg
499
+ {
500
+ result = new_binary_call(val[0], val[1], val[2])
501
+ }
502
+ | arg tCARET arg
503
+ {
504
+ result = new_binary_call(val[0], val[1], val[2])
505
+ }
506
+ | arg tAMPER2 arg
507
+ {
508
+ result = new_binary_call(val[0], val[1], val[2])
509
+ }
510
+ | arg tCMP arg
511
+ {
512
+ result = new_binary_call(val[0], val[1], val[2])
513
+ }
514
+ | arg tGT arg
515
+ {
516
+ result = new_binary_call(val[0], val[1], val[2])
517
+ }
518
+ | arg tGEQ arg
519
+ {
520
+ result = new_binary_call(val[0], val[1], val[2])
521
+ }
522
+ | arg tLT arg
523
+ {
524
+ result = new_binary_call(val[0], val[1], val[2])
525
+ }
526
+ | arg tLEQ arg
527
+ {
528
+ result = new_binary_call(val[0], val[1], val[2])
529
+ }
530
+ | arg tEQ arg
531
+ {
532
+ result = new_binary_call(val[0], val[1], val[2])
533
+ }
534
+ | arg tEQQ arg
535
+ {
536
+ result = new_binary_call(val[0], val[1], val[2])
537
+ }
538
+ | arg tNEQ arg
539
+ {
540
+ result = new_unary_call(['!', []], new_binary_call(
541
+ val[0], ['==', []], val[2]))
542
+ }
543
+ | arg tMATCH arg
544
+ {
545
+ result = new_binary_call(val[0], val[1], val[2])
546
+ }
547
+ | arg tNMATCH arg
548
+ {
549
+ result = new_not(val[1], new_binary_call(
550
+ val[0], ['=~', []], val[2]))
551
+ }
552
+ | tBANG arg
553
+ {
554
+ result = new_unary_call(val[0], val[1])
555
+ }
556
+ | tTILDE arg
557
+ {
558
+ result = new_unary_call(val[0], val[1])
559
+ }
560
+ | arg tLSHFT arg
561
+ {
562
+ result = new_binary_call(val[0], val[1], val[2])
563
+ }
564
+ | arg tRSHFT arg
565
+ {
566
+ result = new_binary_call(val[0], val[1], val[2])
567
+ }
568
+ | arg tANDOP arg
569
+ {
570
+ result = new_and(val[0], val[1], val[2])
571
+ }
572
+ | arg tOROP arg
573
+ {
574
+ result = new_or(val[0], val[1], val[2])
575
+ }
576
+ | kDEFINED opt_nl arg
577
+ {
578
+ result = s(:defined, val[2])
579
+ }
580
+ | arg tEH arg tCOLON arg
581
+ {
582
+ result = new_if(val[1], val[0], val[2], val[4])
583
+ }
584
+ | primary
585
+
586
+ arg_value: arg
587
+
588
+ aref_args: none
589
+ {
590
+ result = nil
591
+ }
592
+ | command opt_nl
593
+ {
594
+ result = [val[0]]
595
+ }
596
+ | args trailer
597
+ {
598
+ result = val[0]
599
+ }
600
+ | args tCOMMA assocs trailer
601
+ {
602
+ val[0] << s(:hash, *val[2])
603
+ result = val[0]
604
+ }
605
+ | assocs trailer
606
+ {
607
+ result = [s(:hash, *val[0])]
608
+ }
609
+
610
+ paren_args: tLPAREN2 none tRPAREN
611
+ {
612
+ result = []
613
+ }
614
+ | tLPAREN2 call_args opt_nl tRPAREN
615
+ {
616
+ result = val[1]
617
+ }
618
+ | tLPAREN2 block_call opt_nl tRPAREN
619
+ | tLPAREN2 args tCOMMA block_call opt_nl tRPAREN
620
+
621
+ opt_paren_args: none
622
+ {
623
+ result = []
624
+ }
625
+ | paren_args
626
+
627
+ call_args: command
628
+ {
629
+ result = [val[0]]
630
+ }
631
+ | args opt_block_arg
632
+ {
633
+ result = val[0]
634
+ add_block_pass val[0], val[1]
635
+ }
636
+ | assocs opt_block_arg
637
+ {
638
+ result = [new_hash(nil, val[0], nil)]
639
+ add_block_pass result, val[1]
640
+ }
641
+ | args tCOMMA assocs opt_block_arg
642
+ {
643
+ result = val[0]
644
+ result << new_hash(nil, val[2], nil)
645
+ }
646
+ | block_arg
647
+ {
648
+ result = []
649
+ add_block_pass result, val[0]
650
+ }
651
+
652
+ call_args2: arg_value tCOMMA args opt_block_arg
653
+ | block_arg
654
+
655
+ command_args: {
656
+ lexer.cmdarg_push 1
657
+ }
658
+ open_args
659
+ {
660
+ lexer.cmdarg_pop
661
+ result = val[1]
662
+ }
663
+
664
+ open_args: call_args
665
+ | tLPAREN_ARG tRPAREN
666
+ {
667
+ result = nil
668
+ }
669
+ | tLPAREN_ARG call_args2 tRPAREN
670
+ {
671
+ result = val[1]
672
+ }
673
+
674
+ block_arg: tAMPER arg_value
675
+ {
676
+ result = new_block_pass(val[0], val[1])
677
+ }
678
+
679
+ opt_block_arg: tCOMMA block_arg
680
+ {
681
+ result = val[1]
682
+ }
683
+ | # none
684
+ {
685
+ result = nil
686
+ }
687
+
688
+ args: arg_value
689
+ {
690
+ result = [val[0]]
691
+ }
692
+ | tSTAR arg_value
693
+ {
694
+ result = [new_splat(val[0], val[1])]
695
+ }
696
+ | args tCOMMA arg_value
697
+ {
698
+ result = val[0] << val[2]
699
+ }
700
+ | args tCOMMA tSTAR arg_value
701
+ {
702
+ result = val[0] << new_splat(val[2], val[3])
703
+ }
704
+
705
+ mrhs: args tCOMMA arg_value
706
+ {
707
+ val[0] << val[2]
708
+ result = s(:array, *val[0])
709
+ }
710
+ | args tCOMMA tSTAR arg_value
711
+ {
712
+ val[0] << s(:splat, val[3])
713
+ result = s(:array, *val[0])
714
+ }
715
+ | tSTAR arg_value
716
+ {
717
+ result = s(:splat, val[1])
718
+ }
719
+
720
+ primary: literal
721
+ | strings
722
+ | xstring
723
+ | regexp
724
+ | words
725
+ | awords
726
+ | var_ref
727
+ | backref
728
+ | tFID
729
+ | kBEGIN
730
+ {
731
+ result = lexer.line
732
+ }
733
+ bodystmt kEND
734
+ {
735
+ result = s(:begin, val[2])
736
+ }
737
+ | tLPAREN_ARG expr opt_nl tRPAREN
738
+ {
739
+ result = val[1]
740
+ }
741
+ | tLPAREN compstmt tRPAREN
742
+ {
743
+ result = new_paren(val[0], val[1], val[2])
744
+ }
745
+ | primary_value tCOLON2 tCONSTANT
746
+ {
747
+ result = new_colon2(val[0], val[1], val[2])
748
+ }
749
+ | tCOLON3 tCONSTANT
750
+ {
751
+ result = new_colon3(val[0], val[1])
752
+ }
753
+ | primary_value tLBRACK2 aref_args tRBRACK
754
+ {
755
+ result = new_call val[0], [:[], []], val[2]
756
+ }
757
+ | tLBRACK aref_args tRBRACK
758
+ {
759
+ result = new_array(val[0], val[1], val[2])
760
+ }
761
+ | tLBRACE assoc_list tRCURLY
762
+ {
763
+ result = new_hash(val[0], val[1], val[2])
764
+ }
765
+ | kRETURN
766
+ {
767
+ result = new_return(val[0])
768
+ }
769
+ | kYIELD tLPAREN2 call_args tRPAREN
770
+ {
771
+ result = new_yield val[2]
772
+ }
773
+ | kYIELD tLPAREN2 tRPAREN
774
+ {
775
+ result = s(:yield)
776
+ }
777
+ | kYIELD
778
+ {
779
+ result = s(:yield)
780
+ }
781
+ | kDEFINED opt_nl tLPAREN2 expr tRPAREN
782
+ {
783
+ result = s(:defined, val[3])
784
+ }
785
+ | kNOT tLPAREN2 expr tRPAREN
786
+ {
787
+ result = new_unary_call(['!', []], val[2])
788
+ }
789
+ | kNOT tLPAREN2 tRPAREN
790
+ {
791
+ result = new_unary_call(['!', []], new_nil(val[0]))
792
+ }
793
+ | operation brace_block
794
+ {
795
+ result = new_call(nil, val[0], [])
796
+ result << val[1]
797
+ }
798
+ | method_call
799
+ | method_call brace_block
800
+ {
801
+ val[0] << val[1]
802
+ result = val[0]
803
+ }
804
+ | tLAMBDA lambda
805
+ {
806
+ result = val[1]
807
+ }
808
+ | kIF expr_value then compstmt if_tail kEND
809
+ {
810
+ result = new_if(val[0], val[1], val[3], val[4])
811
+ }
812
+ | kUNLESS expr_value then compstmt opt_else kEND
813
+ {
814
+ result = new_if(val[0], val[1], val[4], val[3])
815
+ }
816
+ | kWHILE
817
+ {
818
+ lexer.cond_push 1
819
+ result = lexer.line
820
+ }
821
+ expr_value do
822
+ {
823
+ lexer.cond_pop
824
+ }
825
+ compstmt kEND
826
+ {
827
+ result = s(:while, val[2], val[5])
828
+ }
829
+ | kUNTIL
830
+ {
831
+ lexer.cond_push 1
832
+ result = lexer.line
833
+ }
834
+ expr_value do
835
+ {
836
+ lexer.cond_pop
837
+ }
838
+ compstmt kEND
839
+ {
840
+ result = s(:until, val[2], val[5])
841
+ }
842
+ | kCASE expr_value opt_terms case_body kEND
843
+ {
844
+ result = s(:case, val[1], *val[3])
845
+ }
846
+ | kCASE opt_terms case_body kEND
847
+ {
848
+ result = s(:case, nil, *val[2])
849
+ }
850
+ | kCASE opt_terms kELSE compstmt kEND
851
+ {
852
+ result = s(:case, nil, val[3])
853
+ }
854
+ | kFOR for_var kIN
855
+ {
856
+ lexer.cond_push 1
857
+ result = lexer.line
858
+ }
859
+ expr_value do
860
+ {
861
+ lexer.cond_pop
862
+ }
863
+ compstmt kEND
864
+ {
865
+ result = s(:for, val[4], val[1], val[7])
866
+ }
867
+ | kCLASS cpath superclass
868
+ {
869
+ # ...
870
+ }
871
+ bodystmt kEND
872
+ {
873
+ result = new_class val[0], val[1], val[2], val[4], val[5]
874
+ }
875
+ | kCLASS tLSHFT
876
+ {
877
+ result = lexer.line
878
+ }
879
+ expr term
880
+ {
881
+ # ...
882
+ }
883
+ bodystmt kEND
884
+ {
885
+ result = new_sclass(val[0], val[3], val[6], val[7])
886
+ }
887
+ | kMODULE
888
+ {
889
+ result = lexer.line
890
+ }
891
+ cpath
892
+ {
893
+ # ...
894
+ }
895
+ bodystmt kEND
896
+ {
897
+ result = new_module(val[0], val[2], val[4], val[5])
898
+ }
899
+ | kDEF fname
900
+ {
901
+ push_scope
902
+ }
903
+ f_arglist bodystmt kEND
904
+ {
905
+ result = new_def(val[0], nil, val[1], val[3], val[4], val[5])
906
+ pop_scope
907
+ }
908
+ | kDEF singleton dot_or_colon
909
+ {
910
+ lexer.lex_state = :expr_fname
911
+ }
912
+ fname
913
+ {
914
+ push_scope
915
+ }
916
+ f_arglist bodystmt kEND
917
+ {
918
+ result = new_def(val[0], val[1], val[4], val[6], val[7], val[8])
919
+ pop_scope
920
+ }
921
+ | kBREAK
922
+ {
923
+ result = new_break(val[0])
924
+ }
925
+ | kNEXT
926
+ {
927
+ result = s(:next)
928
+ }
929
+ | kREDO
930
+ {
931
+ result = s(:redo)
932
+ }
933
+ | kRETRY
934
+
935
+ primary_value: primary
936
+
937
+ then: term
938
+ | tCOLON
939
+ | kTHEN
940
+ | term kTHEN
941
+
942
+ do: term
943
+ | tCOLON
944
+ | kDO_COND
945
+
946
+ lambda: f_larglist lambda_body
947
+ {
948
+ result = new_call nil, [:lambda, []], []
949
+ result << new_iter(val[0], val[1])
950
+ }
951
+
952
+ f_larglist: tLPAREN2 block_param tRPAREN
953
+ {
954
+ result = val[1]
955
+ }
956
+ | tLPAREN2 tRPAREN
957
+ {
958
+ result = nil
959
+ }
960
+ | block_param
961
+ | none
962
+
963
+ lambda_body: tLAMBEG compstmt tRCURLY
964
+ {
965
+ result = val[1]
966
+ }
967
+ | kDO_LAMBDA compstmt kEND
968
+ {
969
+ result = val[1]
970
+ }
971
+
972
+ if_tail: opt_else
973
+ {
974
+ result = val[0]
975
+ }
976
+ | kELSIF expr_value then compstmt if_tail
977
+ {
978
+ result = new_if(val[0], val[1], val[3], val[4])
979
+ }
980
+
981
+ opt_else: none
982
+ | kELSE compstmt
983
+ {
984
+ result = val[1]
985
+ }
986
+
987
+ f_block_optarg: f_block_opt
988
+ {
989
+ result = s(:block, val[0])
990
+ }
991
+ | f_block_optarg tCOMMA f_block_opt
992
+ {
993
+ val[0] << val[2]
994
+ result = val[0]
995
+ }
996
+
997
+ f_block_opt: tIDENTIFIER tEQL primary_value
998
+ {
999
+ result = new_assign(new_assignable(new_ident(
1000
+ val[0])), val[1], val[2])
1001
+ }
1002
+
1003
+ opt_block_var: none
1004
+ | tPIPE tPIPE
1005
+ {
1006
+ result = nil
1007
+ }
1008
+ | tOROP
1009
+ {
1010
+ result = nil
1011
+ }
1012
+ | tPIPE block_param tPIPE
1013
+ {
1014
+ result = val[1]
1015
+ }
1016
+
1017
+ block_args_tail: f_block_arg
1018
+ {
1019
+ result = val[0]
1020
+ }
1021
+
1022
+ opt_block_args_tail: tCOMMA block_args_tail
1023
+ {
1024
+ result = val[1]
1025
+ }
1026
+ | none
1027
+ {
1028
+ nil
1029
+ }
1030
+
1031
+ block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1032
+ {
1033
+ result = new_block_args(val[0], val[2], val[4], val[5])
1034
+ }
1035
+ | f_arg tCOMMA f_block_optarg opt_block_args_tail
1036
+ {
1037
+ result = new_block_args(val[0], val[2], nil, val[3])
1038
+ }
1039
+ | f_arg tCOMMA f_rest_arg opt_block_args_tail
1040
+ {
1041
+ result = new_block_args(val[0], nil, val[2], val[3])
1042
+ }
1043
+ | f_arg tCOMMA
1044
+ {
1045
+ result = new_block_args(val[0], nil, nil, nil)
1046
+ }
1047
+ | f_arg opt_block_args_tail
1048
+ {
1049
+ result = new_block_args(val[0], nil, nil, val[1])
1050
+ }
1051
+ | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
1052
+ {
1053
+ result = new_block_args(nil, val[0], val[2], val[3])
1054
+ }
1055
+ | f_block_optarg opt_block_args_tail
1056
+ {
1057
+ result = new_block_args(nil, val[0], nil, val[1])
1058
+ }
1059
+ | f_rest_arg opt_block_args_tail
1060
+ {
1061
+ result = new_block_args(nil, nil, val[0], val[1])
1062
+ }
1063
+ | block_args_tail
1064
+ {
1065
+ result = new_block_args(nil, nil, nil, val[0])
1066
+ }
1067
+
1068
+ do_block: kDO_BLOCK
1069
+ {
1070
+ push_scope :block
1071
+ result = lexer.line
1072
+ }
1073
+ opt_block_var compstmt kEND
1074
+ {
1075
+ result = new_iter val[2], val[3]
1076
+ pop_scope
1077
+ }
1078
+
1079
+ block_call: command do_block
1080
+ {
1081
+ val[0] << val[1]
1082
+ result = val[0]
1083
+ }
1084
+ | block_call tDOT operation2 opt_paren_args
1085
+ | block_call tCOLON2 operation2 opt_paren_args
1086
+
1087
+ method_call: operation paren_args
1088
+ {
1089
+ result = new_call(nil, val[0], val[1])
1090
+ }
1091
+ | primary_value tDOT operation2 opt_paren_args
1092
+ {
1093
+ result = new_call(val[0], val[2], val[3])
1094
+ }
1095
+ | primary_value tDOT paren_args
1096
+ {
1097
+ result = new_call(val[0], [:call, []], val[2])
1098
+ }
1099
+ | primary_value tCOLON2 operation2 paren_args
1100
+ {
1101
+ result = new_call(val[0], val[2], val[3])
1102
+ }
1103
+ | primary_value tCOLON2 operation3
1104
+ {
1105
+ result = new_call(val[0], val[2])
1106
+ }
1107
+ | kSUPER paren_args
1108
+ {
1109
+ result = new_super(val[0], val[1])
1110
+ }
1111
+ | kSUPER
1112
+ {
1113
+ result = new_super(val[0], nil)
1114
+ }
1115
+
1116
+ brace_block: tLCURLY
1117
+ {
1118
+ push_scope :block
1119
+ result = lexer.line
1120
+ }
1121
+ opt_block_var compstmt tRCURLY
1122
+ {
1123
+ result = new_iter val[2], val[3]
1124
+ pop_scope
1125
+ }
1126
+ | kDO
1127
+ {
1128
+ push_scope :block
1129
+ result = lexer.line
1130
+ }
1131
+ opt_block_var compstmt kEND
1132
+ {
1133
+ result = new_iter val[2], val[3]
1134
+ pop_scope
1135
+ }
1136
+
1137
+ case_body: kWHEN
1138
+ {
1139
+ result = lexer.line
1140
+ }
1141
+ args then compstmt cases
1142
+ {
1143
+ part = s(:when, s(:array, *val[2]), val[4])
1144
+ result = [part]
1145
+ result.push(*val[5]) if val[5]
1146
+ }
1147
+
1148
+ cases: opt_else
1149
+ {
1150
+ result = [val[0]]
1151
+ }
1152
+ | case_body
1153
+
1154
+ opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue
1155
+ {
1156
+ exc = val[1] || s(:array)
1157
+ exc << new_assign(val[2], val[2], s(:gvar, '$!'.intern)) if val[2]
1158
+ result = [s(:resbody, exc, val[4])]
1159
+ result.push val[5].first if val[5]
1160
+ }
1161
+ | # none
1162
+ {
1163
+ result = nil
1164
+ }
1165
+
1166
+ exc_list: arg_value
1167
+ {
1168
+ result = s(:array, val[0])
1169
+ }
1170
+ | mrhs
1171
+ | none
1172
+
1173
+ exc_var: tASSOC lhs
1174
+ {
1175
+ result = val[1]
1176
+ }
1177
+ | none
1178
+ {
1179
+ result = nil
1180
+ }
1181
+
1182
+ opt_ensure: kENSURE compstmt
1183
+ {
1184
+ result = val[1].nil? ? s(:nil) : val[1]
1185
+ }
1186
+ | none
1187
+
1188
+ literal: numeric
1189
+ | symbol
1190
+ | dsym
1191
+
1192
+ strings: string
1193
+ {
1194
+ result = new_str val[0]
1195
+ }
1196
+
1197
+ string: string1
1198
+ | string string1
1199
+ {
1200
+ result = str_append val[0], val[1]
1201
+ }
1202
+
1203
+ string1: tSTRING_BEG string_contents tSTRING_END
1204
+ {
1205
+ result = val[1]
1206
+ }
1207
+ | tSTRING
1208
+ {
1209
+ result = s(:str, value(val[0]))
1210
+ }
1211
+
1212
+ xstring: tXSTRING_BEG xstring_contents tSTRING_END
1213
+ {
1214
+ result = new_xstr(val[0], val[1], val[2])
1215
+ }
1216
+
1217
+ regexp: tREGEXP_BEG xstring_contents tREGEXP_END
1218
+ {
1219
+ result = new_regexp val[1], val[2]
1220
+ }
1221
+
1222
+ words: tWORDS_BEG tSPACE tSTRING_END
1223
+ {
1224
+ result = s(:array)
1225
+ }
1226
+ | tWORDS_BEG word_list tSTRING_END
1227
+ {
1228
+ result = val[1]
1229
+ }
1230
+
1231
+ word_list: none
1232
+ {
1233
+ result = s(:array)
1234
+ }
1235
+ | word_list word tSPACE
1236
+ {
1237
+ part = val[1]
1238
+ part = s(:dstr, "", val[1]) if part.type == :evstr
1239
+ result = val[0] << part
1240
+ }
1241
+
1242
+ word: string_content
1243
+ {
1244
+ result = val[0]
1245
+ }
1246
+ | word string_content
1247
+ {
1248
+ result = val[0].concat([val[1]])
1249
+ }
1250
+
1251
+ awords: tAWORDS_BEG tSPACE tSTRING_END
1252
+ {
1253
+ result = s(:array)
1254
+ }
1255
+ | tAWORDS_BEG qword_list tSTRING_END
1256
+ {
1257
+ result = val[1]
1258
+ }
1259
+
1260
+ qword_list: none
1261
+ {
1262
+ result = s(:array)
1263
+ }
1264
+ | qword_list tSTRING_CONTENT tSPACE
1265
+ {
1266
+ result = val[0] << s(:str, value(val[1]))
1267
+ }
1268
+
1269
+ string_contents: none
1270
+ {
1271
+ result = nil
1272
+ }
1273
+ | string_contents string_content
1274
+ {
1275
+ result = str_append val[0], val[1]
1276
+ }
1277
+
1278
+ xstring_contents: none
1279
+ {
1280
+ result = nil
1281
+ }
1282
+ | xstring_contents string_content
1283
+ {
1284
+ result = str_append val[0], val[1]
1285
+ }
1286
+
1287
+ string_content: tSTRING_CONTENT
1288
+ {
1289
+ result = new_str_content(val[0])
1290
+ }
1291
+ | tSTRING_DVAR
1292
+ {
1293
+ result = lexer.strterm
1294
+ lexer.strterm = nil
1295
+ }
1296
+ string_dvar
1297
+ {
1298
+ lexer.strterm = val[1]
1299
+ result = new_evstr(val[2])
1300
+ }
1301
+ | tSTRING_DBEG
1302
+ {
1303
+ lexer.cond_push 0
1304
+ lexer.cmdarg_push 0
1305
+ result = lexer.strterm
1306
+ lexer.strterm = nil
1307
+ lexer.lex_state = :expr_beg
1308
+ }
1309
+ compstmt tRCURLY
1310
+ {
1311
+ lexer.strterm = val[1]
1312
+ lexer.cond_lexpop
1313
+ lexer.cmdarg_lexpop
1314
+ result = new_evstr(val[2])
1315
+ }
1316
+
1317
+ string_dvar: tGVAR
1318
+ {
1319
+ result = new_gvar(val[0])
1320
+ }
1321
+ | tIVAR
1322
+ {
1323
+ result = new_ivar(val[0])
1324
+ }
1325
+ | tCVAR
1326
+ {
1327
+ result = new_cvar(val[0])
1328
+ }
1329
+ | backref
1330
+
1331
+
1332
+ symbol: tSYMBEG sym
1333
+ {
1334
+ result = new_sym(val[1])
1335
+ lexer.lex_state = :expr_end
1336
+ }
1337
+ | tSYMBOL
1338
+ {
1339
+ result = new_sym(val[0])
1340
+ }
1341
+
1342
+ sym: fname
1343
+ | tIVAR
1344
+ | tGVAR
1345
+ | tCVAR
1346
+
1347
+ dsym: tSYMBEG xstring_contents tSTRING_END
1348
+ {
1349
+ result = new_dsym val[1]
1350
+ }
1351
+
1352
+ numeric: tINTEGER
1353
+ {
1354
+ result = new_int(val[0])
1355
+ }
1356
+ | tFLOAT
1357
+ {
1358
+ result = new_float(val[0])
1359
+ }
1360
+ | '-@NUM' tINTEGER =tLOWEST
1361
+ {
1362
+ result = negate_num(new_int(val[1]))
1363
+ }
1364
+ | '-@NUM' tFLOAT =tLOWEST
1365
+ {
1366
+ result = negate_num(new_float(val[1]))
1367
+ }
1368
+ | '+@NUM' tINTEGER =tLOWEST
1369
+ {
1370
+ result = new_int(val[1])
1371
+ }
1372
+ | '+@NUM' tFLOAT =tLOWEST
1373
+ {
1374
+ result = new_float(val[1])
1375
+ }
1376
+
1377
+ variable: tIDENTIFIER
1378
+ {
1379
+ result = new_ident(val[0])
1380
+ }
1381
+ | tIVAR
1382
+ {
1383
+ result = new_ivar(val[0])
1384
+ }
1385
+ | tGVAR
1386
+ {
1387
+ result = new_gvar(val[0])
1388
+ }
1389
+ | tCONSTANT
1390
+ {
1391
+ result = new_const(val[0])
1392
+ }
1393
+ | tCVAR
1394
+ {
1395
+ result = new_cvar(val[0])
1396
+ }
1397
+ | kNIL
1398
+ {
1399
+ result = new_nil(val[0])
1400
+ }
1401
+ | kSELF
1402
+ {
1403
+ result = new_self(val[0])
1404
+ }
1405
+ | kTRUE
1406
+ {
1407
+ result = new_true(val[0])
1408
+ }
1409
+ | kFALSE
1410
+ {
1411
+ result = new_false(val[0])
1412
+ }
1413
+ | k__FILE__
1414
+ {
1415
+ result = new___FILE__(val[0])
1416
+ }
1417
+ | k__LINE__
1418
+ {
1419
+ result = new___LINE__(val[0])
1420
+ }
1421
+
1422
+ var_ref: variable
1423
+ {
1424
+ result = new_var_ref(val[0])
1425
+ }
1426
+
1427
+ var_lhs: variable
1428
+ {
1429
+ result = new_assignable val[0]
1430
+ }
1431
+
1432
+ backref: tNTH_REF
1433
+ {
1434
+ result = s(:nth_ref, value(val[0]))
1435
+ }
1436
+ | tBACK_REF
1437
+
1438
+ superclass: term
1439
+ {
1440
+ result = nil
1441
+ }
1442
+ | tLT expr_value term
1443
+ {
1444
+ result = val[1]
1445
+ }
1446
+ | error term
1447
+ {
1448
+ result = nil
1449
+ }
1450
+
1451
+ f_arglist: tLPAREN2 f_args opt_nl tRPAREN
1452
+ {
1453
+ result = val[1]
1454
+ lexer.lex_state = :expr_beg
1455
+ }
1456
+ | f_args term
1457
+ {
1458
+ result = val[0]
1459
+ }
1460
+
1461
+ f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg
1462
+ {
1463
+ result = new_args(val[0], val[2], val[4], val[5])
1464
+ }
1465
+ | f_arg tCOMMA f_optarg opt_f_block_arg
1466
+ {
1467
+ result = new_args(val[0], val[2], nil, val[3])
1468
+ }
1469
+ | f_arg tCOMMA f_rest_arg opt_f_block_arg
1470
+ {
1471
+ result = new_args(val[0], nil, val[2], val[3])
1472
+ }
1473
+ | f_arg opt_f_block_arg
1474
+ {
1475
+ result = new_args(val[0], nil, nil, val[1])
1476
+ }
1477
+ | f_optarg tCOMMA f_rest_arg opt_f_block_arg
1478
+ {
1479
+ result = new_args(nil, val[0], val[2], val[3])
1480
+ }
1481
+ | f_optarg opt_f_block_arg
1482
+ {
1483
+ result = new_args(nil, val[0], nil, val[1])
1484
+ }
1485
+ | f_rest_arg opt_f_block_arg
1486
+ {
1487
+ result = new_args(nil, nil, val[0], val[1])
1488
+ }
1489
+ | f_block_arg
1490
+ {
1491
+ result = new_args(nil, nil, nil, val[0])
1492
+ }
1493
+ | # none
1494
+ {
1495
+ result = new_args(nil, nil, nil, nil)
1496
+ }
1497
+
1498
+ f_norm_arg: f_bad_arg
1499
+ | tIDENTIFIER
1500
+ {
1501
+ result = value(val[0]).to_sym
1502
+ scope.add_local result
1503
+ }
1504
+
1505
+ f_bad_arg: tCONSTANT
1506
+ {
1507
+ raise 'formal argument cannot be a constant'
1508
+ }
1509
+ | tIVAR
1510
+ {
1511
+ raise 'formal argument cannot be an instance variable'
1512
+ }
1513
+ | tCVAR
1514
+ {
1515
+ raise 'formal argument cannot be a class variable'
1516
+ }
1517
+ | tGVAR
1518
+ {
1519
+ raise 'formal argument cannot be a global variable'
1520
+ }
1521
+
1522
+ f_arg_item: f_norm_arg
1523
+ {
1524
+ result = val[0]
1525
+ }
1526
+ | tLPAREN f_margs tRPAREN
1527
+ {
1528
+ result = val[1]
1529
+ }
1530
+
1531
+ for_var: lhs
1532
+ | mlhs
1533
+
1534
+ f_marg: f_norm_arg
1535
+ {
1536
+ result = s(:lasgn, val[0])
1537
+ }
1538
+ | tLPAREN f_margs tRPAREN
1539
+
1540
+ f_marg_list: f_marg
1541
+ {
1542
+ result = s(:array, val[0])
1543
+ }
1544
+ | f_marg_list tCOMMA f_marg
1545
+ {
1546
+ val[0] << val[2]
1547
+ result = val[0]
1548
+ }
1549
+
1550
+ f_margs: f_marg_list
1551
+ | f_marg_list tCOMMA tSTAR f_norm_arg
1552
+ | f_marg_list tCOMMA tSTAR
1553
+ | tSTAR f_norm_arg
1554
+ | tSTAR
1555
+
1556
+ f_arg: f_arg_item
1557
+ {
1558
+ result = [val[0]]
1559
+ }
1560
+ | f_arg tCOMMA f_arg_item
1561
+ {
1562
+ val[0] << val[2]
1563
+ result = val[0]
1564
+ }
1565
+
1566
+ f_opt: tIDENTIFIER tEQL arg_value
1567
+ {
1568
+ result = new_assign(new_assignable(new_ident(val[0])), val[1], val[2])
1569
+ }
1570
+
1571
+ f_optarg: f_opt
1572
+ {
1573
+ result = s(:block, val[0])
1574
+ }
1575
+ | f_optarg tCOMMA f_opt
1576
+ {
1577
+ result = val[0]
1578
+ val[0] << val[2]
1579
+ }
1580
+
1581
+ restarg_mark: tSTAR2
1582
+ | tSTAR
1583
+
1584
+ f_rest_arg: restarg_mark tIDENTIFIER
1585
+ {
1586
+ result = "*#{value(val[1])}".to_sym
1587
+ }
1588
+ | restarg_mark
1589
+ {
1590
+ result = :"*"
1591
+ }
1592
+
1593
+ blkarg_mark: tAMPER2
1594
+ | tAMPER
1595
+
1596
+ f_block_arg: blkarg_mark tIDENTIFIER
1597
+ {
1598
+ result = "&#{value(val[1])}".to_sym
1599
+ }
1600
+
1601
+ opt_f_block_arg: tCOMMA f_block_arg
1602
+ {
1603
+ result = val[1]
1604
+ }
1605
+ | # none
1606
+ {
1607
+ result = nil
1608
+ }
1609
+
1610
+ singleton: var_ref
1611
+ {
1612
+ result = val[0]
1613
+ }
1614
+ | tLPAREN2 expr opt_nl tRPAREN
1615
+ {
1616
+ result = val[1]
1617
+ }
1618
+
1619
+ assoc_list: # none
1620
+ {
1621
+ result = []
1622
+ }
1623
+ | assocs trailer
1624
+ {
1625
+ result = val[0]
1626
+ }
1627
+
1628
+ assocs: assoc
1629
+ {
1630
+ result = val[0]
1631
+ }
1632
+ | assocs tCOMMA assoc
1633
+ {
1634
+ result = val[0].push(*val[2])
1635
+ }
1636
+
1637
+ assoc: arg_value tASSOC arg_value
1638
+ {
1639
+ result = [val[0], val[2]]
1640
+ }
1641
+ | tLABEL arg_value
1642
+ {
1643
+ result = [new_sym(val[0]), val[1]]
1644
+ }
1645
+
1646
+ operation: tIDENTIFIER
1647
+ | tCONSTANT
1648
+ | tFID
1649
+
1650
+ operation2: tIDENTIFIER
1651
+ | tCONSTANT
1652
+ | tFID
1653
+ | op
1654
+
1655
+ operation3: tIDENTIFIER
1656
+ | tFID
1657
+ | op
1658
+
1659
+ dot_or_colon: tDOT
1660
+ | tCOLON2
1661
+
1662
+ opt_terms: # none
1663
+ | terms
1664
+
1665
+ opt_nl: # none
1666
+ | tNL
1667
+
1668
+ trailer: # none
1669
+ | tNL
1670
+ | tCOMMA
1671
+
1672
+ term: tSEMI
1673
+ | tNL
1674
+
1675
+ terms: term
1676
+ | terms tSEMI
1677
+
1678
+ none: # none
1679
+ {
1680
+ result = nil
1681
+ }
1682
+ end
1683
+
1684
+ ---- inner