ruby_parser 3.20.1 → 3.20.3

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ruby30_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
 
@@ -392,6 +392,7 @@ rule
392
392
  defs_head: k_def singleton dot_or_colon
393
393
  {
394
394
  lexer.lex_state = EXPR_FNAME
395
+ self.in_argdef = true
395
396
  }
396
397
  def_name
397
398
  {
@@ -605,7 +606,7 @@ rule
605
606
  }
606
607
  | tSTAR
607
608
  {
608
- l = lexer.lineno
609
+ (_, l), = val
609
610
  result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l
610
611
  }
611
612
  | tSTAR tCOMMA mlhs_post
@@ -1230,7 +1231,7 @@ rule
1230
1231
  args: arg_value
1231
1232
  {
1232
1233
  arg, = val
1233
- lineno = arg.line || lexer.lineno # HACK
1234
+ lineno = arg.line
1234
1235
 
1235
1236
  result = s(:array, arg).line lineno
1236
1237
  }
@@ -1246,9 +1247,7 @@ rule
1246
1247
  }
1247
1248
  | args tCOMMA tSTAR arg_value
1248
1249
  {
1249
- # TODO: the line number from tSTAR has been dropped
1250
- args, _, _, id = val
1251
- line = lexer.lineno
1250
+ args, _, (_, line), id = val
1252
1251
  result = self.list_append args, s(:splat, id).line(line)
1253
1252
  }
1254
1253
 
@@ -1267,7 +1266,6 @@ rule
1267
1266
  }
1268
1267
  | args tCOMMA tSTAR arg_value
1269
1268
  {
1270
- # TODO: make all tXXXX terminals include lexer.lineno
1271
1269
  arg, _, _, splat = val
1272
1270
  result = self.arg_concat arg, splat
1273
1271
  }
@@ -1296,7 +1294,6 @@ rule
1296
1294
  | k_begin
1297
1295
  {
1298
1296
  lexer.cmdarg.push false
1299
- result = self.lexer.lineno
1300
1297
  }
1301
1298
  bodystmt k_end
1302
1299
  {
@@ -1306,11 +1303,10 @@ rule
1306
1303
  | tLPAREN_ARG
1307
1304
  {
1308
1305
  lexer.lex_state = EXPR_ENDARG
1309
- result = lexer.lineno
1310
1306
  }
1311
1307
  rparen
1312
1308
  {
1313
- _, line, _ = val
1309
+ (_, line), _, _ = val
1314
1310
  result = s(:begin).line line
1315
1311
  }
1316
1312
  | tLPAREN_ARG
@@ -1326,9 +1322,8 @@ rule
1326
1322
  }
1327
1323
  | tLPAREN compstmt tRPAREN
1328
1324
  {
1329
- _, stmt, _ = val
1330
- result = stmt
1331
- result ||= s(:nil).line lexer.lineno
1325
+ (_, line), stmt, _ = val
1326
+ result = stmt || s(:nil).line(line)
1332
1327
  result.paren = true
1333
1328
  }
1334
1329
  | primary_value tCOLON2 tCONSTANT
@@ -1341,9 +1336,9 @@ rule
1341
1336
  {
1342
1337
  result = wrap :colon3, val[1]
1343
1338
  }
1344
- | tLBRACK { result = lexer.lineno } aref_args rbracket
1339
+ | tLBRACK aref_args rbracket
1345
1340
  {
1346
- _, line, args, (_, line_max) = val
1341
+ (_, line), args, (_, line_max) = val
1347
1342
 
1348
1343
  result = args || s(:array)
1349
1344
  result.sexp_type = :array # aref_args is :args
@@ -1459,9 +1454,6 @@ rule
1459
1454
  result = new_for iter, var, body
1460
1455
  }
1461
1456
  | k_class
1462
- {
1463
- result = self.lexer.lineno
1464
- }
1465
1457
  cpath superclass
1466
1458
  {
1467
1459
  if (self.in_def || self.in_single > 0) then
@@ -1476,9 +1468,6 @@ rule
1476
1468
  self.lexer.ignore_body_comments
1477
1469
  }
1478
1470
  | k_class tLSHFT
1479
- {
1480
- result = self.lexer.lineno
1481
- }
1482
1471
  expr
1483
1472
  {
1484
1473
  result = self.in_def
@@ -1490,16 +1479,14 @@ rule
1490
1479
  self.in_single = 0
1491
1480
  self.env.extend
1492
1481
  }
1493
- bodystmt k_end
1482
+ bodystmt
1483
+ k_end
1494
1484
  {
1495
1485
  result = new_sclass val
1496
1486
  self.env.unextend
1497
1487
  self.lexer.ignore_body_comments
1498
1488
  }
1499
1489
  | k_module
1500
- {
1501
- result = self.lexer.lineno
1502
- }
1503
1490
  cpath
1504
1491
  {
1505
1492
  yyerror "module definition in method body" if
@@ -1602,6 +1589,7 @@ rule
1602
1589
  k_def: kDEF
1603
1590
  {
1604
1591
  self.comments.push self.lexer.comments
1592
+ self.in_argdef = true
1605
1593
  }
1606
1594
  k_do: kDO
1607
1595
  k_do_block: kDO_BLOCK
@@ -1641,20 +1629,33 @@ rule
1641
1629
  }
1642
1630
 
1643
1631
  f_marg: f_norm_arg
1632
+ {
1633
+ (sym, line), = val
1634
+
1635
+ result = s(:dummy, sym).line line
1636
+ }
1644
1637
  | tLPAREN f_margs rparen
1645
1638
  {
1646
- result = val[1]
1639
+ _, args, _ = val
1640
+ result = args
1647
1641
  }
1648
1642
 
1649
1643
  f_marg_list: f_marg
1650
1644
  {
1651
- sym, = val
1645
+ arg, = val
1646
+ line = arg.line
1647
+
1648
+ arg = arg.last if arg.sexp_type == :dummy
1652
1649
 
1653
- result = s(:array, sym).line lexer.lineno
1650
+ result = s(:array, arg).line line
1654
1651
  }
1655
1652
  | f_marg_list tCOMMA f_marg
1656
1653
  {
1657
- result = list_append val[0], val[2]
1654
+ args, _, arg = val
1655
+
1656
+ arg = arg.last if arg.sexp_type == :dummy
1657
+
1658
+ result = list_append args, arg
1658
1659
  }
1659
1660
 
1660
1661
  f_margs: f_marg_list
@@ -1697,8 +1698,8 @@ rule
1697
1698
  }
1698
1699
  | tSTAR
1699
1700
  {
1700
- result = args [:*]
1701
- result.line lexer.lineno # FIX: tSTAR -> line
1701
+ (_, line), = val
1702
+ result = args([:*]).line line
1702
1703
  }
1703
1704
 
1704
1705
  f_any_kwrest: f_kwrest
@@ -1807,15 +1808,19 @@ opt_block_args_tail: tCOMMA block_args_tail
1807
1808
  {
1808
1809
  # TODO: current_arg = 0
1809
1810
  result = args val
1811
+ self.in_argdef = false
1810
1812
  }
1811
1813
  | tOROP
1812
1814
  {
1813
- result = s(:args).line lexer.lineno
1815
+ (_, line), = val
1816
+
1817
+ result = s(:args).line line
1814
1818
  }
1815
1819
  | tPIPE block_param opt_bv_decl tPIPE
1816
1820
  {
1817
1821
  # TODO: current_arg = 0
1818
1822
  result = args val
1823
+ self.in_argdef = false
1819
1824
  }
1820
1825
 
1821
1826
  opt_bv_decl: opt_nl
@@ -1842,7 +1847,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1842
1847
  lambda: tLAMBDA
1843
1848
  {
1844
1849
  self.env.extend :dynamic
1845
- result = [lexer.lineno, lexer.lpar_beg]
1850
+ result = lexer.lpar_beg
1846
1851
  lexer.paren_nest += 1
1847
1852
  lexer.lpar_beg = lexer.paren_nest
1848
1853
  }
@@ -1852,7 +1857,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1852
1857
  }
1853
1858
  lambda_body
1854
1859
  {
1855
- _, (line, lpar), args, _cmdarg, body = val
1860
+ (_, line), lpar, args, _cmdarg, body = val
1856
1861
  lexer.lpar_beg = lpar
1857
1862
 
1858
1863
  lexer.cmdarg.pop
@@ -1865,10 +1870,12 @@ opt_block_args_tail: tCOMMA block_args_tail
1865
1870
 
1866
1871
  f_larglist: tLPAREN2 f_args opt_bv_decl rparen
1867
1872
  {
1873
+ self.in_argdef = false
1868
1874
  result = args val
1869
1875
  }
1870
1876
  | f_args
1871
1877
  {
1878
+ self.in_argdef = false
1872
1879
  result = val[0]
1873
1880
  result = 0 if result == s(:args)
1874
1881
  }
@@ -1976,7 +1983,8 @@ opt_block_args_tail: tCOMMA block_args_tail
1976
1983
  }
1977
1984
  | kSUPER
1978
1985
  {
1979
- result = s(:zsuper).line lexer.lineno
1986
+ (_, line), = val
1987
+ result = s(:zsuper).line line
1980
1988
  }
1981
1989
  | primary_value tLBRACK2 opt_call_args rbracket
1982
1990
  {
@@ -1986,11 +1994,11 @@ opt_block_args_tail: tCOMMA block_args_tail
1986
1994
  brace_block: tLCURLY
1987
1995
  {
1988
1996
  self.env.extend :dynamic
1989
- result = self.lexer.lineno
1990
1997
  }
1991
- brace_body tRCURLY
1998
+ brace_body
1999
+ tRCURLY
1992
2000
  {
1993
- _, line, body, _ = val
2001
+ (_, line), _, body, _ = val
1994
2002
 
1995
2003
  result = body
1996
2004
  result.line line
@@ -2000,11 +2008,11 @@ opt_block_args_tail: tCOMMA block_args_tail
2000
2008
  | k_do
2001
2009
  {
2002
2010
  self.env.extend :dynamic
2003
- result = self.lexer.lineno
2004
2011
  }
2005
- do_body kEND
2012
+ do_body
2013
+ kEND
2006
2014
  {
2007
- _, line, body, _ = val
2015
+ (_, line), _, body, _ = val
2008
2016
 
2009
2017
  result = body
2010
2018
  result.line line
@@ -2062,14 +2070,13 @@ opt_block_args_tail: tCOMMA block_args_tail
2062
2070
  }
2063
2071
 
2064
2072
  case_body: k_when
2065
- {
2066
- result = self.lexer.lineno
2067
- }
2068
2073
  case_args then compstmt cases
2069
2074
  {
2070
- result = new_when(val[2], val[4])
2071
- result.line val[1]
2072
- result << val[5] if val[5]
2075
+ (_, line), case_args, _then, body, cases = val
2076
+
2077
+ result = new_when case_args, body
2078
+ result.line line
2079
+ result << cases if cases
2073
2080
  }
2074
2081
 
2075
2082
  cases: opt_else | case_body
@@ -2844,7 +2851,6 @@ regexp_contents: none
2844
2851
  lexer.brace_nest,
2845
2852
  lexer.string_nest, # TODO: remove
2846
2853
  lexer.lex_state,
2847
- lexer.lineno,
2848
2854
  ]
2849
2855
 
2850
2856
  lexer.cmdarg.push false
@@ -2859,9 +2865,9 @@ regexp_contents: none
2859
2865
  compstmt
2860
2866
  tSTRING_DEND
2861
2867
  {
2862
- _, memo, stmt, _ = val
2868
+ (_, line), memo, stmt, _ = val
2863
2869
 
2864
- lex_strterm, brace_nest, string_nest, oldlex_state, line = memo
2870
+ lex_strterm, brace_nest, string_nest, oldlex_state = memo
2865
2871
  # TODO: heredoc_indent
2866
2872
 
2867
2873
  lexer.lex_strterm = lex_strterm
@@ -2921,11 +2927,11 @@ regexp_contents: none
2921
2927
 
2922
2928
  dsym: tSYMBEG string_contents tSTRING_END
2923
2929
  {
2924
- _, result, _ = val
2930
+ (_, line), result, _ = val
2925
2931
 
2926
2932
  lexer.lex_state = EXPR_END
2927
2933
 
2928
- result ||= s(:str, "").line lexer.lineno
2934
+ result ||= s(:str, "").line line
2929
2935
 
2930
2936
  case result.sexp_type
2931
2937
  when :dstr then
@@ -2958,15 +2964,15 @@ regexp_contents: none
2958
2964
  | tCONSTANT
2959
2965
  | tCVAR
2960
2966
 
2961
- keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
2962
- | kSELF { result = s(:self).line lexer.lineno }
2963
- | kTRUE { result = s(:true).line lexer.lineno }
2964
- | kFALSE { result = s(:false).line lexer.lineno }
2965
- | k__FILE__ { result = s(:str, self.file).line lexer.lineno }
2966
- | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno }
2967
+ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
2968
+ | kSELF { (_, line), = val; result = s(:self).line line }
2969
+ | kTRUE { (_, line), = val; result = s(:true).line line }
2970
+ | kFALSE { (_, line), = val; result = s(:false).line line }
2971
+ | k__FILE__ { (_, line), = val; result = s(:str, self.file).line line }
2972
+ | k__LINE__ { (_, line), = val; result = s(:lit, line).line line }
2967
2973
  | k__ENCODING__
2968
2974
  {
2969
- l = lexer.lineno
2975
+ (_, l), = val
2970
2976
  result =
2971
2977
  if defined? Encoding then
2972
2978
  s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
@@ -3027,11 +3033,13 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
3027
3033
  f_opt_paren_args: f_paren_args
3028
3034
  | none
3029
3035
  {
3036
+ self.in_argdef = false
3030
3037
  result = end_args val
3031
3038
  }
3032
3039
 
3033
3040
  f_paren_args: tLPAREN2 f_args rparen
3034
3041
  {
3042
+ self.in_argdef = false
3035
3043
  result = end_args val
3036
3044
  }
3037
3045
  | tLPAREN2 f_arg tCOMMA args_forward rparen
@@ -3047,10 +3055,12 @@ f_opt_paren_args: f_paren_args
3047
3055
  | {
3048
3056
  result = self.in_kwarg
3049
3057
  self.in_kwarg = true
3058
+ self.in_argdef = true
3050
3059
  self.lexer.lex_state |= EXPR_LABEL
3051
3060
  }
3052
3061
  f_args term
3053
3062
  {
3063
+ self.in_argdef = false
3054
3064
  result = end_args val
3055
3065
  }
3056
3066
 
@@ -3136,12 +3146,12 @@ f_opt_paren_args: f_paren_args
3136
3146
  |
3137
3147
  {
3138
3148
  result = args val
3139
- # result.line lexer.lineno
3140
3149
  }
3141
3150
 
3142
3151
  args_forward: tBDOT3
3143
3152
  {
3144
- result = s(:forward_args).line lexer.lineno
3153
+ (_, line), = val
3154
+ result = s(:forward_args).line line
3145
3155
  }
3146
3156
 
3147
3157
  f_bad_arg: tCONSTANT
@@ -3206,6 +3216,14 @@ f_opt_paren_args: f_paren_args
3206
3216
  }
3207
3217
 
3208
3218
  f_label: tLABEL
3219
+ {
3220
+ label, = val
3221
+ # arg_var(p, formal_argument(p, $1));
3222
+ # p->cur_arg = get_id($1);
3223
+ # p->max_numparam = ORDINAL_PARAM;
3224
+ self.in_argdef = false
3225
+ result = label
3226
+ }
3209
3227
 
3210
3228
  f_kw: f_label arg_value
3211
3229
  {
@@ -3214,6 +3232,7 @@ f_opt_paren_args: f_paren_args
3214
3232
 
3215
3233
  identifier = label.to_sym
3216
3234
  self.env[identifier] = :lvar
3235
+ self.in_argdef = true
3217
3236
 
3218
3237
  kwarg = s(:kwarg, identifier, arg).line line
3219
3238
  result = s(:array, kwarg).line line
@@ -3224,6 +3243,7 @@ f_opt_paren_args: f_paren_args
3224
3243
 
3225
3244
  id = label.to_sym
3226
3245
  self.env[id] = :lvar
3246
+ self.in_argdef = true
3227
3247
 
3228
3248
  result = s(:array, s(:kwarg, id).line(line)).line line
3229
3249
  }
@@ -3234,6 +3254,7 @@ f_opt_paren_args: f_paren_args
3234
3254
  (label, line), expr = val
3235
3255
  id = label.to_sym
3236
3256
  self.env[id] = :lvar
3257
+ self.in_argdef = true
3237
3258
 
3238
3259
  result = s(:array, s(:kwarg, id, expr).line(line)).line line
3239
3260
  }
@@ -3243,6 +3264,7 @@ f_opt_paren_args: f_paren_args
3243
3264
  (label, line), = val
3244
3265
  id = label.to_sym
3245
3266
  self.env[id] = :lvar
3267
+ self.in_argdef = true
3246
3268
 
3247
3269
  result = s(:array, s(:kwarg, id).line(line)).line line
3248
3270
  }
@@ -3279,9 +3301,10 @@ f_opt_paren_args: f_paren_args
3279
3301
  }
3280
3302
  | kwrest_mark
3281
3303
  {
3304
+ (_, line), = val
3282
3305
  id = :"**"
3283
- self.env[id] = :lvar # TODO: needed?!?
3284
- result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
3306
+ self.env[id] = :lvar
3307
+ result = [id, line]
3285
3308
  }
3286
3309
 
3287
3310
  f_opt: f_arg_asgn
@@ -3289,10 +3312,10 @@ f_opt_paren_args: f_paren_args
3289
3312
  arg_value
3290
3313
  {
3291
3314
  lhs, _, rhs = val
3315
+ self.in_argdef = true
3292
3316
  result = self.assignable lhs, rhs
3293
3317
  # TODO: detect duplicate names
3294
3318
  # TODO? p->cur_arg = 0;
3295
- # TODO? p->ctxt.in_argdef = 1;
3296
3319
  }
3297
3320
 
3298
3321
  f_block_opt: f_arg_asgn
@@ -3300,9 +3323,9 @@ f_opt_paren_args: f_paren_args
3300
3323
  primary_value
3301
3324
  {
3302
3325
  lhs, _, rhs = val
3326
+ self.in_argdef = true
3303
3327
  result = self.assignable lhs, rhs
3304
3328
  # TODO? p->cur_arg = 0;
3305
- # TODO? p->ctxt.in_argdef = 1;
3306
3329
  }
3307
3330
 
3308
3331
  f_block_optarg: f_block_opt
@@ -3339,9 +3362,10 @@ f_opt_paren_args: f_paren_args
3339
3362
  }
3340
3363
  | restarg_mark
3341
3364
  {
3365
+ (_, line), = val
3342
3366
  name = :"*"
3343
3367
  self.env[name] = :lvar
3344
- result = [name, lexer.lineno] # FIX: tSTAR to include lineno
3368
+ result = [name, line]
3345
3369
  }
3346
3370
 
3347
3371
  blkarg_mark: tAMPER2 | tAMPER
@@ -3446,11 +3470,10 @@ f_opt_paren_args: f_paren_args
3446
3470
  opt_terms: | terms
3447
3471
  opt_nl: | tNL
3448
3472
  rparen: opt_nl tRPAREN
3449
- # TODO:
3450
- # {
3451
- # _, close = val
3452
- # result = [close, lexer.lineno]
3453
- # }
3473
+ {
3474
+ _, close = val # TODO: include lineno in close?
3475
+ result = [close, lexer.lineno]
3476
+ }
3454
3477
  rbracket: opt_nl tRBRACK
3455
3478
  {
3456
3479
  _, close = val