brakeman 4.7.2 → 5.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (505) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +155 -1
  3. data/README.md +23 -6
  4. data/bundle/load.rb +15 -13
  5. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/CHANGES.txt +0 -0
  6. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/MIT-LICENSE +0 -0
  7. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/README.txt +0 -0
  8. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/contrib/erubis +0 -0
  9. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/contrib/erubis-run.rb +0 -0
  10. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/contrib/inline-require +0 -0
  11. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/context.rb +0 -0
  12. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/converter.rb +0 -0
  13. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/ec.rb +0 -0
  14. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/ecpp.rb +0 -0
  15. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/ejava.rb +0 -0
  16. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/ejavascript.rb +0 -0
  17. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/enhanced.rb +0 -0
  18. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/eperl.rb +0 -0
  19. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/ephp.rb +0 -0
  20. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb +0 -0
  21. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/escheme.rb +0 -0
  22. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine/optimized.rb +0 -0
  23. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/engine.rb +0 -0
  24. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/enhancer.rb +0 -0
  25. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/error.rb +0 -0
  26. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/evaluator.rb +0 -0
  27. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/generator.rb +0 -0
  28. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/helper.rb +0 -0
  29. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/helpers/rails_form_helper.rb +0 -0
  30. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/helpers/rails_helper.rb +0 -0
  31. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/local-setting.rb +0 -0
  32. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/main.rb +0 -0
  33. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/preprocessing.rb +0 -0
  34. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/tiny.rb +0 -0
  35. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis/util.rb +0 -0
  36. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/lib/erubis.rb +0 -0
  37. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/erubis-2.7.0/setup.rb +0 -0
  38. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/CHANGELOG.md +24 -0
  39. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/FAQ.md +0 -0
  40. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/Gemfile +1 -4
  41. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/MIT-LICENSE +0 -0
  42. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/README.md +21 -16
  43. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/REFERENCE.md +39 -10
  44. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/TODO +0 -0
  45. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/haml.gemspec +2 -1
  46. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/attribute_builder.rb +58 -3
  47. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/attribute_compiler.rb +45 -32
  48. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/attribute_parser.rb +0 -0
  49. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/buffer.rb +0 -56
  50. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/compiler.rb +0 -0
  51. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/engine.rb +0 -0
  52. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/error.rb +0 -0
  53. data/bundle/ruby/2.7.0/gems/haml-5.2.2/lib/haml/escapable.rb +77 -0
  54. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/exec.rb +0 -0
  55. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/filters.rb +0 -0
  56. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/generator.rb +0 -0
  57. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers/action_view_extensions.rb +0 -0
  58. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers/action_view_mods.rb +0 -0
  59. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers/action_view_xss_mods.rb +0 -0
  60. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers/safe_erubi_template.rb +0 -0
  61. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers/safe_erubis_template.rb +0 -0
  62. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers/xss_mods.rb +6 -3
  63. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/helpers.rb +7 -1
  64. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/options.rb +0 -0
  65. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/parser.rb +32 -4
  66. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/plugin.rb +18 -1
  67. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/railtie.rb +5 -0
  68. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/sass_rails_filter.rb +0 -0
  69. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/template/options.rb +0 -0
  70. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/template.rb +0 -0
  71. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/temple_engine.rb +2 -1
  72. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/temple_line_counter.rb +0 -0
  73. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/util.rb +1 -1
  74. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml/version.rb +1 -1
  75. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/lib/haml.rb +0 -0
  76. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/yard/default/fulldoc/html/css/common.sass +0 -0
  77. data/bundle/ruby/{2.6.0/gems/haml-5.1.2 → 2.7.0/gems/haml-5.2.2}/yard/default/layout/html/footer.erb +0 -0
  78. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/AUTHORS +0 -0
  79. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/COPYING +0 -0
  80. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/Changelog.md +0 -0
  81. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/Gemfile +0 -0
  82. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/LICENSE +0 -0
  83. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/README.md +0 -0
  84. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/TODO +0 -0
  85. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/appveyor.yml +0 -0
  86. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/highline.gemspec +0 -0
  87. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/builtin_styles.rb +0 -0
  88. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/color_scheme.rb +0 -0
  89. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/compatibility.rb +0 -0
  90. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/custom_errors.rb +0 -0
  91. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/import.rb +0 -0
  92. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/io_console_compatible.rb +0 -0
  93. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/list.rb +0 -0
  94. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/list_renderer.rb +0 -0
  95. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/menu/item.rb +0 -0
  96. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/menu.rb +0 -0
  97. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/paginator.rb +0 -0
  98. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/question/answer_converter.rb +0 -0
  99. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/question.rb +0 -0
  100. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/question_asker.rb +0 -0
  101. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/simulate.rb +0 -0
  102. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/statement.rb +0 -0
  103. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/string.rb +0 -0
  104. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/string_extensions.rb +0 -0
  105. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/style.rb +0 -0
  106. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/template_renderer.rb +0 -0
  107. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/terminal/io_console.rb +0 -0
  108. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/terminal/ncurses.rb +0 -0
  109. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/terminal/unix_stty.rb +0 -0
  110. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/terminal.rb +0 -0
  111. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/version.rb +0 -0
  112. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline/wrapper.rb +0 -0
  113. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/highline-2.0.3/lib/highline.rb +0 -0
  114. data/bundle/ruby/2.7.0/gems/parallel-1.21.0/MIT-LICENSE.txt +20 -0
  115. data/bundle/ruby/2.7.0/gems/parallel-1.21.0/lib/parallel/processor_count.rb +45 -0
  116. data/bundle/ruby/2.7.0/gems/parallel-1.21.0/lib/parallel/version.rb +4 -0
  117. data/bundle/ruby/2.7.0/gems/parallel-1.21.0/lib/parallel.rb +532 -0
  118. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/LICENSE.txt +22 -0
  119. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/NEWS.md +178 -0
  120. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/README.md +48 -0
  121. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/attlistdecl.rb +63 -0
  122. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/attribute.rb +205 -0
  123. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/cdata.rb +68 -0
  124. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/child.rb +97 -0
  125. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/comment.rb +80 -0
  126. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/doctype.rb +311 -0
  127. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/document.rb +451 -0
  128. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/dtd/attlistdecl.rb +11 -0
  129. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/dtd/dtd.rb +47 -0
  130. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/dtd/elementdecl.rb +18 -0
  131. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/dtd/entitydecl.rb +57 -0
  132. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/dtd/notationdecl.rb +40 -0
  133. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/element.rb +2599 -0
  134. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/encoding.rb +51 -0
  135. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/entity.rb +171 -0
  136. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/formatters/default.rb +116 -0
  137. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/formatters/pretty.rb +142 -0
  138. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/formatters/transitive.rb +58 -0
  139. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/functions.rb +447 -0
  140. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/instruction.rb +79 -0
  141. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/light/node.rb +188 -0
  142. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/namespace.rb +59 -0
  143. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/node.rb +76 -0
  144. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/output.rb +30 -0
  145. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parent.rb +166 -0
  146. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parseexception.rb +52 -0
  147. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/baseparser.rb +694 -0
  148. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/lightparser.rb +59 -0
  149. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/pullparser.rb +197 -0
  150. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/sax2parser.rb +273 -0
  151. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/streamparser.rb +61 -0
  152. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/treeparser.rb +101 -0
  153. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/ultralightparser.rb +57 -0
  154. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/parsers/xpathparser.rb +689 -0
  155. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/quickpath.rb +266 -0
  156. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/rexml.rb +37 -0
  157. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/sax2listener.rb +98 -0
  158. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/security.rb +28 -0
  159. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/source.rb +298 -0
  160. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/streamlistener.rb +93 -0
  161. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/text.rb +424 -0
  162. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/undefinednamespaceexception.rb +9 -0
  163. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/validation/relaxng.rb +539 -0
  164. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/validation/validation.rb +144 -0
  165. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/validation/validationexception.rb +10 -0
  166. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/xmldecl.rb +130 -0
  167. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/xmltokens.rb +85 -0
  168. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/xpath.rb +81 -0
  169. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml/xpath_parser.rb +974 -0
  170. data/bundle/ruby/2.7.0/gems/rexml-3.2.5/lib/rexml.rb +3 -0
  171. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby2ruby-2.4.4/History.rdoc +0 -0
  172. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby2ruby-2.4.4/Manifest.txt +0 -0
  173. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby2ruby-2.4.4/README.rdoc +0 -0
  174. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby2ruby-2.4.4/lib/ruby2ruby.rb +0 -0
  175. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/History.rdoc +154 -0
  176. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/Manifest.txt +7 -0
  177. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/README.rdoc +1 -0
  178. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/compare/normalize.rb +51 -6
  179. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/debugging.md +190 -0
  180. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/gauntlet.md +106 -0
  181. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/rp_extensions.rb +15 -36
  182. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/rp_stringscanner.rb +33 -0
  183. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby20_parser.rb +7128 -0
  184. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby20_parser.y +422 -301
  185. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby21_parser.rb +7182 -0
  186. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby21_parser.y +417 -298
  187. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby22_parser.rb +7228 -0
  188. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby22_parser.y +421 -300
  189. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby23_parser.rb +7237 -0
  190. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby23_parser.y +421 -300
  191. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby24_parser.rb +7268 -0
  192. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby24_parser.y +421 -300
  193. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby25_parser.rb +7268 -0
  194. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1/lib/ruby26_parser.y → 2.7.0/gems/ruby_parser-3.18.1/lib/ruby25_parser.y} +420 -313
  195. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby26_parser.rb +7287 -0
  196. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1/lib/ruby_parser.yy → 2.7.0/gems/ruby_parser-3.18.1/lib/ruby26_parser.y} +421 -404
  197. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby27_parser.rb +8517 -0
  198. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1/lib/ruby25_parser.y → 2.7.0/gems/ruby_parser-3.18.1/lib/ruby27_parser.y} +1032 -299
  199. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby30_parser.rb +8751 -0
  200. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby30_parser.y +3472 -0
  201. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby3_parser.yy +3476 -0
  202. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby_lexer.rb +308 -605
  203. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby_lexer.rex +33 -27
  204. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby_lexer.rex.rb +65 -31
  205. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby_lexer_strings.rb +638 -0
  206. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby_parser.rb +4 -0
  207. data/bundle/ruby/2.7.0/gems/ruby_parser-3.18.1/lib/ruby_parser.yy +3487 -0
  208. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/lib/ruby_parser_extras.rb +341 -133
  209. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/tools/munge.rb +43 -10
  210. data/bundle/ruby/{2.6.0/gems/ruby_parser-3.14.1 → 2.7.0/gems/ruby_parser-3.18.1}/tools/ripper.rb +15 -10
  211. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/History.rdoc +0 -0
  212. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/Manifest.txt +0 -0
  213. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/README.rdoc +0 -0
  214. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby18_parser.rb +0 -0
  215. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby18_parser.y +0 -0
  216. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby19_parser.rb +0 -0
  217. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby19_parser.y +0 -0
  218. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rb +0 -0
  219. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rex +0 -0
  220. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_lexer.rex.rb +0 -0
  221. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_parser.rb +0 -0
  222. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy/ruby_parser_extras.rb +0 -0
  223. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/ruby_parser-legacy-1.0.0/lib/ruby_parser/legacy.rb +0 -0
  224. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/CHANGES.md +0 -0
  225. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/Gemfile +0 -0
  226. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/LICENSE.txt +0 -0
  227. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/README.md +0 -0
  228. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/bundle_install_all_ruby_versions.sh +0 -0
  229. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/deep.rb +0 -0
  230. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/libyaml_checker.rb +0 -0
  231. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/load.rb +0 -0
  232. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/date.rb +0 -0
  233. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/hexadecimal.rb +0 -0
  234. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/parse/sexagesimal.rb +0 -0
  235. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/psych_handler.rb +0 -0
  236. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/psych_resolver.rb +0 -0
  237. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/resolver.rb +0 -0
  238. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/safe_to_ruby_visitor.rb +0 -0
  239. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/store.rb +0 -0
  240. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/syck_hack.rb +0 -0
  241. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/syck_node_monkeypatch.rb +0 -0
  242. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/syck_resolver.rb +0 -0
  243. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_boolean.rb +0 -0
  244. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_date.rb +0 -0
  245. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_float.rb +0 -0
  246. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_integer.rb +0 -0
  247. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_nil.rb +0 -0
  248. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/to_symbol.rb +0 -0
  249. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform/transformation_map.rb +0 -0
  250. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/transform.rb +0 -0
  251. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml/version.rb +0 -0
  252. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/lib/safe_yaml.rb +0 -0
  253. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/run_specs_all_ruby_versions.sh +0 -0
  254. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/safe_yaml-1.0.5/safe_yaml.gemspec +0 -0
  255. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/History.rdoc +55 -0
  256. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/Manifest.txt +0 -0
  257. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/README.rdoc +0 -0
  258. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/composite_sexp_processor.rb +0 -0
  259. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/pt_testcase.rb +9 -4
  260. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/sexp.rb +19 -9
  261. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/sexp_matcher.rb +44 -7
  262. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/sexp_processor.rb +1 -1
  263. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/strict_sexp.rb +25 -3
  264. data/bundle/ruby/{2.6.0/gems/sexp_processor-4.13.0 → 2.7.0/gems/sexp_processor-4.16.0}/lib/unique.rb +0 -0
  265. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/CHANGES +4 -0
  266. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/Gemfile +12 -13
  267. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/LICENSE +0 -0
  268. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/README.jp.md +0 -0
  269. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/README.md +0 -0
  270. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/code_attributes.rb +0 -0
  271. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/command.rb +13 -13
  272. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/controls.rb +0 -0
  273. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/do_inserter.rb +0 -0
  274. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/embedded.rb +0 -0
  275. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/end_inserter.rb +0 -0
  276. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/engine.rb +0 -0
  277. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/erb_converter.rb +0 -0
  278. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/filter.rb +0 -0
  279. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/grammar.rb +0 -0
  280. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/include.rb +0 -0
  281. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/interpolation.rb +0 -0
  282. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/logic_less/context.rb +0 -0
  283. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/logic_less/filter.rb +0 -0
  284. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/logic_less.rb +0 -0
  285. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/parser.rb +1 -1
  286. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/smart/escaper.rb +0 -0
  287. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/smart/filter.rb +0 -0
  288. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/smart/parser.rb +0 -0
  289. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/smart.rb +0 -0
  290. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/splat/builder.rb +0 -0
  291. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/splat/filter.rb +0 -0
  292. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/template.rb +0 -0
  293. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/translator.rb +0 -0
  294. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim/version.rb +1 -1
  295. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/lib/slim.rb +0 -0
  296. data/bundle/ruby/{2.6.0/gems/slim-4.0.1 → 2.7.0/gems/slim-4.1.0}/slim.gemspec +0 -0
  297. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/CHANGES +0 -0
  298. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/EXPRESSIONS.md +0 -0
  299. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/Gemfile +0 -0
  300. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/LICENSE +0 -0
  301. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/README.md +0 -0
  302. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/engine.rb +0 -0
  303. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/erb/engine.rb +0 -0
  304. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/erb/parser.rb +0 -0
  305. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/erb/template.rb +0 -0
  306. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/erb/trimming.rb +0 -0
  307. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/exceptions.rb +0 -0
  308. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filter.rb +0 -0
  309. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/code_merger.rb +0 -0
  310. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/control_flow.rb +0 -0
  311. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/dynamic_inliner.rb +0 -0
  312. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/encoding.rb +0 -0
  313. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/eraser.rb +0 -0
  314. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/escapable.rb +0 -0
  315. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/multi_flattener.rb +0 -0
  316. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/remove_bom.rb +0 -0
  317. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/static_analyzer.rb +0 -0
  318. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/static_merger.rb +0 -0
  319. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/string_splitter.rb +0 -0
  320. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/filters/validator.rb +0 -0
  321. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/generator.rb +0 -0
  322. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/generators/array.rb +0 -0
  323. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/generators/array_buffer.rb +0 -0
  324. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/generators/erb.rb +0 -0
  325. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/generators/rails_output_buffer.rb +0 -0
  326. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/generators/string_buffer.rb +0 -0
  327. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/grammar.rb +0 -0
  328. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/attribute_merger.rb +0 -0
  329. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/attribute_remover.rb +0 -0
  330. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/attribute_sorter.rb +0 -0
  331. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/dispatcher.rb +0 -0
  332. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/fast.rb +0 -0
  333. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/filter.rb +0 -0
  334. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/pretty.rb +0 -0
  335. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/html/safe.rb +0 -0
  336. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/map.rb +0 -0
  337. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/mixins/dispatcher.rb +0 -0
  338. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/mixins/engine_dsl.rb +0 -0
  339. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/mixins/grammar_dsl.rb +0 -0
  340. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/mixins/options.rb +0 -0
  341. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/mixins/template.rb +0 -0
  342. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/parser.rb +0 -0
  343. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/static_analyzer.rb +0 -0
  344. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/templates/rails.rb +0 -0
  345. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/templates/tilt.rb +0 -0
  346. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/templates.rb +0 -0
  347. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/utils.rb +0 -0
  348. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple/version.rb +0 -0
  349. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/lib/temple.rb +0 -0
  350. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/temple-0.8.2/temple.gemspec +0 -0
  351. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/Gemfile +0 -0
  352. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/History.rdoc +0 -0
  353. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/LICENSE.txt +0 -0
  354. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/Manifest +0 -0
  355. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/README.rdoc +0 -0
  356. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/Todo.rdoc +0 -0
  357. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/cell.rb +0 -0
  358. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/import.rb +0 -0
  359. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/row.rb +0 -0
  360. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/separator.rb +0 -0
  361. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/style.rb +0 -0
  362. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/table.rb +0 -0
  363. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/table_helper.rb +0 -0
  364. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table/version.rb +0 -0
  365. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/lib/terminal-table.rb +0 -0
  366. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/terminal-table-1.8.0/terminal-table.gemspec +0 -0
  367. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/COPYING +0 -0
  368. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/asciidoc.rb +0 -0
  369. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/babel.rb +0 -0
  370. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/bluecloth.rb +0 -0
  371. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/builder.rb +0 -0
  372. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/coffee.rb +0 -0
  373. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/commonmarker.rb +0 -0
  374. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/creole.rb +0 -0
  375. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/csv.rb +0 -0
  376. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/dummy.rb +0 -0
  377. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/erb.rb +0 -0
  378. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/erubi.rb +0 -0
  379. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/erubis.rb +0 -0
  380. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/etanni.rb +0 -0
  381. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/haml.rb +0 -0
  382. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/kramdown.rb +0 -0
  383. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/less.rb +0 -0
  384. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/liquid.rb +0 -0
  385. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/livescript.rb +0 -0
  386. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/mapping.rb +0 -0
  387. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/markaby.rb +0 -0
  388. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/maruku.rb +0 -0
  389. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/nokogiri.rb +0 -0
  390. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/pandoc.rb +0 -0
  391. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/plain.rb +0 -0
  392. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/prawn.rb +0 -0
  393. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/radius.rb +0 -0
  394. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/rdiscount.rb +0 -0
  395. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/rdoc.rb +0 -0
  396. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/redcarpet.rb +0 -0
  397. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/redcloth.rb +0 -0
  398. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/rst-pandoc.rb +0 -0
  399. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/sass.rb +0 -0
  400. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/sigil.rb +0 -0
  401. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/string.rb +0 -0
  402. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/template.rb +0 -0
  403. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/typescript.rb +0 -0
  404. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/wikicloth.rb +0 -0
  405. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt/yajl.rb +0 -0
  406. data/bundle/ruby/{2.6.0 → 2.7.0}/gems/tilt-2.0.10/lib/tilt.rb +0 -0
  407. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/CHANGELOG.md +12 -0
  408. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/MIT-LICENSE.txt +1 -1
  409. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/README.md +3 -3
  410. data/bundle/ruby/2.7.0/gems/unicode-display_width-1.8.0/data/display_width.marshal.gz +0 -0
  411. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/lib/unicode/display_width/constants.rb +2 -2
  412. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/lib/unicode/display_width/index.rb +0 -0
  413. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/lib/unicode/display_width/no_string_ext.rb +0 -0
  414. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/lib/unicode/display_width/string_ext.rb +0 -0
  415. data/bundle/ruby/{2.6.0/gems/unicode-display_width-1.6.0 → 2.7.0/gems/unicode-display_width-1.8.0}/lib/unicode/display_width.rb +1 -1
  416. data/lib/brakeman/app_tree.rb +37 -4
  417. data/lib/brakeman/checks/base_check.rb +30 -11
  418. data/lib/brakeman/checks/check_basic_auth.rb +2 -0
  419. data/lib/brakeman/checks/check_content_tag.rb +1 -2
  420. data/lib/brakeman/checks/check_csrf_token_forgery_cve.rb +28 -0
  421. data/lib/brakeman/checks/check_deserialize.rb +21 -1
  422. data/lib/brakeman/checks/check_detailed_exceptions.rb +1 -1
  423. data/lib/brakeman/checks/check_eol_rails.rb +23 -0
  424. data/lib/brakeman/checks/check_eol_ruby.rb +26 -0
  425. data/lib/brakeman/checks/check_evaluation.rb +1 -1
  426. data/lib/brakeman/checks/check_execute.rb +52 -6
  427. data/lib/brakeman/checks/check_json_entity_escape.rb +38 -0
  428. data/lib/brakeman/checks/check_json_parsing.rb +1 -1
  429. data/lib/brakeman/checks/check_link_to.rb +1 -1
  430. data/lib/brakeman/checks/check_link_to_href.rb +1 -3
  431. data/lib/brakeman/checks/check_mass_assignment.rb +37 -9
  432. data/lib/brakeman/checks/check_model_attr_accessible.rb +1 -1
  433. data/lib/brakeman/checks/check_model_attributes.rb +1 -1
  434. data/lib/brakeman/checks/check_page_caching_cve.rb +37 -0
  435. data/lib/brakeman/checks/check_permit_attributes.rb +1 -1
  436. data/lib/brakeman/checks/check_regex_dos.rb +1 -1
  437. data/lib/brakeman/checks/check_render.rb +15 -1
  438. data/lib/brakeman/checks/check_sanitize_methods.rb +2 -1
  439. data/lib/brakeman/checks/check_skip_before_filter.rb +4 -4
  440. data/lib/brakeman/checks/check_sql.rb +60 -20
  441. data/lib/brakeman/checks/check_symbol_dos.rb +1 -1
  442. data/lib/brakeman/checks/check_template_injection.rb +32 -0
  443. data/lib/brakeman/checks/check_unsafe_reflection_methods.rb +68 -0
  444. data/lib/brakeman/checks/check_verb_confusion.rb +75 -0
  445. data/lib/brakeman/checks/eol_check.rb +47 -0
  446. data/lib/brakeman/commandline.rb +25 -1
  447. data/lib/brakeman/differ.rb +0 -5
  448. data/lib/brakeman/file_parser.rb +58 -22
  449. data/lib/brakeman/options.rb +39 -2
  450. data/lib/brakeman/parsers/template_parser.rb +26 -3
  451. data/lib/brakeman/processors/alias_processor.rb +132 -24
  452. data/lib/brakeman/processors/base_processor.rb +4 -4
  453. data/lib/brakeman/processors/controller_alias_processor.rb +6 -43
  454. data/lib/brakeman/processors/controller_processor.rb +1 -1
  455. data/lib/brakeman/processors/gem_processor.rb +3 -0
  456. data/lib/brakeman/processors/haml_template_processor.rb +17 -1
  457. data/lib/brakeman/processors/lib/call_conversion_helper.rb +13 -7
  458. data/lib/brakeman/processors/lib/file_type_detector.rb +64 -0
  459. data/lib/brakeman/processors/lib/find_all_calls.rb +30 -14
  460. data/lib/brakeman/processors/lib/rails3_config_processor.rb +16 -16
  461. data/lib/brakeman/processors/lib/rails3_route_processor.rb +2 -0
  462. data/lib/brakeman/processors/lib/rails4_config_processor.rb +2 -1
  463. data/lib/brakeman/processors/lib/render_helper.rb +3 -1
  464. data/lib/brakeman/processors/library_processor.rb +9 -0
  465. data/lib/brakeman/processors/model_processor.rb +32 -0
  466. data/lib/brakeman/processors/output_processor.rb +1 -1
  467. data/lib/brakeman/processors/template_alias_processor.rb +5 -0
  468. data/lib/brakeman/report/ignore/config.rb +10 -2
  469. data/lib/brakeman/report/ignore/interactive.rb +1 -1
  470. data/lib/brakeman/report/report_base.rb +0 -2
  471. data/lib/brakeman/report/report_csv.rb +37 -60
  472. data/lib/brakeman/report/report_github.rb +31 -0
  473. data/lib/brakeman/report/report_junit.rb +104 -0
  474. data/lib/brakeman/report/report_markdown.rb +0 -1
  475. data/lib/brakeman/report/report_sarif.rb +133 -0
  476. data/lib/brakeman/report/report_sonar.rb +38 -0
  477. data/lib/brakeman/report/report_tabs.rb +1 -1
  478. data/lib/brakeman/report/report_text.rb +38 -17
  479. data/lib/brakeman/report.rb +22 -1
  480. data/lib/brakeman/rescanner.rb +7 -5
  481. data/lib/brakeman/scanner.rb +65 -31
  482. data/lib/brakeman/tracker/collection.rb +57 -7
  483. data/lib/brakeman/tracker/config.rb +88 -5
  484. data/lib/brakeman/tracker/constants.rb +8 -7
  485. data/lib/brakeman/tracker/controller.rb +1 -1
  486. data/lib/brakeman/tracker/method_info.rb +70 -0
  487. data/lib/brakeman/tracker.rb +42 -5
  488. data/lib/brakeman/util.rb +58 -21
  489. data/lib/brakeman/version.rb +1 -1
  490. data/lib/brakeman/warning.rb +10 -2
  491. data/lib/brakeman/warning_codes.rb +13 -0
  492. data/lib/brakeman.rb +49 -6
  493. data/lib/ruby_parser/bm_sexp.rb +33 -9
  494. metadata +430 -351
  495. data/bundle/ruby/2.6.0/gems/haml-5.1.2/lib/haml/escapable.rb +0 -50
  496. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/debugging.md +0 -18
  497. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/rp_stringscanner.rb +0 -64
  498. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby20_parser.rb +0 -7045
  499. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby21_parser.rb +0 -7116
  500. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby22_parser.rb +0 -7149
  501. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby23_parser.rb +0 -7166
  502. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby24_parser.rb +0 -7178
  503. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby25_parser.rb +0 -7178
  504. data/bundle/ruby/2.6.0/gems/ruby_parser-3.14.1/lib/ruby26_parser.rb +0 -7198
  505. data/bundle/ruby/2.6.0/gems/unicode-display_width-1.6.0/data/display_width.marshal.gz +0 -0
@@ -18,7 +18,7 @@ token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS
18
18
  tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG
19
19
  tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END
20
20
  tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA
21
- tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG
21
+ tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND
22
22
 
23
23
  preclow
24
24
  nonassoc tLOWEST
@@ -30,7 +30,7 @@ preclow
30
30
  right tEQL tOP_ASGN
31
31
  left kRESCUE_MOD
32
32
  right tEH tCOLON
33
- nonassoc tDOT2 tDOT3
33
+ nonassoc tDOT2 tDOT3 tBDOT2 tBDOT3
34
34
  left tOROP
35
35
  left tANDOP
36
36
  nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
@@ -53,6 +53,9 @@ rule
53
53
  top_compstmt
54
54
  {
55
55
  result = new_compstmt val
56
+
57
+ lexer.cond.pop # local_pop
58
+ lexer.cmdarg.pop
56
59
  }
57
60
 
58
61
  top_compstmt: top_stmts opt_terms
@@ -73,7 +76,7 @@ rule
73
76
  | klBEGIN
74
77
  {
75
78
  if (self.in_def || self.in_single > 0) then
76
- debug20 1
79
+ debug 11
77
80
  yyerror "BEGIN in method"
78
81
  end
79
82
  self.env.extend
@@ -98,7 +101,9 @@ rule
98
101
  bodystmt: compstmt opt_rescue k_else
99
102
  {
100
103
  res = _values[-2]
101
- yyerror "else without rescue is useless" unless res
104
+ # TODO: move down to main match so I can just use val
105
+
106
+ warn "else without rescue is useless" unless res
102
107
  }
103
108
  compstmt
104
109
  opt_ensure
@@ -128,7 +133,7 @@ rule
128
133
  | error stmt
129
134
  {
130
135
  result = val[1]
131
- debug20 2, val, result
136
+ debug 12
132
137
  }
133
138
 
134
139
  stmt_or_begin: stmt
@@ -136,6 +141,10 @@ rule
136
141
  {
137
142
  yyerror "BEGIN is permitted only at toplevel"
138
143
  }
144
+ begin_block
145
+ {
146
+ result = val[2] # wtf?
147
+ }
139
148
 
140
149
  stmt: kALIAS fitem
141
150
  {
@@ -148,12 +157,12 @@ rule
148
157
  }
149
158
  | kALIAS tGVAR tGVAR
150
159
  {
151
- (_, line), lhs, rhs = val
160
+ (_, line), (lhs, _), (rhs, _) = val
152
161
  result = s(:valias, lhs.to_sym, rhs.to_sym).line line
153
162
  }
154
163
  | kALIAS tGVAR tBACK_REF
155
164
  {
156
- (_, line), lhs, rhs = val
165
+ (_, line), (lhs, _), (rhs, _) = val
157
166
  result = s(:valias, lhs.to_sym, :"$#{rhs}").line line
158
167
  }
159
168
  | kALIAS tGVAR tNTH_REF
@@ -196,7 +205,7 @@ rule
196
205
  (_, line), _, stmt, _ = val
197
206
 
198
207
  if (self.in_def || self.in_single > 0) then
199
- debug20 3
208
+ debug 13
200
209
  yyerror "END in method; use at_exit"
201
210
  end
202
211
 
@@ -240,30 +249,31 @@ rule
240
249
  }
241
250
  | primary_value call_op tIDENTIFIER tOP_ASGN command_rhs
242
251
  {
243
- prim, _, id, opasgn, rhs = val
244
- result = s(:op_asgn, prim, rhs, id.to_sym, opasgn.to_sym)
245
- if val[1] == '&.'
246
- result.sexp_type = :safe_op_asgn
247
- end
248
- result.line = val[0].line
252
+ prim, (call_op, _), (id, _), (op_asgn, _), rhs = val
253
+
254
+ result = s(:op_asgn, prim, rhs, id.to_sym, op_asgn.to_sym)
255
+ result.sexp_type = :safe_op_asgn if call_op == '&.'
256
+ result.line prim.line
249
257
  }
250
258
  | primary_value call_op tCONSTANT tOP_ASGN command_rhs
251
259
  {
252
- result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym)
253
- if val[1] == '&.'
254
- result.sexp_type = :safe_op_asgn
255
- end
256
- result.line = val[0].line
260
+ prim, (call_op, _), (id, _), (op_asgn, _), rhs = val
261
+
262
+ result = s(:op_asgn, prim, rhs, id.to_sym, op_asgn.to_sym)
263
+ result.sexp_type = :safe_op_asgn if call_op == '&.'
264
+ result.line prim.line
257
265
  }
258
266
  | primary_value tCOLON2 tCONSTANT tOP_ASGN command_rhs
259
267
  {
260
- result = s(:op_asgn, val[0], val[4], val[2], val[3])
261
- debug20 4, val, result
268
+ lhs1, _, (lhs2, line), (id, _), rhs = val
269
+
270
+ result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, id.to_sym).line line
262
271
  }
263
272
  | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_rhs
264
273
  {
265
- result = s(:op_asgn, val[0], val[4], val[2], val[3])
266
- debug20 5, val, result
274
+ lhs1, _, (lhs2, line), (id, _), rhs = val
275
+
276
+ result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, id.to_sym).line line
267
277
  }
268
278
  | backref tOP_ASGN command_rhs
269
279
  {
@@ -301,7 +311,7 @@ rule
301
311
  # TODO: fix line number to tBANG... but causes BAD shift/reduce conflict
302
312
  # REFACTOR: call_uni_op -- see parse26.y
303
313
  }
304
- | arg
314
+ | arg =tLBRACE_ARG
305
315
 
306
316
  expr_value: expr
307
317
  {
@@ -326,7 +336,7 @@ rule
326
336
  block_command: block_call
327
337
  | block_call call_op2 operation2 command_args
328
338
  {
329
- blk, _, msg, args = val
339
+ blk, _, (msg, _line), args = val
330
340
  result = new_call(blk, msg.to_sym, args).line blk.line
331
341
  }
332
342
 
@@ -340,15 +350,15 @@ rule
340
350
  _, line, body, _ = val
341
351
 
342
352
  result = body
343
- result.line = line
353
+ result.line line
344
354
 
345
355
  # self.env.unextend
346
356
  }
347
357
 
348
358
  fcall: operation
349
359
  {
350
- msg, = val
351
- result = new_call(nil, msg.to_sym).line lexer.lineno
360
+ (msg, line), = val
361
+ result = new_call(nil, msg.to_sym).line line
352
362
  }
353
363
 
354
364
  command: fcall command_args =tLOWEST
@@ -371,12 +381,14 @@ rule
371
381
  }
372
382
  | primary_value call_op operation2 command_args =tLOWEST
373
383
  {
374
- lhs, callop, op, args = val
384
+ lhs, callop, (op, _), args = val
385
+
375
386
  result = new_call lhs, op.to_sym, args, callop
387
+ result.line lhs.line
376
388
  }
377
389
  | primary_value call_op operation2 command_args cmd_brace_block
378
390
  {
379
- recv, _, msg, args, block = val
391
+ recv, _, (msg, _line), args, block = val
380
392
  call = new_call recv, msg.to_sym, args, val[1]
381
393
 
382
394
  block_dup_check call, block
@@ -386,11 +398,14 @@ rule
386
398
  }
387
399
  | primary_value tCOLON2 operation2 command_args =tLOWEST
388
400
  {
389
- result = new_call val[0], val[2].to_sym, val[3]
401
+ lhs, _, (id, line), args = val
402
+
403
+ result = new_call lhs, id.to_sym, args
404
+ result.line line
390
405
  }
391
406
  | primary_value tCOLON2 operation2 command_args cmd_brace_block
392
407
  {
393
- recv, _, msg, args, block = val
408
+ recv, _, (msg, _line), args, block = val
394
409
  call = new_call recv, msg.to_sym, args
395
410
 
396
411
  block_dup_check call, block
@@ -548,25 +563,29 @@ rule
548
563
  }
549
564
  | primary_value call_op tIDENTIFIER
550
565
  {
551
- result = new_attrasgn val[0], val[2], val[1]
566
+ lhs, call_op, (id, _line) = val
567
+
568
+ result = new_attrasgn lhs, id, call_op
552
569
  }
553
570
  | primary_value tCOLON2 tIDENTIFIER
554
571
  {
555
- recv, _, id = val
572
+ recv, _, (id, _line) = val
556
573
  result = new_attrasgn recv, id
557
574
  }
558
575
  | primary_value call_op tCONSTANT
559
576
  {
560
- result = new_attrasgn val[0], val[2], val[1]
577
+ lhs, call_op, (id, _line) = val
578
+
579
+ result = new_attrasgn lhs, id, call_op
561
580
  }
562
581
  | primary_value tCOLON2 tCONSTANT
563
582
  {
564
583
  if (self.in_def || self.in_single > 0) then
565
- debug20 7
584
+ debug 14
566
585
  yyerror "dynamic constant assignment"
567
586
  end
568
587
 
569
- expr, _, id = val
588
+ expr, _, (id, _line) = val
570
589
  l = expr.line
571
590
 
572
591
  result = s(:const, s(:colon2, expr, id.to_sym).line(l), nil).line l
@@ -574,58 +593,65 @@ rule
574
593
  | tCOLON3 tCONSTANT
575
594
  {
576
595
  if (self.in_def || self.in_single > 0) then
577
- debug20 8
596
+ debug 15
578
597
  yyerror "dynamic constant assignment"
579
598
  end
580
599
 
581
- _, id = val
582
- l = lexer.lineno
600
+ _, (id, l) = val
583
601
 
584
602
  result = s(:const, nil, s(:colon3, id.to_sym).line(l)).line l
585
603
  }
586
604
  | backref
587
605
  {
588
- self.backref_assign_error val[0]
606
+ ref, = val
607
+
608
+ self.backref_assign_error ref
589
609
  }
590
610
 
591
611
  lhs: user_variable
592
612
  {
593
- line = lexer.lineno
594
- result = self.assignable val[0]
595
- result.line = line
613
+ var, = val
614
+
615
+ result = self.assignable var
596
616
  }
597
617
  | keyword_variable
598
618
  {
599
- line = lexer.lineno
600
- result = self.assignable val[0]
601
- result.line = line
602
- debug20 9, val, result
619
+ var, = val
620
+
621
+ result = self.assignable var
622
+
623
+ debug 16
603
624
  }
604
625
  | primary_value tLBRACK2 opt_call_args rbracket
605
626
  {
606
627
  lhs, _, args, _ = val
628
+
607
629
  result = self.aryset lhs, args
608
630
  }
609
631
  | primary_value call_op tIDENTIFIER # REFACTOR
610
632
  {
611
- lhs, op, id = val
633
+ lhs, op, (id, _line) = val
634
+
612
635
  result = new_attrasgn lhs, id, op
613
636
  }
614
637
  | primary_value tCOLON2 tIDENTIFIER
615
638
  {
616
- lhs, _, id = val
639
+ lhs, _, (id, _line) = val
640
+
617
641
  result = new_attrasgn lhs, id
618
642
  }
619
643
  | primary_value call_op tCONSTANT # REFACTOR?
620
644
  {
621
- result = new_attrasgn val[0], val[2], val[1]
645
+ lhs, call_op, (id, _line) = val
646
+
647
+ result = new_attrasgn lhs, id, call_op
622
648
  }
623
649
  | primary_value tCOLON2 tCONSTANT
624
650
  {
625
- expr, _, id = val
651
+ expr, _, (id, _line) = val
626
652
 
627
653
  if (self.in_def || self.in_single > 0) then
628
- debug20 10
654
+ debug 17
629
655
  yyerror "dynamic constant assignment"
630
656
  end
631
657
 
@@ -634,14 +660,13 @@ rule
634
660
  }
635
661
  | tCOLON3 tCONSTANT
636
662
  {
637
- _, id = val
663
+ _, (id, l) = val
638
664
 
639
665
  if (self.in_def || self.in_single > 0) then
640
- debug20 11
666
+ debug 18
641
667
  yyerror "dynamic constant assignment"
642
668
  end
643
669
 
644
- l = lexer.lineno
645
670
  result = s(:const, s(:colon3, id.to_sym).line(l)).line l
646
671
  }
647
672
  | backref
@@ -657,16 +682,17 @@ rule
657
682
 
658
683
  cpath: tCOLON3 cname
659
684
  {
660
- _, name = val
661
- result = s(:colon3, name.to_sym).line lexer.lineno
685
+ _, (name, line) = val
686
+ result = s(:colon3, name.to_sym).line line
662
687
  }
663
688
  | cname
664
689
  {
665
- result = val[0].to_sym
690
+ (id, line), = val
691
+ result = [id.to_sym, line] # TODO: sexp?
666
692
  }
667
693
  | primary_value tCOLON2 cname
668
694
  {
669
- pval, _, name = val
695
+ pval, _, (name, _line) = val
670
696
 
671
697
  result = s(:colon2, pval, name.to_sym)
672
698
  result.line pval.line
@@ -676,24 +702,17 @@ rule
676
702
  | op
677
703
  {
678
704
  lexer.lex_state = EXPR_END
679
- result = val[0]
680
705
  }
681
706
 
682
707
  | reswords
683
- {
684
- (sym, _line), = val
685
- lexer.lex_state = EXPR_END
686
- result = sym
687
- }
688
-
689
- fsym: fname | symbol
690
708
 
691
- fitem: fsym
709
+ fitem: fname
692
710
  {
693
- id, = val
694
- result = s(:lit, id.to_sym).line lexer.lineno
711
+ (id, line), = val
712
+
713
+ result = s(:lit, id.to_sym).line line
695
714
  }
696
- | dsym
715
+ | symbol
697
716
 
698
717
  undef_list: fitem
699
718
  {
@@ -714,8 +733,6 @@ rule
714
733
  | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2
715
734
  | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE
716
735
  | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2
717
- # TODO: tUBANG dead?
718
- | tUBANG
719
736
 
720
737
  reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND
721
738
  | kALIAS | kAND | kBEGIN | kBREAK | kCASE
@@ -749,24 +766,20 @@ rule
749
766
  }
750
767
  | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg_rhs
751
768
  {
752
- lhs, _, id, op, rhs = val
769
+ lhs, _, (id, _line), (op, _), rhs = val
753
770
 
754
771
  result = s(:op_asgn, lhs, rhs, id.to_sym, op.to_sym).line lhs.line
755
772
  }
756
773
  | primary_value tCOLON2 tCONSTANT tOP_ASGN arg_rhs
757
774
  {
758
- lhs1, _, lhs2, op, rhs = val
775
+ lhs1, _, (lhs2, _line), op, rhs = val
759
776
 
760
777
  lhs = s(:colon2, lhs1, lhs2.to_sym).line lhs1.line
761
778
  result = new_const_op_asgn [lhs, op, rhs]
762
779
  }
763
- | tCOLON3 tCONSTANT
764
- {
765
- result = self.lexer.lineno
766
- }
767
- tOP_ASGN arg_rhs
780
+ | tCOLON3 tCONSTANT tOP_ASGN arg_rhs
768
781
  {
769
- _, lhs, line, op, rhs = val
782
+ _, (lhs, line), op, rhs = val
770
783
 
771
784
  lhs = s(:colon3, lhs.to_sym).line line
772
785
  result = new_const_op_asgn [lhs, op, rhs]
@@ -780,7 +793,7 @@ rule
780
793
  | arg tDOT2 arg
781
794
  {
782
795
  v1, v2 = val[0], val[2]
783
- if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then
796
+ if v1.sexp_type == :lit and v2.sexp_type == :lit and Integer === v1.last and Integer === v2.last then
784
797
  result = s(:lit, (v1.last)..(v2.last)).line v1.line
785
798
  else
786
799
  result = s(:dot2, v1, v2).line v1.line
@@ -789,12 +802,14 @@ rule
789
802
  | arg tDOT3 arg
790
803
  {
791
804
  v1, v2 = val[0], val[2]
792
- if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then
805
+ if v1.sexp_type == :lit and v2.sexp_type == :lit and Integer === v1.last and Integer === v2.last then
793
806
  result = s(:lit, (v1.last)...(v2.last)).line v1.line
794
807
  else
795
808
  result = s(:dot3, v1, v2).line v1.line
796
809
  end
797
810
  }
811
+
812
+
798
813
  | arg tPLUS arg
799
814
  {
800
815
  result = new_call val[0], :+, argl(val[2])
@@ -821,16 +836,18 @@ rule
821
836
  }
822
837
  | tUMINUS_NUM tINTEGER tPOW arg
823
838
  {
824
- lit = s(:lit, val[1]).line lexer.lineno
825
- result = new_call(new_call(lit, :"**", argl(val[3])), :"-@")
839
+ _, (num, line), _, arg = val
840
+ lit = s(:lit, num).line line
841
+ result = new_call(new_call(lit, :"**", argl(arg)), :"-@")
826
842
  }
827
843
  | tUMINUS_NUM tFLOAT tPOW arg
828
844
  {
829
- lit = s(:lit, val[1]).line lexer.lineno
830
- result = new_call(new_call(lit, :"**", argl(val[3])), :"-@")
845
+ _, (num, line), _, arg = val
846
+ lit = s(:lit, num).line line
847
+ result = new_call(new_call(lit, :"**", argl(arg)), :"-@")
831
848
 
832
849
  ## TODO: why is this 2.0 only?
833
- debug20 12, val, result
850
+ debug 19
834
851
  }
835
852
  | tUPLUS arg
836
853
  {
@@ -928,12 +945,12 @@ rule
928
945
 
929
946
  rel_expr: arg relop arg =tGT
930
947
  {
931
- lhs, op, rhs = val
948
+ lhs, (op, _), rhs = val
932
949
  result = new_call lhs, op.to_sym, argl(rhs)
933
950
  }
934
951
  | rel_expr relop arg =tGT
935
952
  {
936
- lhs, op, rhs = val
953
+ lhs, (op, _), rhs = val
937
954
  warn "comparison '%s' after comparison", op
938
955
  result = new_call lhs, op.to_sym, argl(rhs)
939
956
  }
@@ -1000,17 +1017,14 @@ rule
1000
1017
  | args opt_block_arg
1001
1018
  {
1002
1019
  result = call_args val
1003
- result = self.arg_blk_pass val[0], val[1]
1004
1020
  }
1005
1021
  | assocs opt_block_arg
1006
1022
  {
1007
- result = call_args [array_to_hash(val[0])]
1008
- result = self.arg_blk_pass result, val[1]
1023
+ result = call_args [array_to_hash(val[0]), val[1]]
1009
1024
  }
1010
1025
  | args tCOMMA assocs opt_block_arg
1011
1026
  {
1012
- result = call_args [val[0], array_to_hash(val[2])]
1013
- result = self.arg_blk_pass result, val[3]
1027
+ result = call_args [val[0], array_to_hash(val[2]), val[3]]
1014
1028
  }
1015
1029
  | block_arg
1016
1030
  {
@@ -1018,12 +1032,39 @@ rule
1018
1032
  }
1019
1033
 
1020
1034
  command_args: {
1021
- result = lexer.cmdarg.store true
1035
+ # parse26.y line 2200
1036
+
1037
+ # If call_args starts with a open paren '(' or
1038
+ # '[', look-ahead reading of the letters calls
1039
+ # CMDARG_PUSH(0), but the push must be done
1040
+ # after CMDARG_PUSH(1). So this code makes them
1041
+ # consistent by first cancelling the premature
1042
+ # CMDARG_PUSH(0), doing CMDARG_PUSH(1), and
1043
+ # finally redoing CMDARG_PUSH(0).
1044
+
1045
+ result = yychar = self.last_token_type.first
1046
+ lookahead = [:tLPAREN, :tLPAREN_ARG, :tLPAREN2, :tLBRACK, :tLBRACK2].include?(yychar)
1047
+ lexer.cmdarg.pop if lookahead
1048
+ lexer.cmdarg.push true
1049
+ lexer.cmdarg.push false if lookahead
1022
1050
  }
1023
1051
  call_args
1024
1052
  {
1025
- lexer.cmdarg.restore val[0]
1026
- result = val[1]
1053
+ yychar, args = val
1054
+
1055
+ # call_args can be followed by tLBRACE_ARG (that
1056
+ # does CMDARG_PUSH(0) in the lexer) but the push
1057
+ # must be done after CMDARG_POP() in the parser.
1058
+ # So this code does CMDARG_POP() to pop 0 pushed
1059
+ # by tLBRACE_ARG, CMDARG_POP() to pop 1 pushed
1060
+ # by command_args, and CMDARG_PUSH(0) to restore
1061
+ # back the flag set by tLBRACE_ARG.
1062
+
1063
+ lookahead = [:tLBRACE_ARG].include?(yychar)
1064
+ lexer.cmdarg.pop if lookahead
1065
+ lexer.cmdarg.pop
1066
+ lexer.cmdarg.push false if lookahead
1067
+ result = args
1027
1068
  }
1028
1069
 
1029
1070
  block_arg: tAMPER arg_value
@@ -1041,8 +1082,9 @@ rule
1041
1082
  args: arg_value
1042
1083
  {
1043
1084
  arg, = val
1085
+ lineno = arg.line || lexer.lineno # HACK
1044
1086
 
1045
- result = s(:array, arg).line arg.line
1087
+ result = s(:array, arg).line lineno
1046
1088
  }
1047
1089
  | tSTAR arg_value
1048
1090
  {
@@ -1054,9 +1096,11 @@ rule
1054
1096
  args, _, id = val
1055
1097
  result = self.list_append args, id
1056
1098
  }
1057
- | args tCOMMA tSTAR { result = lexer.lineno } arg_value
1099
+ | args tCOMMA tSTAR arg_value
1058
1100
  {
1059
- args, _, _, line, id = val
1101
+ # TODO: the line number from tSTAR has been dropped
1102
+ args, _, _, id = val
1103
+ line = lexer.lineno
1060
1104
  result = self.list_append args, s(:splat, id).line(line)
1061
1105
  }
1062
1106
 
@@ -1066,7 +1110,6 @@ rule
1066
1110
  }
1067
1111
  | args tCOMMA tSTAR arg_value
1068
1112
  {
1069
- # FIX: bad shift/reduce conflict with rhs' comma star prod
1070
1113
  # TODO: make all tXXXX terminals include lexer.lineno
1071
1114
  arg, _, _, splat = val
1072
1115
  result = self.arg_concat arg, splat
@@ -1089,26 +1132,19 @@ rule
1089
1132
  | backref
1090
1133
  | tFID
1091
1134
  {
1092
- msg, = val
1135
+ (msg, line), = val
1093
1136
  result = new_call nil, msg.to_sym
1137
+ result.line line
1094
1138
  }
1095
1139
  | k_begin
1096
1140
  {
1141
+ lexer.cmdarg.push false
1097
1142
  result = self.lexer.lineno
1098
- # TODO:
1099
- # $<val>1 = cmdarg_stack;
1100
- # CMDARG_SET(0);
1101
1143
  }
1102
1144
  bodystmt k_end
1103
1145
  {
1104
- # TODO: CMDARG_SET($<val>1);
1105
- unless val[2] then
1106
- result = s(:nil)
1107
- else
1108
- result = s(:begin, val[2])
1109
- end
1110
-
1111
- result.line = val[1]
1146
+ lexer.cmdarg.pop
1147
+ result = new_begin val
1112
1148
  }
1113
1149
  | tLPAREN_ARG
1114
1150
  {
@@ -1121,18 +1157,14 @@ rule
1121
1157
  result = s(:begin).line line
1122
1158
  }
1123
1159
  | tLPAREN_ARG
1124
- {
1125
- result = lexer.cmdarg.store false
1126
- }
1127
1160
  stmt
1128
1161
  {
1129
1162
  lexer.lex_state = EXPR_ENDARG
1130
1163
  }
1131
1164
  rparen
1132
1165
  {
1133
- _, cmdarg, stmt, _, _, = val
1134
- warning "(...) interpreted as grouped expression"
1135
- lexer.cmdarg.restore cmdarg
1166
+ _, stmt, _, _, = val
1167
+ # warning "(...) interpreted as grouped expression"
1136
1168
  result = stmt
1137
1169
  }
1138
1170
  | tLPAREN compstmt tRPAREN
@@ -1144,15 +1176,15 @@ rule
1144
1176
  }
1145
1177
  | primary_value tCOLON2 tCONSTANT
1146
1178
  {
1147
- expr, _, id = val
1179
+ expr, _, (id, _line) = val
1148
1180
 
1149
1181
  result = s(:colon2, expr, id.to_sym).line expr.line
1150
1182
  }
1151
1183
  | tCOLON3 tCONSTANT
1152
1184
  {
1153
- _, id = val
1185
+ _, (id, line) = val
1154
1186
 
1155
- result = s(:colon3, id.to_sym).line lexer.lineno
1187
+ result = s(:colon3, id.to_sym).line line
1156
1188
  }
1157
1189
  | tLBRACK { result = lexer.lineno } aref_args tRBRACK
1158
1190
  {
@@ -1176,15 +1208,21 @@ rule
1176
1208
  }
1177
1209
  | kYIELD tLPAREN2 call_args rparen
1178
1210
  {
1179
- result = new_yield val[2]
1211
+ (_, line), _, args, _ = val
1212
+
1213
+ result = new_yield(args).line line
1180
1214
  }
1181
1215
  | kYIELD tLPAREN2 rparen
1182
1216
  {
1183
- result = new_yield
1217
+ (_, line), _, _ = val
1218
+
1219
+ result = new_yield.line line
1184
1220
  }
1185
1221
  | kYIELD
1186
1222
  {
1187
- result = new_yield
1223
+ (_, line), = val
1224
+
1225
+ result = new_yield.line line
1188
1226
  }
1189
1227
  | kDEFINED opt_nl tLPAREN2 expr rparen
1190
1228
  {
@@ -1199,7 +1237,7 @@ rule
1199
1237
  }
1200
1238
  | kNOT tLPAREN2 rparen
1201
1239
  {
1202
- debug20 14, val, result
1240
+ debug 20
1203
1241
  }
1204
1242
  | fcall brace_block
1205
1243
  {
@@ -1217,9 +1255,10 @@ rule
1217
1255
  iter.insert 1, call # FIX
1218
1256
  result = iter
1219
1257
  }
1220
- | tLAMBDA lambda
1258
+ | lambda
1221
1259
  {
1222
- result = val[1] # TODO: fix lineno
1260
+ expr, = val
1261
+ result = expr
1223
1262
  }
1224
1263
  | k_if expr_value then compstmt if_tail k_end
1225
1264
  {
@@ -1262,7 +1301,6 @@ rule
1262
1301
  }
1263
1302
  cpath superclass
1264
1303
  {
1265
- self.comments.push self.lexer.comments
1266
1304
  if (self.in_def || self.in_single > 0) then
1267
1305
  yyerror "class definition in method body"
1268
1306
  end
@@ -1272,7 +1310,7 @@ rule
1272
1310
  {
1273
1311
  result = new_class val
1274
1312
  self.env.unextend
1275
- self.lexer.comments # we don't care about comments in the body
1313
+ self.lexer.ignore_body_comments
1276
1314
  }
1277
1315
  | k_class tLSHFT
1278
1316
  {
@@ -1293,7 +1331,7 @@ rule
1293
1331
  {
1294
1332
  result = new_sclass val
1295
1333
  self.env.unextend
1296
- self.lexer.comments # we don't care about comments in the body
1334
+ self.lexer.ignore_body_comments
1297
1335
  }
1298
1336
  | k_module
1299
1337
  {
@@ -1301,7 +1339,6 @@ rule
1301
1339
  }
1302
1340
  cpath
1303
1341
  {
1304
- self.comments.push self.lexer.comments
1305
1342
  yyerror "module definition in method body" if
1306
1343
  self.in_def or self.in_single > 0
1307
1344
 
@@ -1311,53 +1348,67 @@ rule
1311
1348
  {
1312
1349
  result = new_module val
1313
1350
  self.env.unextend
1314
- self.lexer.comments # we don't care about comments in the body
1351
+ self.lexer.ignore_body_comments
1315
1352
  }
1316
1353
  | k_def fname
1317
1354
  {
1318
- result = [self.in_def, self.lexer.cmdarg.stack.dup]
1355
+ result = self.in_def
1319
1356
 
1320
- self.comments.push self.lexer.comments
1321
- self.in_def = true
1357
+ self.in_def = true # group = local_push
1322
1358
  self.env.extend
1323
- # TODO: local->cmdargs = cmdarg_stack;
1324
- # TODO: port local_push_gen and local_pop_gen
1325
- lexer.cmdarg.stack.replace [false]
1359
+ lexer.cmdarg.push false
1360
+ lexer.cond.push false
1326
1361
  }
1327
- f_arglist bodystmt { result = lexer.lineno } k_end
1362
+ f_arglist bodystmt k_end
1328
1363
  {
1329
- in_def, cmdarg = val[2]
1364
+ result, in_def = new_defn val
1330
1365
 
1331
- result = new_defn val
1332
-
1333
- lexer.cmdarg.stack.replace cmdarg
1366
+ lexer.cond.pop # group = local_pop
1367
+ lexer.cmdarg.pop
1334
1368
  self.env.unextend
1335
1369
  self.in_def = in_def
1336
- self.lexer.comments # we don't care about comments in the body
1370
+
1371
+ self.lexer.ignore_body_comments
1337
1372
  }
1338
1373
  | k_def singleton dot_or_colon
1339
1374
  {
1340
- self.comments.push self.lexer.comments
1341
1375
  lexer.lex_state = EXPR_FNAME
1342
1376
  }
1343
1377
  fname
1344
1378
  {
1345
- self.in_single += 1
1379
+ result = self.in_def
1380
+
1381
+ self.in_single += 1 # TODO: remove?
1382
+
1383
+ self.in_def = true # local_push
1346
1384
  self.env.extend
1347
- lexer.lex_state = EXPR_ENDFN # force for args
1348
- result = [lexer.lineno, self.lexer.cmdarg.stack.dup]
1349
- lexer.cmdarg.stack.replace [false]
1385
+ lexer.cmdarg.push false
1386
+ lexer.cond.push false
1387
+
1388
+ lexer.lex_state = EXPR_ENDFN|EXPR_LABEL
1350
1389
  }
1351
1390
  f_arglist bodystmt k_end
1352
1391
  {
1353
- _, cmdarg = val[5]
1354
- result = new_defs val
1355
1392
 
1356
- lexer.cmdarg.stack.replace cmdarg
1393
+ # [kdef, recv, _, _, (name, line), in_def, args, body, kend]
1394
+ # =>
1395
+ # [kdef, recv, (name, line), in_def, args, body, kend]
1396
+
1397
+ val.delete_at 3
1398
+ val.delete_at 2
1357
1399
 
1400
+ result, in_def = new_defs val
1401
+
1402
+ lexer.cond.pop # group = local_pop
1403
+ lexer.cmdarg.pop
1358
1404
  self.env.unextend
1405
+ self.in_def = in_def
1406
+
1359
1407
  self.in_single -= 1
1360
- self.lexer.comments # we don't care about comments in the body
1408
+
1409
+ # TODO: restore cur_arg ? what's cur_arg?
1410
+
1411
+ self.lexer.ignore_body_comments
1361
1412
  }
1362
1413
  | kBREAK
1363
1414
  {
@@ -1394,8 +1445,17 @@ rule
1394
1445
  k_case: kCASE
1395
1446
  k_for: kFOR
1396
1447
  k_class: kCLASS
1448
+ {
1449
+ self.comments.push self.lexer.comments
1450
+ }
1397
1451
  k_module: kMODULE
1452
+ {
1453
+ self.comments.push self.lexer.comments
1454
+ }
1398
1455
  k_def: kDEF
1456
+ {
1457
+ self.comments.push self.lexer.comments
1458
+ }
1399
1459
  k_do: kDO
1400
1460
  k_do_block: kDO_BLOCK
1401
1461
  k_rescue: kRESCUE
@@ -1456,51 +1516,42 @@ rule
1456
1516
 
1457
1517
  result = block_var args
1458
1518
  }
1459
- | f_marg_list tCOMMA tSTAR f_norm_arg
1519
+ | f_marg_list tCOMMA f_rest_marg
1460
1520
  {
1461
- args, _, _, splat = val
1521
+ args, _, rest = val
1462
1522
 
1463
- result = block_var args, "*#{splat}".to_sym
1523
+ result = block_var args, rest
1464
1524
  }
1465
- | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
1525
+ | f_marg_list tCOMMA f_rest_marg tCOMMA f_marg_list
1466
1526
  {
1467
- args, _, _, splat, _, args2 = val
1527
+ lhs, _, splat, _, rhs = val
1468
1528
 
1469
- result = block_var args, "*#{splat}".to_sym, args2
1529
+ result = block_var lhs, splat, rhs
1470
1530
  }
1471
- | f_marg_list tCOMMA tSTAR
1531
+ | f_rest_marg
1472
1532
  {
1473
- args, _, _ = val
1533
+ rest, = val
1474
1534
 
1475
- result = block_var args, :*
1535
+ result = block_var rest
1476
1536
  }
1477
- | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
1537
+ | f_rest_marg tCOMMA f_marg_list
1478
1538
  {
1479
- args, _, _, _, args2 = val
1539
+ splat, _, rest = val
1480
1540
 
1481
- result = block_var args, :*, args2
1541
+ result = block_var splat, rest
1482
1542
  }
1483
- | tSTAR f_norm_arg
1484
- {
1485
- _, splat = val
1486
1543
 
1487
- result = block_var :"*#{splat}"
1488
- }
1489
- | tSTAR f_norm_arg tCOMMA f_marg_list
1544
+ f_rest_marg: tSTAR f_norm_arg
1490
1545
  {
1491
- _, splat, _, args = val
1546
+ _, (id, line) = val
1492
1547
 
1493
- result = block_var :"*#{splat}", args
1548
+ result = args ["*#{id}".to_sym]
1549
+ result.line line
1494
1550
  }
1495
1551
  | tSTAR
1496
1552
  {
1497
- result = block_var :*
1498
- }
1499
- | tSTAR tCOMMA f_marg_list
1500
- {
1501
- _, _, args = val
1502
-
1503
- result = block_var :*, args
1553
+ result = args [:*]
1554
+ result.line lexer.lineno # FIX: tSTAR -> line
1504
1555
  }
1505
1556
 
1506
1557
  block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
@@ -1517,8 +1568,8 @@ rule
1517
1568
  }
1518
1569
  | f_block_arg
1519
1570
  {
1520
- line = lexer.lineno
1521
- result = call_args val # TODO: push line down
1571
+ (id, line), = val
1572
+ result = call_args [id]
1522
1573
  result.line line
1523
1574
  }
1524
1575
 
@@ -1627,13 +1678,13 @@ opt_block_args_tail: tCOMMA block_args_tail
1627
1678
 
1628
1679
  bvar: tIDENTIFIER
1629
1680
  {
1630
- id, = val
1631
- line = lexer.lineno
1681
+ (id, line), = val
1632
1682
  result = s(:shadow, id.to_sym).line line
1633
1683
  }
1634
1684
  | f_bad_arg
1635
1685
 
1636
- lambda: {
1686
+ lambda: tLAMBDA
1687
+ {
1637
1688
  self.env.extend :dynamic
1638
1689
  result = [lexer.lineno, lexer.lpar_beg]
1639
1690
  lexer.paren_nest += 1
@@ -1641,20 +1692,19 @@ opt_block_args_tail: tCOMMA block_args_tail
1641
1692
  }
1642
1693
  f_larglist
1643
1694
  {
1644
- result = lexer.cmdarg.store(false)
1695
+ lexer.cmdarg.push false
1645
1696
  }
1646
1697
  lambda_body
1647
1698
  {
1648
- (line, lpar), args, cmdarg, body = val
1699
+ _, (line, lpar), args, _cmdarg, body = val
1649
1700
  lexer.lpar_beg = lpar
1650
1701
 
1651
- lexer.cmdarg.restore cmdarg
1652
- lexer.cmdarg.lexpop
1702
+ lexer.cmdarg.pop
1653
1703
 
1654
1704
  call = s(:lambda).line line
1655
1705
  result = new_iter call, args, body
1656
- result.line = line
1657
- self.env.unextend
1706
+ result.line line
1707
+ self.env.unextend # TODO: dynapush & dynapop
1658
1708
  }
1659
1709
 
1660
1710
  f_larglist: tLPAREN2 f_args opt_bv_decl rparen
@@ -1688,23 +1738,28 @@ opt_block_args_tail: tCOMMA block_args_tail
1688
1738
  ## if (nd_type($1) == NODE_YIELD) {
1689
1739
  ## compile_error(PARSER_ARG "block given to yield");
1690
1740
 
1691
- syntax_error "Both block arg and actual block given." if
1692
- val[0].block_pass?
1741
+ cmd, blk = val
1693
1742
 
1694
- val = invert_block_call val if inverted? val
1743
+ syntax_error "Both block arg and actual block given." if
1744
+ cmd.block_pass?
1695
1745
 
1696
- cmd, blk = val
1746
+ if inverted? val then
1747
+ val = invert_block_call val
1748
+ cmd, blk = val
1749
+ end
1697
1750
 
1698
1751
  result = blk
1699
1752
  result.insert 1, cmd
1700
1753
  }
1701
1754
  | block_call call_op2 operation2 opt_paren_args
1702
1755
  {
1703
- result = new_call val[0], val[2].to_sym, val[3]
1756
+ lhs, _, (id, _line), args = val
1757
+
1758
+ result = new_call lhs, id.to_sym, args
1704
1759
  }
1705
1760
  | block_call call_op2 operation2 opt_paren_args brace_block
1706
1761
  {
1707
- iter1, _, name, args, iter2 = val
1762
+ iter1, _, (name, _line), args, iter2 = val
1708
1763
 
1709
1764
  call = new_call iter1, name.to_sym, args
1710
1765
  iter2.insert 1, call
@@ -1713,7 +1768,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1713
1768
  }
1714
1769
  | block_call call_op2 operation2 command_args do_block
1715
1770
  {
1716
- iter1, _, name, args, iter2 = val
1771
+ iter1, _, (name, _line), args, iter2 = val
1717
1772
 
1718
1773
  call = new_call iter1, name.to_sym, args
1719
1774
  iter2.insert 1, call
@@ -1721,28 +1776,29 @@ opt_block_args_tail: tCOMMA block_args_tail
1721
1776
  result = iter2
1722
1777
  }
1723
1778
 
1724
- method_call: fcall
1725
- {
1726
- result = self.lexer.lineno
1727
- }
1728
- paren_args
1779
+ method_call: fcall paren_args
1729
1780
  {
1730
- call, lineno, args = val
1781
+ call, args = val
1731
1782
 
1732
1783
  result = call.concat args.sexp_body if args
1733
- result.line lineno
1734
1784
  }
1735
1785
  | primary_value call_op operation2 opt_paren_args
1736
1786
  {
1737
- result = new_call val[0], val[2].to_sym, val[3], val[1]
1787
+ recv, call_op, (op, _line), args = val
1788
+
1789
+ result = new_call recv, op.to_sym, args, call_op
1738
1790
  }
1739
1791
  | primary_value tCOLON2 operation2 paren_args
1740
1792
  {
1741
- result = new_call val[0], val[2].to_sym, val[3]
1793
+ recv, _, (op, _line), args = val
1794
+
1795
+ result = new_call recv, op.to_sym, args
1742
1796
  }
1743
1797
  | primary_value tCOLON2 operation3
1744
1798
  {
1745
- result = new_call val[0], val[2].to_sym
1799
+ lhs, _, (id, _line) = val
1800
+
1801
+ result = new_call lhs, id.to_sym
1746
1802
  }
1747
1803
  | primary_value call_op paren_args
1748
1804
  {
@@ -1775,7 +1831,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1775
1831
  _, line, body, _ = val
1776
1832
 
1777
1833
  result = body
1778
- result.line = line
1834
+ result.line line
1779
1835
 
1780
1836
  self.env.unextend
1781
1837
  }
@@ -1789,7 +1845,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1789
1845
  _, line, body, _ = val
1790
1846
 
1791
1847
  result = body
1792
- result.line = line
1848
+ result.line line
1793
1849
 
1794
1850
  self.env.unextend
1795
1851
  }
@@ -1807,25 +1863,50 @@ opt_block_args_tail: tCOMMA block_args_tail
1807
1863
  }
1808
1864
 
1809
1865
  do_body: { self.env.extend :dynamic; result = self.lexer.lineno }
1810
- { result = lexer.cmdarg.store(false) }
1866
+ { lexer.cmdarg.push false }
1811
1867
  opt_block_param
1812
1868
  compstmt
1813
1869
  {
1814
- line, cmdarg, param, cmpstmt = val
1870
+ line, _cmdarg, param, cmpstmt = val
1815
1871
 
1816
1872
  result = new_do_body param, cmpstmt, line
1873
+ lexer.cmdarg.pop
1817
1874
  self.env.unextend
1818
- lexer.cmdarg.restore cmdarg
1875
+ }
1876
+
1877
+ case_args: arg_value
1878
+ {
1879
+ arg, = val
1880
+
1881
+ result = s(:array, arg).line arg.line
1882
+ }
1883
+ | tSTAR arg_value
1884
+ {
1885
+ _, arg = val
1886
+
1887
+ result = s(:array, s(:splat, arg).line(arg.line)).line arg.line
1888
+ }
1889
+ | case_args tCOMMA arg_value
1890
+ {
1891
+ args, _, id = val
1892
+
1893
+ result = self.list_append args, id
1894
+ }
1895
+ | case_args tCOMMA tSTAR arg_value
1896
+ {
1897
+ args, _, _, id = val
1898
+
1899
+ result = self.list_append args, s(:splat, id).line(id.line)
1819
1900
  }
1820
1901
 
1821
1902
  case_body: k_when
1822
1903
  {
1823
1904
  result = self.lexer.lineno
1824
1905
  }
1825
- args then compstmt cases
1906
+ case_args then compstmt cases
1826
1907
  {
1827
1908
  result = new_when(val[2], val[4])
1828
- result.line = val[1]
1909
+ result.line val[1]
1829
1910
  result << val[5] if val[5]
1830
1911
  }
1831
1912
 
@@ -1871,17 +1952,10 @@ opt_block_args_tail: tCOMMA block_args_tail
1871
1952
 
1872
1953
  literal: numeric
1873
1954
  {
1874
- line = lexer.lineno
1875
- result = s(:lit, val[0])
1876
- result.line = line
1955
+ (lit, line), = val
1956
+ result = s(:lit, lit).line line
1877
1957
  }
1878
1958
  | symbol
1879
- {
1880
- line = lexer.lineno
1881
- result = s(:lit, val[0])
1882
- result.line = line
1883
- }
1884
- | dsym
1885
1959
 
1886
1960
  strings: string
1887
1961
  {
@@ -1892,7 +1966,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1892
1966
 
1893
1967
  string: tCHAR
1894
1968
  {
1895
- debug20 23, val, result
1969
+ debug 37
1896
1970
  }
1897
1971
  | string1
1898
1972
  | string string1
@@ -1902,11 +1976,11 @@ opt_block_args_tail: tCOMMA block_args_tail
1902
1976
 
1903
1977
  string1: tSTRING_BEG string_contents tSTRING_END
1904
1978
  {
1905
- _, str, (_, func) = val
1979
+ (_, line), str, (_, func) = val
1906
1980
 
1907
- str = dedent str if func =~ RubyLexer::STR_FUNC_ICNTNT
1981
+ str = dedent str if func =~ RubyLexer::STR_FUNC_DEDENT
1908
1982
 
1909
- result = str
1983
+ result = str.line line
1910
1984
  }
1911
1985
  | tSTRING
1912
1986
  {
@@ -1915,7 +1989,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1915
1989
 
1916
1990
  xstring: tXSTRING_BEG xstring_contents tSTRING_END
1917
1991
  {
1918
- result = new_xstring val[1]
1992
+ result = new_xstring val
1919
1993
  # TODO: dedent?!?! SERIOUSLY?!?
1920
1994
  }
1921
1995
 
@@ -1926,11 +2000,15 @@ opt_block_args_tail: tCOMMA block_args_tail
1926
2000
 
1927
2001
  words: tWORDS_BEG tSPACE tSTRING_END
1928
2002
  {
1929
- result = s(:array).line lexer.lineno
2003
+ (_, line), _, _ = val
2004
+
2005
+ result = s(:array).line line
1930
2006
  }
1931
2007
  | tWORDS_BEG word_list tSTRING_END
1932
2008
  {
1933
- result = val[1]
2009
+ (_, line), list, _ = val
2010
+
2011
+ result = list.line line
1934
2012
  }
1935
2013
 
1936
2014
  word_list: none
@@ -1950,18 +2028,20 @@ opt_block_args_tail: tCOMMA block_args_tail
1950
2028
 
1951
2029
  symbols: tSYMBOLS_BEG tSPACE tSTRING_END
1952
2030
  {
1953
- result = s(:array).line lexer.lineno
2031
+ (_, line), _, _ = val
2032
+
2033
+ result = s(:array).line line
1954
2034
  }
1955
- | tSYMBOLS_BEG { result = lexer.lineno } symbol_list tSTRING_END
2035
+ | tSYMBOLS_BEG symbol_list tSTRING_END
1956
2036
  {
1957
- _, line, list, _, = val
1958
- list.line = line
2037
+ (_, line), list, _, = val
2038
+ list.line line
1959
2039
  result = list
1960
2040
  }
1961
2041
 
1962
2042
  symbol_list: none
1963
2043
  {
1964
- result = new_symbol_list.line lexer.lineno
2044
+ result = new_symbol_list
1965
2045
  }
1966
2046
  | symbol_list word tSPACE
1967
2047
  {
@@ -1971,20 +2051,28 @@ opt_block_args_tail: tCOMMA block_args_tail
1971
2051
 
1972
2052
  qwords: tQWORDS_BEG tSPACE tSTRING_END
1973
2053
  {
1974
- result = s(:array).line lexer.lineno
2054
+ (_, line), _, _ = val
2055
+
2056
+ result = s(:array).line line
1975
2057
  }
1976
2058
  | tQWORDS_BEG qword_list tSTRING_END
1977
2059
  {
1978
- result = val[1]
2060
+ (_, line), list, _ = val
2061
+
2062
+ result = list.line line
1979
2063
  }
1980
2064
 
1981
2065
  qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END
1982
2066
  {
1983
- result = s(:array).line lexer.lineno # FIX
2067
+ (_, line), _, _ = val
2068
+
2069
+ result = s(:array).line line
1984
2070
  }
1985
2071
  | tQSYMBOLS_BEG qsym_list tSTRING_END
1986
2072
  {
1987
- result = val[1]
2073
+ (_, line), list, _ = val
2074
+
2075
+ result = list.line line
1988
2076
  }
1989
2077
 
1990
2078
  qword_list: none
@@ -2007,7 +2095,8 @@ opt_block_args_tail: tCOMMA block_args_tail
2007
2095
 
2008
2096
  string_contents: none
2009
2097
  {
2010
- result = s(:str, "").line lexer.lineno
2098
+ line = prev_value_to_lineno _values.last
2099
+ result = s(:str, +"").line line
2011
2100
  }
2012
2101
  | string_contents string_content
2013
2102
  {
@@ -2057,12 +2146,13 @@ regexp_contents: none
2057
2146
  result = [lexer.lex_strterm,
2058
2147
  lexer.brace_nest,
2059
2148
  lexer.string_nest, # TODO: remove
2060
- lexer.cond.store,
2061
- lexer.cmdarg.store,
2062
2149
  lexer.lex_state,
2063
2150
  lexer.lineno,
2064
2151
  ]
2065
2152
 
2153
+ lexer.cmdarg.push false
2154
+ lexer.cond.push false
2155
+
2066
2156
  lexer.lex_strterm = nil
2067
2157
  lexer.brace_nest = 0
2068
2158
  lexer.string_nest = 0
@@ -2074,14 +2164,15 @@ regexp_contents: none
2074
2164
  {
2075
2165
  _, memo, stmt, _ = val
2076
2166
 
2077
- lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state, line = memo
2167
+ lex_strterm, brace_nest, string_nest, oldlex_state, line = memo
2168
+ # TODO: heredoc_indent
2078
2169
 
2079
2170
  lexer.lex_strterm = lex_strterm
2080
2171
  lexer.brace_nest = brace_nest
2081
2172
  lexer.string_nest = string_nest
2082
2173
 
2083
- lexer.cond.restore oldcond
2084
- lexer.cmdarg.restore oldcmdarg
2174
+ lexer.cond.pop
2175
+ lexer.cmdarg.pop
2085
2176
 
2086
2177
  lexer.lex_state = oldlex_state
2087
2178
 
@@ -2096,29 +2187,49 @@ regexp_contents: none
2096
2187
  when nil then
2097
2188
  result = s(:evstr).line line
2098
2189
  else
2099
- debug20 25
2190
+ debug 38
2100
2191
  raise "unknown string body: #{stmt.inspect}"
2101
2192
  end
2102
2193
  }
2103
2194
 
2104
- string_dvar: tGVAR { result = s(:gvar, val[0].to_sym).line lexer.lineno }
2105
- | tIVAR { result = s(:ivar, val[0].to_sym).line lexer.lineno }
2106
- | tCVAR { result = s(:cvar, val[0].to_sym).line lexer.lineno }
2195
+ string_dvar: tGVAR
2196
+ {
2197
+ (id, line), = val
2198
+ result = s(:gvar, id.to_sym).line line
2199
+ }
2200
+ | tIVAR
2201
+ {
2202
+ (id, line), = val
2203
+ result = s(:ivar, id.to_sym).line line
2204
+ }
2205
+ | tCVAR
2206
+ {
2207
+ (id, line), = val
2208
+ result = s(:cvar, id.to_sym).line line
2209
+ }
2107
2210
  | backref
2108
2211
 
2109
- symbol: tSYMBEG sym
2212
+ symbol: ssym
2213
+ | dsym
2214
+
2215
+ ssym: tSYMBEG sym
2110
2216
  {
2217
+ _, (id, line) = val
2218
+
2111
2219
  lexer.lex_state = EXPR_END
2112
- result = val[1].to_sym
2220
+ result = s(:lit, id.to_sym).line line
2113
2221
  }
2114
2222
  | tSYMBOL
2115
2223
  {
2116
- result = val[0].to_sym
2224
+ (id, line), = val
2225
+
2226
+ lexer.lex_state = EXPR_END
2227
+ result = s(:lit, id.to_sym).line line
2117
2228
  }
2118
2229
 
2119
2230
  sym: fname | tIVAR | tGVAR | tCVAR
2120
2231
 
2121
- dsym: tSYMBEG xstring_contents tSTRING_END
2232
+ dsym: tSYMBEG string_contents tSTRING_END
2122
2233
  {
2123
2234
  _, result, _ = val
2124
2235
 
@@ -2134,7 +2245,7 @@ regexp_contents: none
2134
2245
  when :evstr then
2135
2246
  result = s(:dsym, "", result).line result.line
2136
2247
  else
2137
- debug20 26, val, result
2248
+ debug 39
2138
2249
  end
2139
2250
  }
2140
2251
 
@@ -2142,11 +2253,13 @@ regexp_contents: none
2142
2253
  | tFLOAT
2143
2254
  | tUMINUS_NUM tINTEGER =tLOWEST
2144
2255
  {
2145
- result = -val[1] # TODO: pt_testcase
2256
+ _, (num, line) = val
2257
+ result = [-num, line]
2146
2258
  }
2147
2259
  | tUMINUS_NUM tFLOAT =tLOWEST
2148
2260
  {
2149
- result = -val[1] # TODO: pt_testcase
2261
+ _, (num, line) = val
2262
+ result = [-num, line]
2150
2263
  }
2151
2264
 
2152
2265
  user_variable: tIDENTIFIER
@@ -2174,8 +2287,10 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2174
2287
 
2175
2288
  var_ref: user_variable
2176
2289
  {
2177
- var = val[0]
2290
+ raise "NO: #{val.inspect}" if Sexp === val.first
2291
+ (var, line), = val
2178
2292
  result = Sexp === var ? var : self.gettable(var)
2293
+ result.line line
2179
2294
  }
2180
2295
  | keyword_variable
2181
2296
  {
@@ -2190,11 +2305,19 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2190
2305
  | keyword_variable
2191
2306
  {
2192
2307
  result = self.assignable val[0]
2193
- debug20 29, val, result
2308
+ debug 40
2194
2309
  }
2195
2310
 
2196
- backref: tNTH_REF { result = s(:nth_ref, val[0]).line lexer.lineno }
2197
- | tBACK_REF { result = s(:back_ref, val[0]).line lexer.lineno }
2311
+ backref: tNTH_REF
2312
+ {
2313
+ (ref, line), = val
2314
+ result = s(:nth_ref, ref).line line
2315
+ }
2316
+ | tBACK_REF
2317
+ {
2318
+ (ref, line), = val
2319
+ result = s(:back_ref, ref).line line
2320
+ }
2198
2321
 
2199
2322
  superclass: tLT
2200
2323
  {
@@ -2212,9 +2335,7 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2212
2335
 
2213
2336
  f_arglist: tLPAREN2 f_args rparen
2214
2337
  {
2215
- result = val[1]
2216
- self.lexer.lex_state = EXPR_BEG
2217
- self.lexer.command_start = true
2338
+ result = end_args val
2218
2339
  }
2219
2340
  | {
2220
2341
  result = self.in_kwarg
@@ -2223,12 +2344,7 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2223
2344
  }
2224
2345
  f_args term
2225
2346
  {
2226
- kwarg, args, _ = val
2227
-
2228
- self.in_kwarg = kwarg
2229
- result = args
2230
- lexer.lex_state = EXPR_BEG
2231
- lexer.command_start = true
2347
+ result = end_args val
2232
2348
  }
2233
2349
 
2234
2350
  args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg
@@ -2313,8 +2429,10 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2313
2429
  |
2314
2430
  {
2315
2431
  result = args val
2432
+ # result.line lexer.lineno
2316
2433
  }
2317
2434
 
2435
+
2318
2436
  f_bad_arg: tCONSTANT
2319
2437
  {
2320
2438
  yyerror "formal argument cannot be a constant"
@@ -2335,31 +2453,24 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2335
2453
  f_norm_arg: f_bad_arg
2336
2454
  | tIDENTIFIER
2337
2455
  {
2338
- identifier = val[0].to_sym
2456
+ (id, line), = val
2457
+ identifier = id.to_sym
2339
2458
  self.env[identifier] = :lvar
2340
2459
 
2341
- result = identifier
2460
+ result = [identifier, line]
2342
2461
  }
2343
2462
 
2344
2463
  f_arg_item: f_norm_arg
2345
2464
  | tLPAREN f_margs rparen
2346
2465
  {
2347
- result = val[1]
2466
+ _, margs, _ = val
2467
+
2468
+ result = margs
2348
2469
  }
2349
2470
 
2350
2471
  f_arg: f_arg_item
2351
2472
  {
2352
- arg, = val
2353
-
2354
- case arg
2355
- when Symbol then
2356
- result = s(:args, arg).line lexer.lineno
2357
- when Sexp then
2358
- result = arg
2359
- else
2360
- debug20 32
2361
- raise "Unknown f_arg type: #{val.inspect}"
2362
- end
2473
+ result = new_arg val
2363
2474
  }
2364
2475
  | f_arg tCOMMA f_arg_item
2365
2476
  {
@@ -2371,7 +2482,7 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2371
2482
  result = s(:args, list).line list.line
2372
2483
  end
2373
2484
 
2374
- result << item
2485
+ result << (Sexp === item ? item : item.first)
2375
2486
  }
2376
2487
 
2377
2488
  f_kw: tLABEL arg_value
@@ -2412,26 +2523,33 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2412
2523
  kwrest_mark: tPOW
2413
2524
  | tDSTAR
2414
2525
 
2526
+
2415
2527
  f_kwrest: kwrest_mark tIDENTIFIER
2416
2528
  {
2417
- name = val[1].to_sym
2418
- self.assignable name
2419
- result = :"**#{name}"
2529
+ _, (id, line) = val
2530
+
2531
+ name = id.to_sym
2532
+ self.assignable [name, line]
2533
+ result = [:"**#{name}", line]
2420
2534
  }
2421
2535
  | kwrest_mark
2422
2536
  {
2423
- result = :"**"
2537
+ id = :"**"
2538
+ self.env[id] = :lvar # TODO: needed?!?
2539
+ result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
2424
2540
  }
2425
2541
 
2426
2542
  f_opt: tIDENTIFIER tEQL arg_value
2427
2543
  {
2428
- result = self.assignable val[0], val[2]
2544
+ lhs, _, rhs = val
2545
+ result = self.assignable lhs, rhs
2429
2546
  # TODO: detect duplicate names
2430
2547
  }
2431
2548
 
2432
2549
  f_block_opt: tIDENTIFIER tEQL primary_value
2433
2550
  {
2434
- result = self.assignable val[0], val[2]
2551
+ lhs, _, rhs = val
2552
+ result = self.assignable lhs, rhs
2435
2553
  }
2436
2554
 
2437
2555
  f_block_optarg: f_block_opt
@@ -2461,30 +2579,33 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2461
2579
  f_rest_arg: restarg_mark tIDENTIFIER
2462
2580
  {
2463
2581
  # TODO: differs from parse.y - needs tests
2464
- name = val[1].to_sym
2465
- self.assignable name
2466
- result = :"*#{name}"
2582
+ _, (id, line) = val
2583
+ name = id.to_sym
2584
+ self.assignable [name, line]
2585
+ result = [:"*#{name}", line]
2467
2586
  }
2468
2587
  | restarg_mark
2469
2588
  {
2470
2589
  name = :"*"
2471
2590
  self.env[name] = :lvar
2472
- result = name
2591
+ result = [name, lexer.lineno] # FIX: tSTAR to include lineno
2473
2592
  }
2474
2593
 
2475
2594
  blkarg_mark: tAMPER2 | tAMPER
2476
2595
 
2477
2596
  f_block_arg: blkarg_mark tIDENTIFIER
2478
2597
  {
2479
- identifier = val[1].to_sym
2598
+ _, (id, line) = val
2599
+ identifier = id.to_sym
2480
2600
 
2481
2601
  self.env[identifier] = :lvar
2482
- result = "&#{identifier}".to_sym
2602
+ result = ["&#{identifier}".to_sym, line]
2483
2603
  }
2484
2604
 
2485
2605
  opt_f_block_arg: tCOMMA f_block_arg
2486
2606
  {
2487
- result = val[1]
2607
+ _, arg = val
2608
+ result = arg
2488
2609
  }
2489
2610
  |
2490
2611
  {