ruby_parser 3.20.0 → 3.20.2

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.
data/lib/ruby32_parser.y CHANGED
@@ -96,9 +96,9 @@ rule
96
96
  result = iter
97
97
  }
98
98
 
99
- begin_block: tLCURLY { result = lexer.lineno } top_compstmt tRCURLY
99
+ begin_block: tLCURLY top_compstmt tRCURLY
100
100
  {
101
- _, line, stmt, _ = val
101
+ (_, line), stmt, _ = val
102
102
  result = new_iter s(:preexe).line(line), 0, stmt
103
103
  }
104
104
 
@@ -221,6 +221,7 @@ rule
221
221
  | lhs tEQL mrhs
222
222
  {
223
223
  lhs, _, rhs = val
224
+
224
225
  result = new_assign lhs, s(:svalue, rhs).line(rhs.line)
225
226
  }
226
227
  | mlhs tEQL mrhs_arg kRESCUE_MOD stmt
@@ -620,7 +621,7 @@ rule
620
621
  }
621
622
  | tSTAR
622
623
  {
623
- l = lexer.lineno
624
+ (_, l), = val
624
625
  result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l
625
626
  }
626
627
  | tSTAR tCOMMA mlhs_post
@@ -1130,8 +1131,10 @@ rule
1130
1131
 
1131
1132
  paren_args: tLPAREN2 opt_call_args rparen
1132
1133
  {
1133
- _, args, _ = val
1134
+ _, args, (_, line_max) = val
1135
+
1134
1136
  result = args
1137
+ result.line_max = line_max if args
1135
1138
  }
1136
1139
  | tLPAREN2 args tCOMMA args_forward rparen
1137
1140
  {
@@ -1248,7 +1251,7 @@ rule
1248
1251
  args: arg_value
1249
1252
  {
1250
1253
  arg, = val
1251
- lineno = arg.line || lexer.lineno # HACK
1254
+ lineno = arg.line
1252
1255
 
1253
1256
  result = s(:array, arg).line lineno
1254
1257
  }
@@ -1257,6 +1260,11 @@ rule
1257
1260
  _, arg = val
1258
1261
  result = s(:array, s(:splat, arg).line(arg.line)).line arg.line
1259
1262
  }
1263
+ | tSTAR
1264
+ {
1265
+ (_, line), = val
1266
+ result = s(:array, s(:splat).line(line)).line line
1267
+ }
1260
1268
  | args tCOMMA arg_value
1261
1269
  {
1262
1270
  args, _, id = val
@@ -1264,11 +1272,14 @@ rule
1264
1272
  }
1265
1273
  | args tCOMMA tSTAR arg_value
1266
1274
  {
1267
- # TODO: the line number from tSTAR has been dropped
1268
- args, _, _, id = val
1269
- line = lexer.lineno
1275
+ args, _, (_, line), id = val
1270
1276
  result = self.list_append args, s(:splat, id).line(line)
1271
1277
  }
1278
+ | args tCOMMA tSTAR
1279
+ {
1280
+ args, _, (_, line) = val
1281
+ result = self.list_append args, s(:splat).line(line)
1282
+ }
1272
1283
 
1273
1284
  mrhs_arg: mrhs
1274
1285
  {
@@ -1285,7 +1296,6 @@ rule
1285
1296
  }
1286
1297
  | args tCOMMA tSTAR arg_value
1287
1298
  {
1288
- # TODO: make all tXXXX terminals include lexer.lineno
1289
1299
  arg, _, _, splat = val
1290
1300
  result = self.arg_concat arg, splat
1291
1301
  }
@@ -1314,7 +1324,6 @@ rule
1314
1324
  | k_begin
1315
1325
  {
1316
1326
  lexer.cmdarg.push false
1317
- result = self.lexer.lineno
1318
1327
  }
1319
1328
  bodystmt k_end
1320
1329
  {
@@ -1324,11 +1333,10 @@ rule
1324
1333
  | tLPAREN_ARG
1325
1334
  {
1326
1335
  lexer.lex_state = EXPR_ENDARG
1327
- result = lexer.lineno
1328
1336
  }
1329
1337
  rparen
1330
1338
  {
1331
- _, line, _ = val
1339
+ (_, line), _, _ = val
1332
1340
  result = s(:begin).line line
1333
1341
  }
1334
1342
  | tLPAREN_ARG
@@ -1344,9 +1352,8 @@ rule
1344
1352
  }
1345
1353
  | tLPAREN compstmt tRPAREN
1346
1354
  {
1347
- _, stmt, _ = val
1348
- result = stmt
1349
- result ||= s(:nil).line lexer.lineno
1355
+ (_, line), stmt, _ = val
1356
+ result = stmt || s(:nil).line(line)
1350
1357
  result.paren = true
1351
1358
  }
1352
1359
  | primary_value tCOLON2 tCONSTANT
@@ -1359,12 +1366,14 @@ rule
1359
1366
  {
1360
1367
  result = wrap :colon3, val[1]
1361
1368
  }
1362
- | tLBRACK { result = lexer.lineno } aref_args tRBRACK
1369
+ | tLBRACK aref_args rbracket
1363
1370
  {
1364
- _, line, args, _ = val
1371
+ (_, line), args, (_, line_max) = val
1372
+
1365
1373
  result = args || s(:array)
1366
1374
  result.sexp_type = :array # aref_args is :args
1367
1375
  result.line line
1376
+ result.line_max = line_max
1368
1377
  }
1369
1378
  | tLBRACE
1370
1379
  {
@@ -1475,9 +1484,6 @@ rule
1475
1484
  result = new_for iter, var, body
1476
1485
  }
1477
1486
  | k_class
1478
- {
1479
- result = self.lexer.lineno
1480
- }
1481
1487
  cpath superclass
1482
1488
  {
1483
1489
  if (self.in_def || self.in_single > 0) then
@@ -1492,9 +1498,6 @@ rule
1492
1498
  self.lexer.ignore_body_comments
1493
1499
  }
1494
1500
  | k_class tLSHFT
1495
- {
1496
- result = self.lexer.lineno
1497
- }
1498
1501
  expr
1499
1502
  {
1500
1503
  result = self.in_def
@@ -1506,16 +1509,14 @@ rule
1506
1509
  self.in_single = 0
1507
1510
  self.env.extend
1508
1511
  }
1509
- bodystmt k_end
1512
+ bodystmt
1513
+ k_end
1510
1514
  {
1511
1515
  result = new_sclass val
1512
1516
  self.env.unextend
1513
1517
  self.lexer.ignore_body_comments
1514
1518
  }
1515
1519
  | k_module
1516
- {
1517
- result = self.lexer.lineno
1518
- }
1519
1520
  cpath
1520
1521
  {
1521
1522
  yyerror "module definition in method body" if
@@ -1657,20 +1658,33 @@ rule
1657
1658
  }
1658
1659
 
1659
1660
  f_marg: f_norm_arg
1661
+ {
1662
+ (sym, line), = val
1663
+
1664
+ result = s(:dummy, sym).line line
1665
+ }
1660
1666
  | tLPAREN f_margs rparen
1661
1667
  {
1662
- result = val[1]
1668
+ _, args, _ = val
1669
+ result = args
1663
1670
  }
1664
1671
 
1665
1672
  f_marg_list: f_marg
1666
1673
  {
1667
- sym, = val
1674
+ arg, = val
1675
+ line = arg.line
1668
1676
 
1669
- result = s(:array, sym).line lexer.lineno
1677
+ arg = arg.last if arg.sexp_type == :dummy
1678
+
1679
+ result = s(:array, arg).line line
1670
1680
  }
1671
1681
  | f_marg_list tCOMMA f_marg
1672
1682
  {
1673
- result = list_append val[0], val[2]
1683
+ args, _, arg = val
1684
+
1685
+ arg = arg.last if arg.sexp_type == :dummy
1686
+
1687
+ result = list_append args, arg
1674
1688
  }
1675
1689
 
1676
1690
  f_margs: f_marg_list
@@ -1713,8 +1727,8 @@ rule
1713
1727
  }
1714
1728
  | tSTAR
1715
1729
  {
1716
- result = args [:*]
1717
- result.line lexer.lineno # FIX: tSTAR -> line
1730
+ (_, line), = val
1731
+ result = args([:*]).line line
1718
1732
  }
1719
1733
 
1720
1734
  f_any_kwrest: f_kwrest
@@ -1827,7 +1841,9 @@ opt_block_args_tail: tCOMMA block_args_tail
1827
1841
  }
1828
1842
  | tOROP
1829
1843
  {
1830
- result = s(:args).line lexer.lineno
1844
+ (_, line), = val
1845
+
1846
+ result = s(:args).line line
1831
1847
  }
1832
1848
  | tPIPE block_param opt_bv_decl tPIPE
1833
1849
  {
@@ -1859,7 +1875,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1859
1875
  lambda: tLAMBDA
1860
1876
  {
1861
1877
  self.env.extend :dynamic
1862
- result = [lexer.lineno, lexer.lpar_beg]
1878
+ result = lexer.lpar_beg
1863
1879
  lexer.paren_nest += 1
1864
1880
  lexer.lpar_beg = lexer.paren_nest
1865
1881
  }
@@ -1869,7 +1885,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1869
1885
  }
1870
1886
  lambda_body
1871
1887
  {
1872
- _, (line, lpar), args, _cmdarg, body = val
1888
+ (_, line), lpar, args, _cmdarg, body = val
1873
1889
  lexer.lpar_beg = lpar
1874
1890
 
1875
1891
  lexer.cmdarg.pop
@@ -1953,13 +1969,19 @@ opt_block_args_tail: tCOMMA block_args_tail
1953
1969
  {
1954
1970
  call, args = val
1955
1971
 
1956
- result = call.concat args.sexp_body if args
1972
+ result = call
1973
+
1974
+ if args then
1975
+ call.concat args.sexp_body
1976
+ result.line_max = args.line_max
1977
+ end
1957
1978
  }
1958
1979
  | primary_value call_op operation2 opt_paren_args
1959
1980
  {
1960
- recv, call_op, (op, _line), args = val
1981
+ recv, call_op, (op, op_line), args = val
1961
1982
 
1962
1983
  result = new_call recv, op.to_sym, args, call_op
1984
+ result.line_max = op_line unless args
1963
1985
  }
1964
1986
  | primary_value tCOLON2 operation2 paren_args
1965
1987
  {
@@ -1987,7 +2009,8 @@ opt_block_args_tail: tCOMMA block_args_tail
1987
2009
  }
1988
2010
  | kSUPER
1989
2011
  {
1990
- result = s(:zsuper).line lexer.lineno
2012
+ (_, line), = val
2013
+ result = s(:zsuper).line line
1991
2014
  }
1992
2015
  | primary_value tLBRACK2 opt_call_args rbracket
1993
2016
  {
@@ -1997,11 +2020,11 @@ opt_block_args_tail: tCOMMA block_args_tail
1997
2020
  brace_block: tLCURLY
1998
2021
  {
1999
2022
  self.env.extend :dynamic
2000
- result = self.lexer.lineno
2001
2023
  }
2002
- brace_body tRCURLY
2024
+ brace_body
2025
+ tRCURLY
2003
2026
  {
2004
- _, line, body, _ = val
2027
+ (_, line), _, body, _ = val
2005
2028
 
2006
2029
  result = body
2007
2030
  result.line line
@@ -2011,11 +2034,11 @@ opt_block_args_tail: tCOMMA block_args_tail
2011
2034
  | k_do
2012
2035
  {
2013
2036
  self.env.extend :dynamic
2014
- result = self.lexer.lineno
2015
2037
  }
2016
- do_body kEND
2038
+ do_body
2039
+ kEND
2017
2040
  {
2018
- _, line, body, _ = val
2041
+ (_, line), _, body, _ = val
2019
2042
 
2020
2043
  result = body
2021
2044
  result.line line
@@ -2073,14 +2096,13 @@ opt_block_args_tail: tCOMMA block_args_tail
2073
2096
  }
2074
2097
 
2075
2098
  case_body: k_when
2076
- {
2077
- result = self.lexer.lineno
2078
- }
2079
2099
  case_args then compstmt cases
2080
2100
  {
2081
- result = new_when(val[2], val[4])
2082
- result.line val[1]
2083
- result << val[5] if val[5]
2101
+ (_, line), case_args, _then, body, cases = val
2102
+
2103
+ result = new_when case_args, body
2104
+ result.line line
2105
+ result << cases if cases
2084
2106
  }
2085
2107
 
2086
2108
  cases: opt_else | case_body
@@ -2317,31 +2339,17 @@ opt_block_args_tail: tCOMMA block_args_tail
2317
2339
  result = new_array_pattern_tail both, nil, nil, nil
2318
2340
  result.line head.line
2319
2341
  }
2320
- | p_args_head tSTAR tIDENTIFIER
2321
- {
2322
- head, _, (id, _line) = val
2323
-
2324
- result = new_array_pattern_tail head, true, id.to_sym, nil
2325
- result.line head.line
2326
- }
2327
- | p_args_head tSTAR tIDENTIFIER tCOMMA p_args_post
2342
+ | p_args_head p_rest
2328
2343
  {
2329
- head, _, (id, _line), _, post = val
2344
+ head, (rest, _) = val
2330
2345
 
2331
- result = new_array_pattern_tail head, true, id.to_sym, post
2332
- result.line head.line
2346
+ result = new_array_pattern_tail(head, true, rest, nil).line head.line
2333
2347
  }
2334
- | p_args_head tSTAR
2348
+ | p_args_head p_rest tCOMMA p_args_post
2335
2349
  {
2336
- expr, _ = val
2337
-
2338
- result = new_array_pattern_tail(expr, true, nil, nil).line expr.line
2339
- }
2340
- | p_args_head tSTAR tCOMMA p_args_post
2341
- {
2342
- head, _, _, post = val
2350
+ head, (rest, _), _, post = val
2343
2351
 
2344
- result = new_array_pattern_tail(head, true, nil, post).line head.line
2352
+ result = new_array_pattern_tail(head, true, rest, post).line head.line
2345
2353
  }
2346
2354
  | p_args_tail
2347
2355
 
@@ -2716,15 +2724,17 @@ opt_block_args_tail: tCOMMA block_args_tail
2716
2724
 
2717
2725
  words: tWORDS_BEG tSPACE tSTRING_END
2718
2726
  {
2719
- (_, line), _, _ = val
2727
+ (_, line), _, (_, line_max) = val
2720
2728
 
2721
2729
  result = s(:array).line line
2730
+ result.line_max = line_max
2722
2731
  }
2723
2732
  | tWORDS_BEG word_list tSTRING_END
2724
2733
  {
2725
- (_, line), list, _ = val
2734
+ (_, line), list, (_, line_max) = val
2726
2735
 
2727
2736
  result = list.line line
2737
+ result.line_max = line_max
2728
2738
  }
2729
2739
 
2730
2740
  word_list: none
@@ -2744,15 +2754,17 @@ opt_block_args_tail: tCOMMA block_args_tail
2744
2754
 
2745
2755
  symbols: tSYMBOLS_BEG tSPACE tSTRING_END
2746
2756
  {
2747
- (_, line), _, _ = val
2757
+ (_, line), _, (_, line_max) = val
2748
2758
 
2749
2759
  result = s(:array).line line
2760
+ result.line_max = line_max
2750
2761
  }
2751
2762
  | tSYMBOLS_BEG symbol_list tSTRING_END
2752
2763
  {
2753
- (_, line), list, _, = val
2754
- list.line line
2755
- result = list
2764
+ (_, line), list, (_, line_max), = val
2765
+
2766
+ result = list.line line
2767
+ result.line_max = line_max
2756
2768
  }
2757
2769
 
2758
2770
  symbol_list: none
@@ -2767,28 +2779,32 @@ opt_block_args_tail: tCOMMA block_args_tail
2767
2779
 
2768
2780
  qwords: tQWORDS_BEG tSPACE tSTRING_END
2769
2781
  {
2770
- (_, line), _, _ = val
2782
+ (_, line), _, (_, line_max) = val
2771
2783
 
2772
2784
  result = s(:array).line line
2785
+ result.line_max = line_max
2773
2786
  }
2774
2787
  | tQWORDS_BEG qword_list tSTRING_END
2775
2788
  {
2776
- (_, line), list, _ = val
2789
+ (_, line), list, (_, line_max) = val
2777
2790
 
2778
2791
  result = list.line line
2792
+ result.line_max = line_max
2779
2793
  }
2780
2794
 
2781
2795
  qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END
2782
2796
  {
2783
- (_, line), _, _ = val
2797
+ (_, line), _, (_, line_max) = val
2784
2798
 
2785
2799
  result = s(:array).line line
2800
+ result.line_max = line_max
2786
2801
  }
2787
2802
  | tQSYMBOLS_BEG qsym_list tSTRING_END
2788
2803
  {
2789
- (_, line), list, _ = val
2804
+ (_, line), list, (_, line_max) = val
2790
2805
 
2791
2806
  result = list.line line
2807
+ result.line_max = line_max
2792
2808
  }
2793
2809
 
2794
2810
  qword_list: none
@@ -2863,7 +2879,6 @@ regexp_contents: none
2863
2879
  lexer.brace_nest,
2864
2880
  lexer.string_nest, # TODO: remove
2865
2881
  lexer.lex_state,
2866
- lexer.lineno,
2867
2882
  ]
2868
2883
 
2869
2884
  lexer.cmdarg.push false
@@ -2878,9 +2893,9 @@ regexp_contents: none
2878
2893
  compstmt
2879
2894
  tSTRING_DEND
2880
2895
  {
2881
- _, memo, stmt, _ = val
2896
+ (_, line), memo, stmt, _ = val
2882
2897
 
2883
- lex_strterm, brace_nest, string_nest, oldlex_state, line = memo
2898
+ lex_strterm, brace_nest, string_nest, oldlex_state = memo
2884
2899
  # TODO: heredoc_indent
2885
2900
 
2886
2901
  lexer.lex_strterm = lex_strterm
@@ -2940,11 +2955,11 @@ regexp_contents: none
2940
2955
 
2941
2956
  dsym: tSYMBEG string_contents tSTRING_END
2942
2957
  {
2943
- _, result, _ = val
2958
+ (_, line), result, _ = val
2944
2959
 
2945
2960
  lexer.lex_state = EXPR_END
2946
2961
 
2947
- result ||= s(:str, "").line lexer.lineno
2962
+ result ||= s(:str, "").line line
2948
2963
 
2949
2964
  case result.sexp_type
2950
2965
  when :dstr then
@@ -2980,15 +2995,15 @@ regexp_contents: none
2980
2995
  | tCONSTANT
2981
2996
  | tCVAR
2982
2997
 
2983
- keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2984
- | kSELF { result = s(:self).line lexer.lineno }
2985
- | kTRUE { result = s(:true).line lexer.lineno }
2986
- | kFALSE { result = s(:false).line lexer.lineno }
2987
- | k__FILE__ { result = s(:str, self.file).line lexer.lineno }
2988
- | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno }
2998
+ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
2999
+ | kSELF { (_, line), = val; result = s(:self).line line }
3000
+ | kTRUE { (_, line), = val; result = s(:true).line line }
3001
+ | kFALSE { (_, line), = val; result = s(:false).line line }
3002
+ | k__FILE__ { (_, line), = val; result = s(:str, self.file).line line }
3003
+ | k__LINE__ { (_, line), = val; result = s(:lit, line).line line }
2989
3004
  | k__ENCODING__
2990
3005
  {
2991
- l = lexer.lineno
3006
+ (_, l), = val
2992
3007
  result =
2993
3008
  if defined? Encoding then
2994
3009
  s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
@@ -3151,12 +3166,12 @@ f_opt_paren_args: f_paren_args
3151
3166
  |
3152
3167
  {
3153
3168
  result = args val
3154
- # result.line lexer.lineno
3155
3169
  }
3156
3170
 
3157
3171
  args_forward: tBDOT3
3158
3172
  {
3159
- result = s(:forward_args).line lexer.lineno
3173
+ (_, line), = val
3174
+ result = s(:forward_args).line line
3160
3175
  }
3161
3176
 
3162
3177
  f_bad_arg: tCONSTANT
@@ -3210,7 +3225,14 @@ f_opt_paren_args: f_paren_args
3210
3225
  result = s(:args, list).line list.line
3211
3226
  end
3212
3227
 
3213
- result << (Sexp === item ? item : item.first)
3228
+ if Sexp === item then
3229
+ line_max = item.line_max
3230
+ else
3231
+ item, line_max = item
3232
+ end
3233
+
3234
+ result << item
3235
+ result.line_max = line_max
3214
3236
  }
3215
3237
 
3216
3238
  f_label: tLABEL
@@ -3287,9 +3309,10 @@ f_opt_paren_args: f_paren_args
3287
3309
  }
3288
3310
  | kwrest_mark
3289
3311
  {
3312
+ (_, line), = val
3290
3313
  id = :"**"
3291
- self.env[id] = :lvar # TODO: needed?!?
3292
- result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
3314
+ self.env[id] = :lvar
3315
+ result = [id, line]
3293
3316
  }
3294
3317
 
3295
3318
  f_opt: f_arg_asgn
@@ -3347,9 +3370,10 @@ f_opt_paren_args: f_paren_args
3347
3370
  }
3348
3371
  | restarg_mark
3349
3372
  {
3373
+ (_, line), = val
3350
3374
  name = :"*"
3351
3375
  self.env[name] = :lvar
3352
- result = [name, lexer.lineno] # FIX: tSTAR to include lineno
3376
+ result = [name, line]
3353
3377
  }
3354
3378
 
3355
3379
  blkarg_mark: tAMPER2 | tAMPER
@@ -3440,6 +3464,11 @@ f_opt_paren_args: f_paren_args
3440
3464
  line = arg.line
3441
3465
  result = s(:array, s(:kwsplat, arg).line(line)).line line
3442
3466
  }
3467
+ | tDSTAR
3468
+ {
3469
+ (_, line), = val
3470
+ result = s(:array, s(:kwsplat).line(line)).line line
3471
+ }
3443
3472
 
3444
3473
  operation: tIDENTIFIER | tCONSTANT | tFID
3445
3474
  operation2: tIDENTIFIER | tCONSTANT | tFID | op
@@ -3454,11 +3483,10 @@ f_opt_paren_args: f_paren_args
3454
3483
  opt_terms: | terms
3455
3484
  opt_nl: | tNL
3456
3485
  rparen: opt_nl tRPAREN
3457
- # TODO:
3458
- # {
3459
- # _, close = val
3460
- # result = [close, lexer.lineno]
3461
- # }
3486
+ {
3487
+ _, close = val # TODO: include lineno in close?
3488
+ result = [close, lexer.lineno]
3489
+ }
3462
3490
  rbracket: opt_nl tRBRACK
3463
3491
  {
3464
3492
  _, close = val