ruby_parser 3.12.0 → 3.13.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.
@@ -7,9 +7,10 @@ require "rp_extensions"
7
7
  require "rp_stringscanner"
8
8
 
9
9
  module RubyParserStuff
10
- VERSION = "3.12.0"
10
+ VERSION = "3.13.0"
11
11
 
12
12
  attr_accessor :lexer, :in_def, :in_single, :file
13
+ attr_accessor :in_kwarg
13
14
  attr_reader :env, :comments
14
15
 
15
16
  $good20 = []
@@ -90,23 +91,6 @@ module RubyParserStuff
90
91
  result
91
92
  end
92
93
 
93
- def block_var18 ary, splat, block
94
- ary ||= s(:array)
95
-
96
- if splat then
97
- splat = splat[1] unless Symbol === splat
98
- ary << "*#{splat}".to_sym
99
- end
100
-
101
- ary << "&#{block[1]}".to_sym if block
102
-
103
- if ary.length > 2 or ary.splat then # HACK
104
- s(:masgn, *ary.sexp_body)
105
- else
106
- ary.last
107
- end
108
- end
109
-
110
94
  def array_to_hash array
111
95
  case array.sexp_type
112
96
  when :kwsplat then
@@ -152,8 +136,10 @@ module RubyParserStuff
152
136
  when :block_arg then
153
137
  result << :"&#{arg.last}"
154
138
  when :shadow then
139
+ name = arg.last
140
+ self.env[name] = :lvar
155
141
  if Sexp === result.last and result.last.sexp_type == :shadow then
156
- result.last << arg.last
142
+ result.last << name
157
143
  else
158
144
  result << arg
159
145
  end
@@ -288,9 +274,6 @@ module RubyParserStuff
288
274
  return new_call(lhs, :"=~", argl(rhs)).line(lhs.line)
289
275
  end
290
276
 
291
- # TODO: remove in 4.0 or 2018-01, whichever is first
292
- deprecate :get_match_node, :new_match
293
-
294
277
  def gettable(id)
295
278
  lineno = id.lineno if id.respond_to? :lineno
296
279
  id = id.to_sym if String === id
@@ -334,10 +317,12 @@ module RubyParserStuff
334
317
  def initialize(options = {})
335
318
  super()
336
319
 
337
- v = self.class.name[/1[89]|2[01]/]
320
+ v = self.class.name[/2\d/]
321
+ raise "Bad Class name #{self.class}" unless v
338
322
 
339
323
  self.lexer = RubyLexer.new v && v.to_i
340
324
  self.lexer.parser = self
325
+ self.in_kwarg = false
341
326
 
342
327
  @env = RubyParserStuff::Environment.new
343
328
  @comments = []
@@ -431,9 +416,6 @@ module RubyParserStuff
431
416
  return s(type, left, right)
432
417
  end
433
418
 
434
- # TODO: remove in 4.0 or 2018-01, whichever is first
435
- deprecate :logop, :logical_op
436
-
437
419
  def new_aref val
438
420
  val[2] ||= s(:arglist)
439
421
  val[2].sexp_type = :arglist if val[2].sexp_type == :array # REFACTOR
@@ -472,6 +454,10 @@ module RubyParserStuff
472
454
  result
473
455
  end
474
456
 
457
+ def new_brace_body args, body, lineno
458
+ new_iter(nil, args, body).line(lineno)
459
+ end
460
+
475
461
  def argl x
476
462
  x = s(:arglist, x) if x and x.sexp_type == :array
477
463
  x
@@ -580,7 +566,7 @@ module RubyParserStuff
580
566
  end
581
567
 
582
568
  def new_defn val
583
- (_, line), name, _, args, body, * = val
569
+ (_, line), (name, _), _, args, body, * = val
584
570
  body ||= s(:nil)
585
571
 
586
572
  result = s(:defn, name.to_sym, args)
@@ -601,7 +587,7 @@ module RubyParserStuff
601
587
  end
602
588
 
603
589
  def new_defs val
604
- recv, name, args, body = val[1], val[4], val[6], val[7]
590
+ recv, (name, _line), args, body = val[1], val[4], val[6], val[7]
605
591
  body ||= s(:nil)
606
592
 
607
593
  result = s(:defs, recv, name.to_sym, args)
@@ -619,6 +605,10 @@ module RubyParserStuff
619
605
  result
620
606
  end
621
607
 
608
+ def new_do_body args, body, lineno
609
+ new_iter(nil, args, body).line(lineno)
610
+ end
611
+
622
612
  def new_for expr, var, body
623
613
  result = s(:for, expr, var).line(var.line)
624
614
  result << body if body
@@ -743,9 +733,6 @@ module RubyParserStuff
743
733
  }[c]
744
734
  raise "unknown regexp option: #{c}" unless v
745
735
  o += v
746
-
747
- # encoding options are ignored on 1.9+
748
- k = c if c =~ /[esu]/ if RUBY_VERSION < "1.9"
749
736
  end
750
737
 
751
738
  case node.sexp_type
@@ -783,6 +770,10 @@ module RubyParserStuff
783
770
  node
784
771
  end
785
772
 
773
+ def new_rescue body, resbody
774
+ s(:rescue, body, resbody)
775
+ end
776
+
786
777
  def new_resbody cond, body
787
778
  if body && body.sexp_type == :block then
788
779
  body.shift # remove block and splat it in directly
@@ -813,7 +804,7 @@ module RubyParserStuff
813
804
 
814
805
  def new_string val
815
806
  str = val[0]
816
- str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9"
807
+ str.force_encoding("ASCII-8BIT") unless str.valid_encoding?
817
808
  result = s(:str, str)
818
809
  self.lexer.fixup_lineno str.count("\n")
819
810
  result
@@ -821,7 +812,7 @@ module RubyParserStuff
821
812
 
822
813
  def new_qword_list_entry val
823
814
  str = val[1]
824
- str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9"
815
+ str.force_encoding("ASCII-8BIT") unless str.valid_encoding?
825
816
  result = s(:str, str)
826
817
  self.lexer.fixup_lineno
827
818
  result
@@ -875,7 +866,6 @@ module RubyParserStuff
875
866
  when :str then
876
867
  sym = s(:lit, sym.last.to_sym)
877
868
  else
878
- debug20 24
879
869
  sym = s(:dsym, "", sym || s(:str, ""))
880
870
  end
881
871
  self.lexer.fixup_lineno
@@ -986,9 +976,6 @@ module RubyParserStuff
986
976
  lhs
987
977
  end
988
978
 
989
- # TODO: remove in 4.0 or 2018-01, whichever is first
990
- deprecate :node_assign, :new_assign
991
-
992
979
  ##
993
980
  # Returns a UTF-8 encoded string after processing BOMs and magic
994
981
  # encoding comments.
@@ -1145,7 +1132,7 @@ module RubyParserStuff
1145
1132
  result
1146
1133
  end
1147
1134
 
1148
- def value_expr oldnode # HACK
1135
+ def value_expr oldnode # HACK: much more to do
1149
1136
  node = remove_begin oldnode
1150
1137
  node.line = oldnode.line if oldnode
1151
1138
  node[2] = value_expr node[2] if node and node.sexp_type == :if
@@ -1193,82 +1180,71 @@ module RubyParserStuff
1193
1180
  ##
1194
1181
  # :stopdoc:
1195
1182
  #
1196
- # :expr_beg = ignore newline, +/- is a sign.
1197
- # :expr_end = newline significant, +/- is a operator.
1198
- # :expr_arg = newline significant, +/- is a operator.
1199
- # :expr_cmdarg = newline significant, +/- is a operator.
1200
- # :expr_endarg = newline significant, +/- is a operator.
1201
- # :expr_mid = newline significant, +/- is a operator.
1202
- # :expr_fname = ignore newline, no reserved words.
1203
- # :expr_dot = right after . or ::, no reserved words.
1204
- # :expr_class = immediate after class, no here document.
1183
+ # :expr_beg = ignore newline, +/- is a sign.
1184
+ # :expr_end = newline significant, +/- is an operator.
1185
+ # :expr_endarg = ditto, and unbound braces.
1186
+ # :expr_endfn = ditto, and unbound braces.
1187
+ # :expr_arg = newline significant, +/- is an operator.
1188
+ # :expr_cmdarg = ditto
1189
+ # :expr_mid = ditto
1190
+ # :expr_fname = ignore newline, no reserved words.
1191
+ # :expr_dot = right after . or ::, no reserved words.
1192
+ # :expr_class = immediate after class, no here document.
1193
+ # :expr_label = flag bit, label is allowed.
1194
+ # :expr_labeled = flag bit, just after a label.
1195
+ # :expr_fitem = symbol literal as FNAME.
1196
+ # :expr_value = :expr_beg -- work to remove. Need multi-state support.
1205
1197
 
1206
1198
  wordlist = [
1207
- ["end", [:kEND, :kEND ], :expr_end ],
1208
- ["else", [:kELSE, :kELSE ], :expr_beg ],
1199
+ ["alias", [:kALIAS, :kALIAS ], :expr_fname ],
1200
+ ["and", [:kAND, :kAND ], :expr_beg ],
1201
+ ["begin", [:kBEGIN, :kBEGIN ], :expr_beg ],
1202
+ ["break", [:kBREAK, :kBREAK ], :expr_mid ],
1209
1203
  ["case", [:kCASE, :kCASE ], :expr_beg ],
1204
+ ["class", [:kCLASS, :kCLASS ], :expr_class ],
1205
+ ["def", [:kDEF, :kDEF ], :expr_fname ],
1206
+ ["defined?", [:kDEFINED, :kDEFINED ], :expr_arg ],
1207
+ ["do", [:kDO, :kDO ], :expr_beg ],
1208
+ ["else", [:kELSE, :kELSE ], :expr_beg ],
1209
+ ["elsif", [:kELSIF, :kELSIF ], :expr_beg ],
1210
+ ["end", [:kEND, :kEND ], :expr_end ],
1210
1211
  ["ensure", [:kENSURE, :kENSURE ], :expr_beg ],
1212
+ ["false", [:kFALSE, :kFALSE ], :expr_end ],
1213
+ ["for", [:kFOR, :kFOR ], :expr_beg ],
1214
+ ["if", [:kIF, :kIF_MOD ], :expr_beg ],
1215
+ ["in", [:kIN, :kIN ], :expr_beg ],
1211
1216
  ["module", [:kMODULE, :kMODULE ], :expr_beg ],
1212
- ["elsif", [:kELSIF, :kELSIF ], :expr_beg ],
1213
- ["def", [:kDEF, :kDEF ], :expr_fname ],
1217
+ ["next", [:kNEXT, :kNEXT ], :expr_mid ],
1218
+ ["nil", [:kNIL, :kNIL ], :expr_end ],
1219
+ ["not", [:kNOT, :kNOT ], :expr_arg ],
1220
+ ["or", [:kOR, :kOR ], :expr_beg ],
1221
+ ["redo", [:kREDO, :kREDO ], :expr_end ],
1214
1222
  ["rescue", [:kRESCUE, :kRESCUE_MOD ], :expr_mid ],
1215
- ["not", [:kNOT, :kNOT ], :expr_beg ],
1216
- ["then", [:kTHEN, :kTHEN ], :expr_beg ],
1217
- ["yield", [:kYIELD, :kYIELD ], :expr_arg ],
1218
- ["for", [:kFOR, :kFOR ], :expr_beg ],
1219
- ["self", [:kSELF, :kSELF ], :expr_end ],
1220
- ["false", [:kFALSE, :kFALSE ], :expr_end ],
1221
1223
  ["retry", [:kRETRY, :kRETRY ], :expr_end ],
1222
1224
  ["return", [:kRETURN, :kRETURN ], :expr_mid ],
1223
- ["true", [:kTRUE, :kTRUE ], :expr_end ],
1224
- ["if", [:kIF, :kIF_MOD ], :expr_beg ],
1225
- ["defined?", [:kDEFINED, :kDEFINED ], :expr_arg ],
1225
+ ["self", [:kSELF, :kSELF ], :expr_end ],
1226
1226
  ["super", [:kSUPER, :kSUPER ], :expr_arg ],
1227
+ ["then", [:kTHEN, :kTHEN ], :expr_beg ],
1228
+ ["true", [:kTRUE, :kTRUE ], :expr_end ],
1227
1229
  ["undef", [:kUNDEF, :kUNDEF ], :expr_fname ],
1228
- ["break", [:kBREAK, :kBREAK ], :expr_mid ],
1229
- ["in", [:kIN, :kIN ], :expr_beg ],
1230
- ["do", [:kDO, :kDO ], :expr_beg ],
1231
- ["nil", [:kNIL, :kNIL ], :expr_end ],
1232
- ["until", [:kUNTIL, :kUNTIL_MOD ], :expr_beg ],
1233
1230
  ["unless", [:kUNLESS, :kUNLESS_MOD ], :expr_beg ],
1234
- ["or", [:kOR, :kOR ], :expr_beg ],
1235
- ["next", [:kNEXT, :kNEXT ], :expr_mid ],
1231
+ ["until", [:kUNTIL, :kUNTIL_MOD ], :expr_beg ],
1236
1232
  ["when", [:kWHEN, :kWHEN ], :expr_beg ],
1237
- ["redo", [:kREDO, :kREDO ], :expr_end ],
1238
- ["and", [:kAND, :kAND ], :expr_beg ],
1239
- ["begin", [:kBEGIN, :kBEGIN ], :expr_beg ],
1240
- ["__LINE__", [:k__LINE__, :k__LINE__ ], :expr_end ],
1241
- ["class", [:kCLASS, :kCLASS ], :expr_class ],
1242
- ["__FILE__", [:k__FILE__, :k__FILE__ ], :expr_end ],
1243
- ["END", [:klEND, :klEND ], :expr_end ],
1244
- ["BEGIN", [:klBEGIN, :klBEGIN ], :expr_end ],
1245
1233
  ["while", [:kWHILE, :kWHILE_MOD ], :expr_beg ],
1246
- ["alias", [:kALIAS, :kALIAS ], :expr_fname ],
1234
+ ["yield", [:kYIELD, :kYIELD ], :expr_arg ],
1235
+ ["BEGIN", [:klBEGIN, :klBEGIN ], :expr_end ],
1236
+ ["END", [:klEND, :klEND ], :expr_end ],
1237
+ ["__FILE__", [:k__FILE__, :k__FILE__ ], :expr_end ],
1238
+ ["__LINE__", [:k__LINE__, :k__LINE__ ], :expr_end ],
1247
1239
  ["__ENCODING__", [:k__ENCODING__, :k__ENCODING__], :expr_end],
1248
1240
  ].map { |args| KWtable.new(*args) }
1249
1241
 
1250
1242
  # :startdoc:
1251
1243
 
1252
- WORDLIST18 = Hash[*wordlist.map { |o| [o.name, o] }.flatten]
1253
- WORDLIST19 = Hash[*wordlist.map { |o| [o.name, o] }.flatten]
1244
+ WORDLIST = Hash[*wordlist.map { |o| [o.name, o] }.flatten]
1254
1245
 
1255
- WORDLIST18.delete "__ENCODING__"
1256
-
1257
- %w[and case elsif for if in module or unless until when while].each do |k|
1258
- WORDLIST19[k] = WORDLIST19[k].dup
1259
- WORDLIST19[k].state = :expr_value
1260
- end
1261
- %w[not].each do |k|
1262
- WORDLIST19[k] = WORDLIST19[k].dup
1263
- WORDLIST19[k].state = :expr_arg
1264
- end
1265
-
1266
- def self.keyword18 str # REFACTOR
1267
- WORDLIST18[str]
1268
- end
1269
-
1270
- def self.keyword19 str
1271
- WORDLIST19[str]
1246
+ def self.keyword str
1247
+ WORDLIST[str]
1272
1248
  end
1273
1249
  end
1274
1250
 
@@ -1330,7 +1306,7 @@ module RubyParserStuff
1330
1306
 
1331
1307
  def reset
1332
1308
  @stack = [false]
1333
- warn "#{name}_stack(set): 0" if debug
1309
+ log :reset if debug
1334
1310
  end
1335
1311
 
1336
1312
  def inspect
@@ -1338,41 +1314,47 @@ module RubyParserStuff
1338
1314
  end
1339
1315
 
1340
1316
  def is_in_state
1317
+ log :is_in_state if debug
1341
1318
  @stack.last
1342
1319
  end
1343
1320
 
1344
1321
  def lexpop
1345
- warn "#{name}_stack.lexpop" if debug
1346
1322
  raise if @stack.size == 0
1347
1323
  a = @stack.pop
1348
1324
  b = @stack.pop
1349
1325
  @stack.push(a || b)
1326
+ log :lexpop if debug
1327
+ end
1328
+
1329
+ def log action
1330
+ c = caller[1]
1331
+ c = caller[2] if c =~ /expr_result/
1332
+ warn "%s_stack.%s: %p at %s" % [name, action, @stack, c.clean_caller]
1333
+ nil
1350
1334
  end
1351
1335
 
1352
1336
  def pop
1353
1337
  r = @stack.pop
1354
- warn "#{name}_stack.pop" if debug
1355
- @stack.push false if @stack.size == 0
1338
+ @stack.push false if @stack.empty?
1339
+ log :pop if debug
1356
1340
  r
1357
1341
  end
1358
1342
 
1359
1343
  def push val
1360
1344
  @stack.push val
1361
- return unless debug
1362
- c = caller.first
1363
- c = caller[1] if c =~ /expr_result/
1364
- warn "#{name}_stack(push): #{val} at line #{c.clean_caller}"
1365
- nil
1345
+ log :push if debug
1366
1346
  end
1367
1347
 
1368
- def store
1348
+ def store base = false
1369
1349
  result = @stack.dup
1370
- @stack.replace [false]
1350
+ @stack.replace [base]
1351
+ log :store if debug
1371
1352
  result
1372
1353
  end
1373
1354
 
1374
1355
  def restore oldstate
1375
1356
  @stack.replace oldstate
1357
+ log :restore if debug
1376
1358
  end
1377
1359
  end
1378
1360
  end
@@ -51,10 +51,6 @@ class TestRubyLexer < Minitest::Test
51
51
  assert_lex(input, exp_sexp, *args, &block)
52
52
  end
53
53
 
54
- def ruby18
55
- RubyParser::V18 === lexer.parser
56
- end
57
-
58
54
  def refute_lex input, *args # TODO: re-sort
59
55
  args = args.each_slice(2).map { |a, b| [a, b, nil, nil, nil] }.flatten
60
56
 
@@ -141,7 +137,7 @@ class TestRubyLexer < Minitest::Test
141
137
  yield
142
138
 
143
139
  lexer.lex_state = :expr_endarg
144
- assert_next_lexeme :tRCURLY, "}", :expr_endarg, 0
140
+ assert_next_lexeme :tSTRING_DEND, "}", :expr_endarg, 0
145
141
 
146
142
  lexer.lex_strterm = lex_strterm
147
143
  lexer.lex_state = :expr_beg
@@ -304,44 +300,23 @@ class TestRubyLexer < Minitest::Test
304
300
  assert_lex3("=>", nil, :tASSOC, "=>", :expr_beg)
305
301
  end
306
302
 
307
- def test_yylex_label__18
308
- setup_lexer_class RubyParser::V18
309
-
310
- assert_lex3("{a:",
311
- nil,
312
- :tLBRACE, "{", :expr_beg,
313
- :tIDENTIFIER, "a", :expr_arg,
314
- :tSYMBEG, ":", :expr_fname)
315
- end
316
-
317
- def test_yylex_label_in_params__18
318
- setup_lexer_class RubyParser::V18
319
-
320
- assert_lex3("foo(a:",
321
- nil,
322
- :tIDENTIFIER, "foo", :expr_cmdarg,
323
- :tLPAREN2, "(", :expr_beg,
324
- :tIDENTIFIER, "a", :expr_cmdarg,
325
- :tSYMBEG, ":", :expr_fname)
326
- end
327
-
328
- def test_yylex_label__19
329
- setup_lexer_class RubyParser::V19
303
+ def test_yylex_label__20
304
+ setup_lexer_class RubyParser::V20
330
305
 
331
306
  assert_lex3("{a:",
332
307
  nil,
333
308
  :tLBRACE, "{", :expr_beg,
334
- :tLABEL, "a", :expr_labelarg)
309
+ :tLABEL, "a", :expr_labeled)
335
310
  end
336
311
 
337
- def test_yylex_label_in_params__19
338
- setup_lexer_class RubyParser::V19
312
+ def test_yylex_label_in_params__20
313
+ setup_lexer_class RubyParser::V20
339
314
 
340
315
  assert_lex3("foo(a:",
341
316
  nil,
342
317
  :tIDENTIFIER, "foo", :expr_cmdarg,
343
318
  :tLPAREN2, "(", :expr_beg,
344
- :tLABEL, "a", :expr_labelarg)
319
+ :tLABEL, "a", :expr_labeled)
345
320
  end
346
321
 
347
322
  def test_yylex_paren_string_parens_interpolated
@@ -357,13 +332,13 @@ class TestRubyLexer < Minitest::Test
357
332
  assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0
358
333
 
359
334
  emulate_string_interpolation do
360
- assert_next_lexeme :tIDENTIFIER, "b", :expr_arg, 0, 0
335
+ assert_next_lexeme :tIDENTIFIER, "b", :expr_cmdarg, 0, 0
361
336
  end
362
337
 
363
338
  assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0
364
339
 
365
340
  emulate_string_interpolation do
366
- assert_next_lexeme :tIDENTIFIER, "d", :expr_arg, 0, 0
341
+ assert_next_lexeme :tIDENTIFIER, "d", :expr_cmdarg, 0, 0
367
342
  end
368
343
 
369
344
  assert_next_lexeme :tSTRING_CONTENT, ")", :expr_beg, 0, 0
@@ -503,7 +478,7 @@ class TestRubyLexer < Minitest::Test
503
478
  :tLAMBDA, nil, :expr_endfn,
504
479
  :kDO, "do", :expr_beg,
505
480
  :kEND, "end", :expr_end,
506
- :kDO_BLOCK, "do", :expr_beg,
481
+ :kDO, "do", :expr_beg,
507
482
  :kEND, "end", :expr_end)
508
483
  end
509
484
 
@@ -712,6 +687,39 @@ class TestRubyLexer < Minitest::Test
712
687
  assert_lex3("!~", nil, :tNMATCH, "!~", :expr_beg)
713
688
  end
714
689
 
690
+ def test_yylex_block_bug_1
691
+ assert_lex3("a do end",
692
+ s(:iter, s(:call, nil, :a), 0),
693
+
694
+ :tIDENTIFIER, "a", :expr_cmdarg,
695
+ :kDO, "do", :expr_beg,
696
+ :kEND, "end", :expr_end)
697
+ end
698
+
699
+ def test_yylex_block_bug_2
700
+ assert_lex3("a = 1\na do\nend",
701
+ s(:block,
702
+ s(:lasgn, :a, s(:lit, 1)),
703
+ s(:iter, s(:call, nil, :a), 0)),
704
+
705
+ :tIDENTIFIER, "a", :expr_cmdarg,
706
+ :tEQL, "=", :expr_beg,
707
+ :tINTEGER, 1, :expr_end,
708
+ :tNL, nil, :expr_beg,
709
+ :tIDENTIFIER, "a", :expr_cmdarg,
710
+ :kDO, "do", :expr_beg,
711
+ :kEND, "end", :expr_end)
712
+ end
713
+
714
+ def test_yylex_block_bug_3
715
+ assert_lex3("a { }",
716
+ s(:iter, s(:call, nil, :a), 0),
717
+
718
+ :tIDENTIFIER, "a", :expr_cmdarg, # verified
719
+ :tLCURLY, "{", :expr_beg, # TODO: expr_beg|expr_label
720
+ :tRCURLY, "}", :expr_endarg)
721
+ end
722
+
715
723
  def test_yylex_carat
716
724
  assert_lex3("^", nil, :tCARET, "^", :expr_beg)
717
725
  end
@@ -731,8 +739,8 @@ class TestRubyLexer < Minitest::Test
731
739
  def test_yylex_colon2_argh
732
740
  assert_lex3("module X::Y\n c\nend",
733
741
  nil,
734
- :kMODULE, "module", :expr_value,
735
- :tCONSTANT, "X", :expr_arg,
742
+ :kMODULE, "module", :expr_beg,
743
+ :tCONSTANT, "X", :expr_cmdarg,
736
744
  :tCOLON2, "::", :expr_dot,
737
745
  :tCONSTANT, "Y", :expr_arg,
738
746
  :tNL, nil, :expr_beg,
@@ -1369,14 +1377,8 @@ class TestRubyLexer < Minitest::Test
1369
1377
  assert_lex_fname "<=>", :tCMP
1370
1378
  end
1371
1379
 
1372
- def test_yylex_identifier_def__18
1373
- setup_lexer_class RubyParser::V18
1374
-
1375
- assert_lex_fname "identifier", :tIDENTIFIER, :expr_end
1376
- end
1377
-
1378
- def test_yylex_identifier_def__1920
1379
- setup_lexer_class RubyParser::V19
1380
+ def test_yylex_identifier_def__20
1381
+ setup_lexer_class RubyParser::V20
1380
1382
 
1381
1383
  assert_lex_fname "identifier", :tIDENTIFIER, :expr_endfn
1382
1384
  end
@@ -1412,14 +1414,8 @@ class TestRubyLexer < Minitest::Test
1412
1414
  assert_lex_fname "^", :tCARET
1413
1415
  end
1414
1416
 
1415
- def test_yylex_identifier_equals_def__18
1416
- setup_lexer_class RubyParser::V18
1417
-
1418
- assert_lex_fname "identifier=", :tIDENTIFIER, :expr_end
1419
- end
1420
-
1421
- def test_yylex_identifier_equals_def__1920
1422
- setup_lexer_class RubyParser::V19
1417
+ def test_yylex_identifier_equals_def__20
1418
+ setup_lexer_class RubyParser::V20
1423
1419
 
1424
1420
  assert_lex_fname "identifier=", :tIDENTIFIER, :expr_endfn
1425
1421
  end
@@ -1521,26 +1517,14 @@ class TestRubyLexer < Minitest::Test
1521
1517
  :kIF_MOD, "if", :expr_beg)
1522
1518
  end
1523
1519
 
1524
- def test_yylex_question_eh_a__18
1525
- setup_lexer_class RubyParser::V18
1526
-
1527
- assert_lex3("?a", nil, :tINTEGER, 97, :expr_end)
1528
- end
1529
-
1530
- def test_yylex_question_eh_a__19
1531
- setup_lexer_class RubyParser::V19
1520
+ def test_yylex_question_eh_a__20
1521
+ setup_lexer_class RubyParser::V20
1532
1522
 
1533
1523
  assert_lex3("?a", nil, :tSTRING, "a", :expr_end)
1534
1524
  end
1535
1525
 
1536
- def test_yylex_question_eh_escape_M_escape_C__18
1537
- setup_lexer_class RubyParser::V18
1538
-
1539
- assert_lex3("?\\M-\\C-a", nil, :tINTEGER, 129, :expr_end)
1540
- end
1541
-
1542
- def test_yylex_question_eh_escape_M_escape_C__19
1543
- setup_lexer_class RubyParser::V19
1526
+ def test_yylex_question_eh_escape_M_escape_C__20
1527
+ setup_lexer_class RubyParser::V20
1544
1528
 
1545
1529
  assert_lex3("?\\M-\\C-a", nil, :tSTRING, "\M-\C-a", :expr_end)
1546
1530
  end
@@ -1724,15 +1708,8 @@ class TestRubyLexer < Minitest::Test
1724
1708
  assert_lex3(" (", nil, :tLPAREN_ARG, "(", :expr_beg)
1725
1709
  end
1726
1710
 
1727
- def test_yylex_open_bracket_exprarg__18
1728
- setup_lexer_class RubyParser::V18
1729
- self.lex_state = :expr_arg
1730
-
1731
- assert_lex3(" (", nil, :tLPAREN2, "(", :expr_beg)
1732
- end
1733
-
1734
- def test_yylex_open_bracket_exprarg__19
1735
- setup_lexer_class RubyParser::V19
1711
+ def test_yylex_open_bracket_exprarg__20
1712
+ setup_lexer_class RubyParser::V20
1736
1713
  self.lex_state = :expr_arg
1737
1714
 
1738
1715
  assert_lex3(" (", nil, :tLPAREN_ARG, "(", :expr_beg)
@@ -1896,18 +1873,6 @@ class TestRubyLexer < Minitest::Test
1896
1873
  assert_lex3("+42", nil, :tINTEGER, 42, :expr_end)
1897
1874
  end
1898
1875
 
1899
- def test_yylex_question__18
1900
- setup_lexer_class RubyParser::V18
1901
-
1902
- assert_lex3("?*", nil, :tINTEGER, 42, :expr_end)
1903
- end
1904
-
1905
- def test_yylex_question__19
1906
- setup_lexer_class RubyParser::V19
1907
-
1908
- assert_lex3("?*", nil, :tSTRING, "*", :expr_end)
1909
- end
1910
-
1911
1876
  def test_yylex_question_bad_eos
1912
1877
  refute_lex "?"
1913
1878
  end
@@ -1921,19 +1886,8 @@ class TestRubyLexer < Minitest::Test
1921
1886
  assert_lex3("?\f", nil, :tEH, "?", :expr_value)
1922
1887
  end
1923
1888
 
1924
- def test_yylex_question_ws_backslashed__18
1925
- setup_lexer_class RubyParser::V18
1926
-
1927
- assert_lex3("?\\ ", nil, :tINTEGER, 32, :expr_end)
1928
- assert_lex3("?\\n", nil, :tINTEGER, 10, :expr_end)
1929
- assert_lex3("?\\t", nil, :tINTEGER, 9, :expr_end)
1930
- assert_lex3("?\\v", nil, :tINTEGER, 11, :expr_end)
1931
- assert_lex3("?\\r", nil, :tINTEGER, 13, :expr_end)
1932
- assert_lex3("?\\f", nil, :tINTEGER, 12, :expr_end)
1933
- end
1934
-
1935
- def test_yylex_question_ws_backslashed__19
1936
- setup_lexer_class RubyParser::V19
1889
+ def test_yylex_question_ws_backslashed__20
1890
+ setup_lexer_class RubyParser::V20
1937
1891
 
1938
1892
  assert_lex3("?\\ ", nil, :tSTRING, " ", :expr_end)
1939
1893
  assert_lex3("?\\n", nil, :tSTRING, "\n", :expr_end)
@@ -1948,7 +1902,9 @@ class TestRubyLexer < Minitest::Test
1948
1902
  end
1949
1903
 
1950
1904
  def test_yylex_rcurly
1951
- assert_lex3("}", nil, :tRCURLY, "}", :expr_endarg)
1905
+ assert_lex("}", nil, :tRCURLY, "}", :expr_endarg, 0, 1) do
1906
+ lexer.brace_nest += 2
1907
+ end
1952
1908
  end
1953
1909
 
1954
1910
  def test_yylex_regexp
@@ -2434,8 +2390,6 @@ class TestRubyLexer < Minitest::Test
2434
2390
  end
2435
2391
 
2436
2392
  def test_yylex_string_double_pound_dollar_bad
2437
- skip if ruby18
2438
-
2439
2393
  assert_lex3('"#$%"', nil,
2440
2394
 
2441
2395
  :tSTRING_BEG, "\"", :expr_beg,
@@ -2619,12 +2573,6 @@ class TestRubyLexer < Minitest::Test
2619
2573
  assert_lex3(":symbol", nil, :tSYMBOL, "symbol", :expr_end)
2620
2574
  end
2621
2575
 
2622
- def test_yylex_symbol_zero_byte__18
2623
- setup_lexer_class RubyParser::V18
2624
-
2625
- refute_lex(":\"symbol\0\"", :tSYMBEG, ":")
2626
- end
2627
-
2628
2576
  def test_yylex_symbol_zero_byte
2629
2577
  assert_lex(":\"symbol\0\"", nil,
2630
2578
  :tSYMBOL, "symbol\0", :expr_end)
@@ -2791,7 +2739,7 @@ class TestRubyLexer < Minitest::Test
2791
2739
  s(:hash, s(:lit, :a), s(:lit, 1)),
2792
2740
 
2793
2741
  :tLBRACE, "{", :expr_beg, 0, 1,
2794
- :tLABEL, "a", :expr_labelarg, 0, 1,
2742
+ :tLABEL, "a", :expr_labeled, 0, 1,
2795
2743
  :tINTEGER, 1, :expr_end, 0, 1,
2796
2744
  :tRCURLY, "}", :expr_endarg, 0, 0)
2797
2745
  end
@@ -2803,7 +2751,7 @@ class TestRubyLexer < Minitest::Test
2803
2751
  s(:hash, s(:lit, :a), s(:lit, 1)),
2804
2752
 
2805
2753
  :tLBRACE, "{", :expr_beg, 0, 1,
2806
- :tLABEL, "a", :expr_labelarg, 0, 1,
2754
+ :tLABEL, "a", :expr_labeled, 0, 1,
2807
2755
  :tINTEGER, 1, :expr_end, 0, 1,
2808
2756
  :tRCURLY, "}", :expr_endarg, 0, 0)
2809
2757
  end
@@ -2815,7 +2763,7 @@ class TestRubyLexer < Minitest::Test
2815
2763
  s(:hash, s(:lit, :abc), s(:lit, :b)),
2816
2764
 
2817
2765
  :tLBRACE, "{", :expr_beg, 0, 1,
2818
- :tLABEL, "abc", :expr_labelarg, 0, 1,
2766
+ :tLABEL, "abc", :expr_labeled, 0, 1,
2819
2767
  :tSYMBOL, "b", :expr_end, 0, 1,
2820
2768
  :tRCURLY, "}", :expr_endarg, 0, 0)
2821
2769
  end
@@ -2827,7 +2775,7 @@ class TestRubyLexer < Minitest::Test
2827
2775
  s(:hash, s(:lit, :abc), s(:lit, :b)),
2828
2776
 
2829
2777
  :tLBRACE, "{", :expr_beg, 0, 1,
2830
- :tLABEL, "abc", :expr_labelarg, 0, 1,
2778
+ :tLABEL, "abc", :expr_labeled, 0, 1,
2831
2779
  :tSYMBOL, "b", :expr_end, 0, 1,
2832
2780
  :tRCURLY, "}", :expr_endarg, 0, 0)
2833
2781
  end
@@ -2839,10 +2787,9 @@ class TestRubyLexer < Minitest::Test
2839
2787
  nil,
2840
2788
  :kDEF, "def", :expr_fname,
2841
2789
  :tIDENTIFIER, "foo", :expr_endfn,
2842
- :tLABEL, "a", :expr_labelarg,
2790
+ :tLABEL, "a", :expr_labeled,
2843
2791
  :tCOMMA, ",", :expr_beg,
2844
- :tLABEL, "b", :expr_labelarg,
2845
- :tNL, nil, :expr_beg,
2792
+ :tLABEL, "b", :expr_labeled,
2846
2793
  :kEND, "end", :expr_end)
2847
2794
  end
2848
2795
 
@@ -2853,7 +2800,7 @@ class TestRubyLexer < Minitest::Test
2853
2800
  nil,
2854
2801
 
2855
2802
  :tLBRACE, "{", :expr_beg,
2856
- :tLABEL, "s\tr\i\ng\\foo'bar", :expr_labelarg,
2803
+ :tLABEL, "s\tr\i\ng\\foo'bar", :expr_labeled,
2857
2804
  :tINTEGER, 1, :expr_end,
2858
2805
  :tRCURLY, "}", :expr_endarg)
2859
2806
  end
@@ -2865,7 +2812,7 @@ class TestRubyLexer < Minitest::Test
2865
2812
  nil,
2866
2813
 
2867
2814
  :tLBRACE, "{", :expr_beg,
2868
- :tLABEL, "s\\tr\\i\\ng\\foo'bar", :expr_labelarg,
2815
+ :tLABEL, "s\\tr\\i\\ng\\foo'bar", :expr_labeled,
2869
2816
  :tINTEGER, 1, :expr_end,
2870
2817
  :tRCURLY, "}", :expr_endarg)
2871
2818
  end