ruby_parser 3.20.2 → 3.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/History.rdoc +44 -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 +22 -23
  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} +32 -36
  21. data/lib/{ruby30_parser.rb → ruby_parser30.rb} +38 -39
  22. data/lib/{ruby31_parser.rb → ruby_parser31.rb} +2788 -2704
  23. data/lib/{ruby32_parser.rb → ruby_parser32.rb} +2735 -2741
  24. data/lib/ruby_parser33.rb +13577 -0
  25. data/lib/ruby_parser_extras.rb +36 -18
  26. data/test/test_ruby_lexer.rb +5 -5
  27. data/test/test_ruby_parser.rb +29 -19
  28. data/tools/munge.rb +8 -2
  29. data/tools/ripper.rb +14 -12
  30. data.tar.gz.sig +0 -0
  31. metadata +41 -51
  32. metadata.gz.sig +0 -0
  33. data/lib/ruby20_parser.y +0 -2707
  34. data/lib/ruby21_parser.y +0 -2724
  35. data/lib/ruby22_parser.y +0 -2735
  36. data/lib/ruby23_parser.y +0 -2737
  37. data/lib/ruby24_parser.y +0 -2745
  38. data/lib/ruby25_parser.y +0 -2745
  39. data/lib/ruby26_parser.y +0 -2760
  40. data/lib/ruby27_parser.y +0 -3360
  41. data/lib/ruby30_parser.y +0 -3486
  42. data/lib/ruby31_parser.y +0 -3520
  43. data/lib/ruby32_parser.y +0 -3521
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0ecb31322a35ef752328921f895d350d220a56e7ed6fb36462742fefc7962f55
4
- data.tar.gz: aac07b5fa420c5d9c86c8b32c9d0232f1760c16354a9765530a6a1a87a209cfa
3
+ metadata.gz: 6130eb28e9d379051c5b2f5c83b2c77ca217e82e0ca0aa53736128810fd1ff35
4
+ data.tar.gz: 7359cfb0974a66a0d07bb75899d92c2082a23e326bd6aed56ae5c7790e2819be
5
5
  SHA512:
6
- metadata.gz: 51239eb0334a8fbc60f6e7a8011853a126f3c6db1889bc5204652a7f0d33791f7d704ed0334a5061deb08e4a82fd10a299565e71cc2861b6a869a718dd87057c
7
- data.tar.gz: acfd8ce38fdbea35fbb89664e445deee0c2ab686e0fb5e4db3cc151f42ef6305c412939ce2e77a95e66d9bd2856e33d1098c0d12cb05eb99b82616bda5f444d2
6
+ metadata.gz: 0d9e8d398b4f7f412406c23ec13557d4c80f4c10fffbf9563992df2cbbda7c0c9ca46e933025c20930d7434336b63d6485d8cb5463e484e5a04c676d7207a8eb
7
+ data.tar.gz: a34f3b845c73d919b5e502d07f2683e823dd126372cac137eb7c4b504ad4b90f6a25f46f8eb30ef62cba55ef50b7eb3b148d426dcdeabeca87e3465b0622b548
checksums.yaml.gz.sig CHANGED
Binary file
data/History.rdoc CHANGED
@@ -1,3 +1,47 @@
1
+ === 3.21.0 / 2024-01-15
2
+
3
+ * 18 minor enhancements:
4
+
5
+ * (internal) Added simple RubyLexer#comment.
6
+ * (internal) Removed RubyLexer#comments and #ignore_body_comments.
7
+ * (internal) Removed RubyParser#comments.
8
+ * (internal) Renamed files from lib/ruby##_parser.* to lib/ruby_parser##.*
9
+ * (internal) Renamed lib/ruby3_parser.yy to lib/ruby_parser3.yy
10
+ * (internal) Renamed lib/ruby_parser.yy to lib/ruby_parser2.yy
11
+ * Added tentative 3.2 support. (torrocus)
12
+ * Made `rake compare` a multitask (28s -> 10s!!).
13
+ * Made `rake compare` depend on `generate` (from clean: 28s -> 18s).
14
+ * No longer package versioned .y files.
15
+ * Overhaul of parser/lexer comment processing.
16
+ * Parser productions for k_class/k_module/k_def carry their comment with them.
17
+ * Restructured build tasks to utilize Hoe's .yy support! 8.5s -> 1.2s!!!
18
+ * RubyParser new_(class|module|defn|defs) handle comment processing via sexp.
19
+ * RubyParser new_(class|module|defn|defs) handle normalizing production sexps.
20
+ * RubyParser#next_token clears out lexer's comment when applicable.
21
+ * Simplified parser productions for defn_head, defs_head. No more normalizing.
22
+ * Updated `rake compare` steps for lrama in ruby 3.3+.
23
+
24
+ * 6 bug fixes:
25
+
26
+ * Cleaned out cruft from `rake compare` code.
27
+ * Fixed compare/normalize.rb for lrama differences.
28
+ * Made `parser` task depend on `isolate` task to pick up racc generator.
29
+ * Made racc a runtime dependency (was dev only) now that ruby 3.3 doesn't ship with the racc runtime. (wildmaples)
30
+ * Updated README.rdoc updating instructions to match current filenames.
31
+ * Updated compare versions and added 3.3.
32
+
33
+ === 3.20.3 / 2023-07-11
34
+
35
+ * 2 minor enhancements:
36
+
37
+ * Added Parser#in_argdef and integrated into 3.x parsers.
38
+ * Improved tools/munge.rb to handler MRI 3.2 output
39
+
40
+ * 2 bug fixes:
41
+
42
+ * Fixed process_dots to properly deal with paren-less forward_args. (eric1234)
43
+ * Fixed tools/ripper.rb to properly print ripper sexp at the end
44
+
1
45
  === 3.20.2 / 2023-06-06
2
46
 
3
47
  * 1 bug fix:
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,11 +113,12 @@ 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
120
- self.lex_state = EXPR_NONE
121
+ @lex_state = EXPR_NONE
121
122
 
122
123
  self.cond = RubyParserStuff::StackState.new(:cond, $DEBUG)
123
124
  self.cmdarg = RubyParserStuff::StackState.new(:cmdarg, $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
@@ -355,8 +347,14 @@ class RubyLexer
355
347
  end
356
348
  end
357
349
 
358
- def process_dots text
359
- tokens = ruby27plus? && is_beg? ? BTOKENS : TOKENS
350
+ def process_dots text # parse32.y:10216
351
+ is_beg = self.is_beg?
352
+ self.lex_state = EXPR_BEG
353
+
354
+ return result EXPR_ENDARG, :tBDOT3, text if
355
+ parser.in_argdef && text == "..." # TODO: version check?
356
+
357
+ tokens = ruby27plus? && is_beg ? BTOKENS : TOKENS
360
358
 
361
359
  result EXPR_BEG, tokens[text], text
362
360
  end
@@ -441,7 +439,8 @@ class RubyLexer
441
439
 
442
440
  while scan(/\s*\#.*(\n+|\z)/) do
443
441
  self.lineno += matched.count "\n"
444
- @comments << matched.gsub(/^ +#/, "#").gsub(/^ +$/, "")
442
+ self.comment ||= +""
443
+ self.comment << matched.gsub(/^ +#/, "#").gsub(/^ +$/, "")
445
444
  end
446
445
 
447
446
  return nil if end_of_stream?
@@ -689,7 +688,7 @@ class RubyLexer
689
688
  return process_token_keyword keyword if keyword
690
689
  end
691
690
 
692
- # matching: compare/parse30.y:9039
691
+ # matching: compare/parse32.y:9031
693
692
  state = if lex_state =~ EXPR_BEG_ANY|EXPR_ARG_ANY|EXPR_DOT then
694
693
  cmd_state ? EXPR_CMDARG : EXPR_ARG
695
694
  elsif lex_state =~ EXPR_FNAME then
@@ -711,7 +710,7 @@ class RubyLexer
711
710
  end
712
711
 
713
712
  def process_token_keyword keyword
714
- # matching MIDDLE of parse_ident in compare/parse23.y:8046
713
+ # matching MIDDLE of parse_ident in compare/parse32.y:9695
715
714
  state = lex_state
716
715
 
717
716
  return result(EXPR_ENDFN, keyword.id0, token) if lex_state =~ EXPR_FNAME
@@ -720,7 +719,7 @@ class RubyLexer
720
719
  self.command_start = true if lex_state =~ EXPR_BEG
721
720
 
722
721
  case
723
- when keyword.id0 == :kDO then # parse26.y line 7591
722
+ when keyword.id0 == :kDO then # parse32.y line 9712
724
723
  case
725
724
  when lambda_beginning? then
726
725
  self.lpar_beg = nil # lambda_beginning? == FALSE in the body of "-> do ... end"
@@ -762,7 +761,7 @@ class RubyLexer
762
761
  self.lineno = 1
763
762
  self.brace_nest = 0
764
763
  self.command_start = true
765
- self.comments = []
764
+ self.comment = nil
766
765
  self.lex_state = EXPR_NONE
767
766
  self.lex_strterm = nil
768
767
  self.lpar_beg = nil
@@ -892,7 +891,7 @@ class RubyLexer
892
891
  end
893
892
 
894
893
  def inspect
895
- return "Value(0)" if n.zero? # HACK?
894
+ return "EXPR_NONE" if n.zero? # HACK?
896
895
 
897
896
  names.map { |v, k| k if self =~ v }.
898
897
  compact.
@@ -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