ruby_parser 3.20.3 → 3.21.1

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 (41) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/History.rdoc +38 -0
  4. data/Manifest.txt +14 -24
  5. data/README.rdoc +3 -3
  6. data/Rakefile +113 -115
  7. data/compare/normalize.rb +2 -0
  8. data/lib/ruby_lexer.rb +9 -16
  9. data/lib/ruby_lexer.rex.rb +1 -2
  10. data/lib/ruby_parser.rb +15 -13
  11. data/lib/{ruby_parser.yy → ruby_parser2.yy} +3 -10
  12. data/lib/{ruby20_parser.rb → ruby_parser20.rb} +9 -12
  13. data/lib/{ruby21_parser.rb → ruby_parser21.rb} +9 -12
  14. data/lib/{ruby22_parser.rb → ruby_parser22.rb} +9 -12
  15. data/lib/{ruby23_parser.rb → ruby_parser23.rb} +9 -12
  16. data/lib/{ruby24_parser.rb → ruby_parser24.rb} +9 -12
  17. data/lib/{ruby25_parser.rb → ruby_parser25.rb} +9 -12
  18. data/lib/{ruby26_parser.rb → ruby_parser26.rb} +9 -12
  19. data/lib/{ruby27_parser.rb → ruby_parser27.rb} +9 -12
  20. data/lib/{ruby3_parser.yy → ruby_parser3.yy} +7 -33
  21. data/lib/{ruby30_parser.rb → ruby_parser30.rb} +11 -35
  22. data/lib/{ruby31_parser.rb → ruby_parser31.rb} +11 -35
  23. data/lib/{ruby32_parser.rb → ruby_parser32.rb} +11 -35
  24. data/lib/ruby_parser33.rb +13577 -0
  25. data/lib/ruby_parser_extras.rb +35 -17
  26. data/test/test_ruby_lexer.rb +5 -5
  27. data/test/test_ruby_parser.rb +22 -20
  28. data.tar.gz.sig +0 -0
  29. metadata +41 -51
  30. metadata.gz.sig +0 -0
  31. data/lib/ruby20_parser.y +0 -2707
  32. data/lib/ruby21_parser.y +0 -2724
  33. data/lib/ruby22_parser.y +0 -2735
  34. data/lib/ruby23_parser.y +0 -2737
  35. data/lib/ruby24_parser.y +0 -2745
  36. data/lib/ruby25_parser.y +0 -2745
  37. data/lib/ruby26_parser.y +0 -2760
  38. data/lib/ruby27_parser.y +0 -3360
  39. data/lib/ruby30_parser.y +0 -3508
  40. data/lib/ruby31_parser.y +0 -3542
  41. data/lib/ruby32_parser.y +0 -3543
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4c0c3e107b8953bdbaf64c24c32d5428696fa648398c4fdc896cba560547341b
4
- data.tar.gz: b268454b6584eee700d5d90e37c7986e252a024b89422d47db69d5c0cfd7f917
3
+ metadata.gz: d0b41ca88f3f31d39c43cf26e8ce115b9e3207ec8154715b6cc1daebcce4068c
4
+ data.tar.gz: f2f175619f399a717112e921562b3e0dede90fcef89988a45ea673c97aa4e208
5
5
  SHA512:
6
- metadata.gz: f466e027ad5467b7a799a44378756fb082cd86d59c7696815347af2be9360b21f2ff9f5f5e8687b7073cc9ab2432330808a07eaee57e8802783ffe6b6a16b602
7
- data.tar.gz: 8eb1af21a6936f44bcc8ea42b8dae4773e1a86a8e4815c67a536e1d10363e5c95123d77c04402f156e8f9e7b786b21ff382d3134a650c6428f903552a61ec495
6
+ metadata.gz: 8c387b27b007b9516813e12aefcb66545250b606dddfe3eeb940c9301ff02e0561edc7325a855fe0cc1eb9f5b98b09d80d44862956d68e321ad7cb1170b6865e
7
+ data.tar.gz: 5d037adb3906afb8ffbf58ba2980c6531cc9de15753c7d6229f605aa09f13c42ab5367ef2aba936ad702a510251d32956dfcde48b5614a4277d3cfa38b780b95
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,41 @@
1
+ === 3.21.1 / 2024-07-09
2
+
3
+ * 1 bug fix:
4
+
5
+ * Fix errors created when string literals are frozen.
6
+
7
+ === 3.21.0 / 2024-01-15
8
+
9
+ * 18 minor enhancements:
10
+
11
+ * (internal) Added simple RubyLexer#comment.
12
+ * (internal) Removed RubyLexer#comments and #ignore_body_comments.
13
+ * (internal) Removed RubyParser#comments.
14
+ * (internal) Renamed files from lib/ruby##_parser.* to lib/ruby_parser##.*
15
+ * (internal) Renamed lib/ruby3_parser.yy to lib/ruby_parser3.yy
16
+ * (internal) Renamed lib/ruby_parser.yy to lib/ruby_parser2.yy
17
+ * Added tentative 3.2 support. (torrocus)
18
+ * Made `rake compare` a multitask (28s -> 10s!!).
19
+ * Made `rake compare` depend on `generate` (from clean: 28s -> 18s).
20
+ * No longer package versioned .y files.
21
+ * Overhaul of parser/lexer comment processing.
22
+ * Parser productions for k_class/k_module/k_def carry their comment with them.
23
+ * Restructured build tasks to utilize Hoe's .yy support! 8.5s -> 1.2s!!!
24
+ * RubyParser new_(class|module|defn|defs) handle comment processing via sexp.
25
+ * RubyParser new_(class|module|defn|defs) handle normalizing production sexps.
26
+ * RubyParser#next_token clears out lexer's comment when applicable.
27
+ * Simplified parser productions for defn_head, defs_head. No more normalizing.
28
+ * Updated `rake compare` steps for lrama in ruby 3.3+.
29
+
30
+ * 6 bug fixes:
31
+
32
+ * Cleaned out cruft from `rake compare` code.
33
+ * Fixed compare/normalize.rb for lrama differences.
34
+ * Made `parser` task depend on `isolate` task to pick up racc generator.
35
+ * Made racc a runtime dependency (was dev only) now that ruby 3.3 doesn't ship with the racc runtime. (wildmaples)
36
+ * Updated README.rdoc updating instructions to match current filenames.
37
+ * Updated compare versions and added 3.3.
38
+
1
39
  === 3.20.3 / 2023-07-11
2
40
 
3
41
  * 2 minor enhancements:
data/Manifest.txt CHANGED
@@ -11,35 +11,25 @@ gauntlet.md
11
11
  lib/.document
12
12
  lib/rp_extensions.rb
13
13
  lib/rp_stringscanner.rb
14
- lib/ruby20_parser.rb
15
- lib/ruby20_parser.y
16
- lib/ruby21_parser.rb
17
- lib/ruby21_parser.y
18
- lib/ruby22_parser.rb
19
- lib/ruby22_parser.y
20
- lib/ruby23_parser.rb
21
- lib/ruby23_parser.y
22
- lib/ruby24_parser.rb
23
- lib/ruby24_parser.y
24
- lib/ruby25_parser.rb
25
- lib/ruby25_parser.y
26
- lib/ruby26_parser.rb
27
- lib/ruby26_parser.y
28
- lib/ruby27_parser.rb
29
- lib/ruby27_parser.y
30
- lib/ruby30_parser.rb
31
- lib/ruby30_parser.y
32
- lib/ruby31_parser.rb
33
- lib/ruby31_parser.y
34
- lib/ruby32_parser.rb
35
- lib/ruby32_parser.y
36
- lib/ruby3_parser.yy
37
14
  lib/ruby_lexer.rb
38
15
  lib/ruby_lexer.rex
39
16
  lib/ruby_lexer.rex.rb
40
17
  lib/ruby_lexer_strings.rb
41
18
  lib/ruby_parser.rb
42
- lib/ruby_parser.yy
19
+ lib/ruby_parser2.yy
20
+ lib/ruby_parser20.rb
21
+ lib/ruby_parser21.rb
22
+ lib/ruby_parser22.rb
23
+ lib/ruby_parser23.rb
24
+ lib/ruby_parser24.rb
25
+ lib/ruby_parser25.rb
26
+ lib/ruby_parser26.rb
27
+ lib/ruby_parser27.rb
28
+ lib/ruby_parser3.yy
29
+ lib/ruby_parser30.rb
30
+ lib/ruby_parser31.rb
31
+ lib/ruby_parser32.rb
32
+ lib/ruby_parser33.rb
43
33
  lib/ruby_parser_extras.rb
44
34
  test/test_ruby_lexer.rb
45
35
  test/test_ruby_parser.rb
data/README.rdoc CHANGED
@@ -65,15 +65,15 @@ You can also use Ruby19Parser, Ruby18Parser, or RubyParser.for_current_ruby:
65
65
 
66
66
  To add a new version:
67
67
 
68
- * New parser should be generated from lib/ruby[3]_parser.yy.
69
- * Extend lib/ruby[3]_parser.yy with new class name.
68
+ * New parser should be generated from lib/ruby_parser[23].yy.
69
+ * Extend lib/ruby_parser[23].yy with new class name.
70
70
  * Add new version number to V2/V3 in Rakefile for rule creation.
71
71
  * Add new `ruby_parse "x.y.z"` line to Rakefile for rake compare (line ~300).
72
72
  * Require generated parser in lib/ruby_parser.rb.
73
73
  * Add new V## = ::Ruby##Parser; end to ruby_parser.rb (bottom of file).
74
74
  * Add empty TestRubyParserShared##Plus module and TestRubyParserV## to test/test_ruby_parser.rb.
75
75
  * Extend Manifest.txt with generated file names.
76
- * Add new version number to sexp_processor's pt_testcase.rb in all_versions
76
+ * Add new version number to sexp_processor's pt_testcase.rb in all_versions.
77
77
 
78
78
  Until all of these are done, you won't have a clean test run.
79
79
 
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  # -*- ruby -*-
2
2
 
3
- require "rubygems"
4
3
  require "hoe"
5
4
 
6
5
  Hoe.plugin :seattlerb
@@ -15,38 +14,34 @@ Hoe.add_include_dirs "../../oedipus_lex/dev/lib"
15
14
  Hoe.add_include_dirs "../../ruby2ruby/dev/lib"
16
15
 
17
16
  V2 = %w[20 21 22 23 24 25 26 27]
18
- V3 = %w[30 31 32]
17
+ V3 = %w[30 31 32 33]
19
18
 
20
19
  VERS = V2 + V3
21
20
 
22
21
  ENV["FAST"] = VERS.last if ENV["FAST"] && !VERS.include?(ENV["FAST"])
23
22
  VERS.replace [ENV["FAST"]] if ENV["FAST"]
24
23
 
24
+ racc_flags = nil
25
+
25
26
  Hoe.spec "ruby_parser" do
26
27
  developer "Ryan Davis", "ryand-ruby@zenspider.com"
27
28
 
28
29
  license "MIT"
29
30
 
30
- dependency "sexp_processor", "~> 4.16"
31
- dependency "rake", [">= 10", "< 15"], :developer
32
- dependency "oedipus_lex", "~> 2.6", :developer
33
-
34
- # NOTE: Ryan!!! Stop trying to fix this dependency! Isolate just
35
- # can't handle having a faux-gem half-installed! Stop! Just `gem
36
- # install racc` and move on. Revisit this ONLY once racc-compiler
37
- # gets split out.
38
-
39
- dependency "racc", "~> 1.5", :developer
31
+ dependency "sexp_processor", "~> 4.16"
32
+ dependency "racc", "~> 1.5"
33
+ dependency "rake", [">= 10", "< 15"], :developer
34
+ dependency "oedipus_lex", "~> 2.6", :developer
40
35
 
41
36
  require_ruby_version [">= 2.6", "< 4"]
42
37
 
43
38
  if plugin? :perforce then # generated files
44
39
  VERS.each do |n|
45
- self.perforce_ignore << "lib/ruby#{n}_parser.rb"
40
+ self.perforce_ignore << "lib/ruby_parser#{n}.rb"
46
41
  end
47
42
 
48
43
  VERS.each do |n|
49
- self.perforce_ignore << "lib/ruby#{n}_parser.y"
44
+ self.perforce_ignore << "lib/ruby_parser#{n}.y"
50
45
  end
51
46
 
52
47
  self.perforce_ignore << "lib/ruby_lexer.rex.rb"
@@ -55,7 +50,7 @@ Hoe.spec "ruby_parser" do
55
50
  if plugin?(:racc)
56
51
  self.racc_flags << " -t" if ENV["DEBUG"]
57
52
  self.racc_flags << " --superclass RubyParser::Parser"
58
- # self.racc_flags << " --runtime ruby_parser" # TODO: broken in racc
53
+ racc_flags = self.racc_flags
59
54
  end
60
55
  end
61
56
 
@@ -84,34 +79,30 @@ def unifdef?
84
79
  EOM
85
80
  end
86
81
 
87
- V2.each do |n|
88
- file "lib/ruby#{n}_parser.y" => "lib/ruby_parser.yy" do |t|
89
- unifdef?
90
- cmd = 'unifdef -tk -DV=%s -UDEAD %s > %s || true' % [n, t.source, t.name]
91
- sh cmd
92
- end
82
+ def racc?
83
+ @racc ||= system("which racc") or abort <<~EOM
84
+ racc not found! `gem install racc`
85
+ EOM
86
+ end
93
87
 
94
- file "lib/ruby#{n}_parser.rb" => "lib/ruby#{n}_parser.y"
88
+ generate_parser = proc do |t|
89
+ unifdef?
90
+ racc?
91
+ n = t.name[/\d+/]
92
+ sh "unifdef -tk -DV=%s %s | racc %s /dev/stdin -o %s" % [n, t.source, racc_flags, t.name]
93
+ maybe_add_to_top t.name, "# frozen_string_literal: true"
95
94
  end
96
95
 
97
- V3.each do |n|
98
- file "lib/ruby#{n}_parser.y" => "lib/ruby3_parser.yy" do |t|
99
- unifdef?
100
- cmd = 'unifdef -tk -DV=%s -UDEAD %s > %s || true' % [n, t.source, t.name]
101
- sh cmd
102
- end
96
+ V2.each do |n|
97
+ file "lib/ruby_parser#{n}.rb" => "lib/ruby_parser2.yy", &generate_parser
98
+ end
103
99
 
104
- file "lib/ruby#{n}_parser.rb" => "lib/ruby#{n}_parser.y"
100
+ V3.each do |n|
101
+ file "lib/ruby_parser#{n}.rb" => "lib/ruby_parser3.yy", &generate_parser
105
102
  end
106
103
 
107
104
  file "lib/ruby_lexer.rex.rb" => "lib/ruby_lexer.rex"
108
105
 
109
- task :parser do |t|
110
- t.prerequisite_tasks.grep(Rake::FileTask).select(&:already_invoked).each do |f|
111
- maybe_add_to_top f.name, "# frozen_string_literal: true"
112
- end
113
- end
114
-
115
106
  task :generate => [:lexer, :parser]
116
107
 
117
108
  task :clean do
@@ -119,8 +110,8 @@ task :clean do
119
110
  Dir["diff.diff"] + # not all diffs. bit me too many times
120
111
  Dir["coverage.info"] +
121
112
  Dir["coverage"] +
122
- Dir["lib/ruby2*_parser.y"] +
123
- Dir["lib/ruby3*_parser.y"] +
113
+ Dir["lib/ruby_parser2*.y"] +
114
+ Dir["lib/ruby_parser3*.y"] +
124
115
  Dir["lib/*.output"])
125
116
  end
126
117
 
@@ -140,74 +131,78 @@ end
140
131
 
141
132
  task :isolate => :phony
142
133
 
143
- def in_compare
144
- Dir.chdir "compare" do
145
- yield
146
- end
147
- end
148
-
149
- def dl v
134
+ def dl v, f
150
135
  dir = v[/^\d+\.\d+/]
151
136
  url = "https://cache.ruby-lang.org/pub/ruby/#{dir}/ruby-#{v}.tar.xz"
152
- path = File.basename url
153
- unless File.exist? path then
154
- system "curl -O #{url}"
155
- end
137
+
138
+ warn "Downloading ruby #{v}"
139
+ system "curl -s -o #{f} #{url}"
156
140
  end
157
141
 
142
+ task :parser => :isolate
143
+
144
+ multitask :compare_build
145
+ task :compare_build => :generate
146
+ task :compare => :compare_build
147
+
158
148
  def ruby_parse version
159
149
  v = version[/^\d+\.\d+/].delete "."
160
- rp_txt = "rp#{v}.txt"
161
- mri_txt = "mri#{v}.txt"
162
- parse_y = "parse#{v}.y"
163
- tarball = "ruby-#{version}.tar.xz"
164
- ruby_dir = "ruby-#{version}"
165
- diff = "diff#{v}.diff"
166
- rp_out = "lib/ruby#{v}_parser.output"
167
- _rp_y = "lib/ruby#{v}_parser.y"
168
- rp_y_rb = "lib/ruby#{v}_parser.rb"
169
-
170
- c_diff = "compare/#{diff}"
171
- c_rp_txt = "compare/#{rp_txt}"
172
- c_mri_txt = "compare/#{mri_txt}"
173
- c_parse_y = "compare/#{parse_y}"
174
- c_tarball = "compare/#{tarball}"
150
+ diff = "compare/diff#{v}.diff"
151
+ rp_txt = "compare/rp#{v}.txt"
152
+ mri_txt = "compare/mri#{v}.txt"
153
+ parse_y = "compare/parse#{v}.y"
154
+ tarball = "compare/ruby-#{version}.tar.xz"
155
+ ruby_dir = "compare/ruby-#{version}"
156
+ rp_out = "lib/ruby_parser#{v}.output"
157
+ rp_y_rb = "lib/ruby_parser#{v}.rb"
175
158
  normalize = "compare/normalize.rb"
176
159
 
177
- file c_tarball do
178
- in_compare do
179
- dl version
180
- end
160
+ file tarball do
161
+ dl version, tarball
181
162
  end
182
163
 
183
164
  desc "fetch all tarballs"
184
- task :fetch => c_tarball
185
-
186
- file c_parse_y => c_tarball do
187
- in_compare do
188
- extract_glob = case
189
- # defs/id.def
190
- when version > "3.2" then
191
- "{id.h,parse.y,tool/{id2token.rb,lib/vpath.rb},defs/id.def}"
192
- when version > "2.7" then
193
- "{id.h,parse.y,tool/{id2token.rb,lib/vpath.rb}}"
194
- else
195
- "{id.h,parse.y,tool/{id2token.rb,vpath.rb}}"
196
- end
197
- system "tar Jxf #{tarball} #{ruby_dir}/#{extract_glob}"
198
-
199
- Dir.chdir ruby_dir do
200
- if File.exist? "tool/id2token.rb" then
201
- args = version < "3.2" ? "--path-separator=.:./ id.h" : ""
202
- sh "ruby tool/id2token.rb #{args} parse.y | expand > ../#{parse_y}"
203
- else
204
- sh "expand parse.y > ../#{parse_y}"
205
- end
206
-
207
- ruby "-pi", "-e", 'gsub(/^%pure-parser/, "%define api.pure")', "../#{parse_y}"
208
- end
209
- sh "rm -rf #{ruby_dir}"
165
+ task :fetch => tarball
166
+
167
+ file parse_y => tarball do
168
+ extract_glob = case
169
+ when version > "3.3" then
170
+ "{id.h,parse.y,tool/{id2token.rb,lrama},defs/id.def}"
171
+ when version > "3.2" then
172
+ "{id.h,parse.y,tool/id2token.rb,defs/id.def}"
173
+ when version > "2.7" then
174
+ "{id.h,parse.y,tool/{id2token.rb,lib/vpath.rb}}"
175
+ else
176
+ "{id.h,parse.y,tool/{id2token.rb,vpath.rb}}"
177
+ end
178
+ system "tar xf #{tarball} -C compare #{File.basename ruby_dir}/#{extract_glob}"
179
+
180
+ # Debugging a new parse build system:
181
+ #
182
+ # Unpack the ruby tarball in question, configure, and run the following:
183
+ #
184
+ # % touch parse.y; make -n parse.c
185
+ # ...
186
+ # echo generating parse.c
187
+ # /Users/ryan/.rubies.current/bin/ruby --disable=gems ./tool/id2token.rb parse.y | \
188
+ # ruby ./tool/lrama/exe/lrama -oparse.c -Hparse.h - parse.y
189
+ #
190
+ # Then integrate these commands into the mess below:
191
+
192
+ d = ruby_dir
193
+ cmd = if version > "3.2" then
194
+ "ruby #{d}/tool/id2token.rb #{d}/parse.y | expand > #{parse_y}"
195
+ else
196
+ "ruby #{d}/tool/id2token.rb --path-separator=.:./ #{d}/id.h #{d}/parse.y | expand | ruby -pe 'gsub(/^%pure-parser/, \"%define api.pure\")' > #{parse_y}"
197
+ end
198
+
199
+ sh cmd
200
+
201
+ if File.exist? "#{d}/tool/lrama" then # UGH: this is dumb
202
+ rm_rf "compare/lrama"
203
+ sh "mv #{d}/tool/lrama compare"
210
204
  end
205
+ sh "rm -rf #{d}"
211
206
  end
212
207
 
213
208
  bison = Dir["/opt/homebrew/opt/bison/bin/bison",
@@ -215,46 +210,48 @@ def ruby_parse version
215
210
  `which bison`.chomp,
216
211
  ].first
217
212
 
218
- file c_mri_txt => [c_parse_y, normalize] do
219
- in_compare do
213
+ file mri_txt => [parse_y, normalize] do
214
+ if version > "3.3" then
215
+ sh "./compare/lrama/exe/lrama -r all -ocompare/parse#{v}.tab.c #{parse_y}"
216
+ else
220
217
  sh "#{bison} -r all #{parse_y}"
221
- sh "./normalize.rb parse#{v}.output > #{mri_txt}"
222
- rm ["parse#{v}.output", "parse#{v}.tab.c"]
218
+ mv Dir["parse#{v}.*"], "compare"
223
219
  end
220
+
221
+ sh "#{normalize} compare/parse#{v}.output > #{mri_txt}"
222
+ rm ["compare/parse#{v}.output", "compare/parse#{v}.tab.c"]
224
223
  end
225
224
 
226
225
  file rp_out => rp_y_rb
227
226
 
228
- file c_rp_txt => [rp_out, normalize] do
229
- in_compare do
230
- sh "./normalize.rb ../#{rp_out} > #{rp_txt}"
231
- end
227
+ file rp_txt => [rp_out, normalize] do
228
+ sh "#{normalize} #{rp_out} > #{rp_txt}"
232
229
  end
233
230
 
234
231
  compare = "compare#{v}"
232
+ compare_build = "compare_build#{v}"
235
233
 
236
234
  desc "Compare all grammars to MRI"
237
235
  task :compare => compare
236
+ task :compare_build => compare_build
238
237
 
239
- file c_diff => [c_mri_txt, c_rp_txt] do
240
- in_compare do
241
- sh "diff -du #{mri_txt} #{rp_txt} > #{diff}; true"
242
- end
238
+ task compare_build => diff
239
+
240
+ file diff => [mri_txt, rp_txt] do
241
+ sh "diff -du #{mri_txt} #{rp_txt} > #{diff}; true"
243
242
  end
244
243
 
245
244
  desc "Compare #{v} grammar to MRI #{version}"
246
- task compare => c_diff do
247
- in_compare do
248
- system "wc -l #{diff}"
249
- end
245
+ task compare => diff do
246
+ system "wc -l #{diff}"
250
247
  end
251
248
 
252
249
  task :clean do
253
- rm_f Dir[c_mri_txt, c_rp_txt]
250
+ rm_f Dir[mri_txt, rp_txt]
254
251
  end
255
252
 
256
253
  task :realclean do
257
- rm_f Dir[c_parse_y, c_tarball]
254
+ rm_f Dir[parse_y, tarball]
258
255
  end
259
256
  end
260
257
 
@@ -297,10 +294,11 @@ ruby_parse "2.3.8"
297
294
  ruby_parse "2.4.10"
298
295
  ruby_parse "2.5.9"
299
296
  ruby_parse "2.6.10"
300
- ruby_parse "2.7.7"
301
- ruby_parse "3.0.5"
302
- ruby_parse "3.1.3"
303
- ruby_parse "3.2.1"
297
+ ruby_parse "2.7.8"
298
+ ruby_parse "3.0.6"
299
+ ruby_parse "3.1.4"
300
+ ruby_parse "3.2.2"
301
+ ruby_parse "3.3.0"
304
302
 
305
303
  task :debug => :isolate do
306
304
  ENV["V"] ||= VERS.last
data/compare/normalize.rb CHANGED
@@ -202,6 +202,8 @@ ARGF.each_line do |line|
202
202
  break
203
203
  when /^Terminals/ then # yacc
204
204
  break
205
+ when /^State \d/ then # lrama
206
+ break
205
207
  when /^\cL/ then # byacc
206
208
  break
207
209
  else
data/lib/ruby_lexer.rb CHANGED
@@ -113,7 +113,8 @@ class RubyLexer
113
113
  # Last token read via next_token.
114
114
  attr_accessor :token
115
115
 
116
- attr_writer :comments
116
+ # Last comment lexed, or nil
117
+ attr_accessor :comment
117
118
 
118
119
  def initialize _ = nil
119
120
  @lex_state = nil # remove one warning under $DEBUG
@@ -134,16 +135,6 @@ class RubyLexer
134
135
  is_after_operator? ? EXPR_ARG : EXPR_BEG
135
136
  end
136
137
 
137
- def ignore_body_comments
138
- @comments.clear
139
- end
140
-
141
- def comments # TODO: remove this... maybe comment_string + attr_accessor
142
- c = @comments.join
143
- @comments.clear
144
- c
145
- end
146
-
147
138
  def debug n
148
139
  raise "debug #{n}"
149
140
  end
@@ -258,14 +249,15 @@ class RubyLexer
258
249
  end
259
250
 
260
251
  def process_begin text
261
- @comments << matched
252
+ self.comment ||= +""
253
+ self.comment << matched
262
254
 
263
255
  unless scan(/.*?\n=end( |\t|\f)*[^\n]*(\n|\z)/m) then
264
- @comments.clear
256
+ self.comment = nil
265
257
  rb_compile_error("embedded document meets end of file")
266
258
  end
267
259
 
268
- @comments << matched
260
+ self.comment << matched
269
261
  self.lineno += matched.count("\n") # HACK?
270
262
 
271
263
  nil # TODO
@@ -447,7 +439,8 @@ class RubyLexer
447
439
 
448
440
  while scan(/\s*\#.*(\n+|\z)/) do
449
441
  self.lineno += matched.count "\n"
450
- @comments << matched.gsub(/^ +#/, "#").gsub(/^ +$/, "")
442
+ self.comment ||= +""
443
+ self.comment << matched.gsub(/^ +#/, "#").gsub(/^ +$/, "")
451
444
  end
452
445
 
453
446
  return nil if end_of_stream?
@@ -768,7 +761,7 @@ class RubyLexer
768
761
  self.lineno = 1
769
762
  self.brace_nest = 0
770
763
  self.command_start = true
771
- self.comments = []
764
+ self.comment = nil
772
765
  self.lex_state = EXPR_NONE
773
766
  self.lex_strterm = nil
774
767
  self.lpar_beg = nil
@@ -2,7 +2,7 @@
2
2
  # encoding: UTF-8
3
3
  #--
4
4
  # This file is automatically generated. Do not modify it.
5
- # Generated by: oedipus_lex version 2.6.1.
5
+ # Generated by: oedipus_lex version 2.6.2.
6
6
  # Source: lib/ruby_lexer.rex
7
7
  #++
8
8
 
@@ -91,7 +91,6 @@ class RubyLexer
91
91
  old_pos - start_of_current_line_pos
92
92
  end
93
93
 
94
-
95
94
  ##
96
95
  # The current scanner class. Must be overridden in subclasses.
97
96
 
data/lib/ruby_parser.rb CHANGED
@@ -69,23 +69,25 @@ end
69
69
  ##
70
70
  # Unfortunately a problem with racc is that it won't let me namespace
71
71
  # properly, so instead of RubyParser::V25, I still have to generate
72
- # the old Ruby25Parser and shove it in as V25.
73
-
74
- require "ruby20_parser"
75
- require "ruby21_parser"
76
- require "ruby22_parser"
77
- require "ruby23_parser"
78
- require "ruby24_parser"
79
- require "ruby25_parser"
80
- require "ruby26_parser"
81
- require "ruby27_parser"
82
- require "ruby30_parser"
83
- require "ruby31_parser"
84
- require "ruby32_parser"
72
+ # the old RubyParser25 and shove it in as V25.
73
+
74
+ require "ruby_parser20"
75
+ require "ruby_parser21"
76
+ require "ruby_parser22"
77
+ require "ruby_parser23"
78
+ require "ruby_parser24"
79
+ require "ruby_parser25"
80
+ require "ruby_parser26"
81
+ require "ruby_parser27"
82
+ require "ruby_parser30"
83
+ require "ruby_parser31"
84
+ require "ruby_parser32"
85
+ require "ruby_parser33"
85
86
 
86
87
  class RubyParser # HACK
87
88
  VERSIONS.clear # also a HACK caused by racc namespace issues
88
89
 
90
+ class V33 < ::Ruby33Parser; end
89
91
  class V32 < ::Ruby32Parser; end
90
92
  class V31 < ::Ruby31Parser; end
91
93
  class V30 < ::Ruby30Parser; end
@@ -1468,7 +1468,6 @@ rule
1468
1468
  {
1469
1469
  result = new_class val
1470
1470
  self.env.unextend
1471
- self.lexer.ignore_body_comments
1472
1471
  }
1473
1472
  | k_class tLSHFT
1474
1473
  expr
@@ -1486,7 +1485,6 @@ rule
1486
1485
  {
1487
1486
  result = new_sclass val
1488
1487
  self.env.unextend
1489
- self.lexer.ignore_body_comments
1490
1488
  }
1491
1489
  | k_module
1492
1490
  cpath
@@ -1500,7 +1498,6 @@ rule
1500
1498
  {
1501
1499
  result = new_module val
1502
1500
  self.env.unextend
1503
- self.lexer.ignore_body_comments
1504
1501
  }
1505
1502
  | k_def fname
1506
1503
  {
@@ -1519,8 +1516,6 @@ rule
1519
1516
  lexer.cmdarg.pop
1520
1517
  self.env.unextend
1521
1518
  self.in_def = in_def
1522
-
1523
- self.lexer.ignore_body_comments
1524
1519
  }
1525
1520
  | k_def singleton dot_or_colon
1526
1521
  {
@@ -1559,8 +1554,6 @@ rule
1559
1554
  self.in_single -= 1
1560
1555
 
1561
1556
  # TODO: restore cur_arg ? what's cur_arg?
1562
-
1563
- self.lexer.ignore_body_comments
1564
1557
  }
1565
1558
  | kBREAK
1566
1559
  {
@@ -1598,15 +1591,15 @@ rule
1598
1591
  k_for: kFOR
1599
1592
  k_class: kCLASS
1600
1593
  {
1601
- self.comments.push self.lexer.comments
1594
+ result << self.lexer.comment
1602
1595
  }
1603
1596
  k_module: kMODULE
1604
1597
  {
1605
- self.comments.push self.lexer.comments
1598
+ result << self.lexer.comment
1606
1599
  }
1607
1600
  k_def: kDEF
1608
1601
  {
1609
- self.comments.push self.lexer.comments
1602
+ result << self.lexer.comment
1610
1603
  }
1611
1604
  k_do: kDO
1612
1605
  k_do_block: kDO_BLOCK