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/ruby31_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
 
@@ -408,6 +408,7 @@ rule
408
408
  defs_head: k_def singleton dot_or_colon
409
409
  {
410
410
  lexer.lex_state = EXPR_FNAME
411
+ self.in_argdef = true
411
412
  }
412
413
  def_name
413
414
  {
@@ -621,7 +622,7 @@ rule
621
622
  }
622
623
  | tSTAR
623
624
  {
624
- l = lexer.lineno
625
+ (_, l), = val
625
626
  result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l
626
627
  }
627
628
  | tSTAR tCOMMA mlhs_post
@@ -1251,7 +1252,7 @@ rule
1251
1252
  args: arg_value
1252
1253
  {
1253
1254
  arg, = val
1254
- lineno = arg.line || lexer.lineno # HACK
1255
+ lineno = arg.line
1255
1256
 
1256
1257
  result = s(:array, arg).line lineno
1257
1258
  }
@@ -1267,9 +1268,7 @@ rule
1267
1268
  }
1268
1269
  | args tCOMMA tSTAR arg_value
1269
1270
  {
1270
- # TODO: the line number from tSTAR has been dropped
1271
- args, _, _, id = val
1272
- line = lexer.lineno
1271
+ args, _, (_, line), id = val
1273
1272
  result = self.list_append args, s(:splat, id).line(line)
1274
1273
  }
1275
1274
 
@@ -1288,7 +1287,6 @@ rule
1288
1287
  }
1289
1288
  | args tCOMMA tSTAR arg_value
1290
1289
  {
1291
- # TODO: make all tXXXX terminals include lexer.lineno
1292
1290
  arg, _, _, splat = val
1293
1291
  result = self.arg_concat arg, splat
1294
1292
  }
@@ -1317,7 +1315,6 @@ rule
1317
1315
  | k_begin
1318
1316
  {
1319
1317
  lexer.cmdarg.push false
1320
- result = self.lexer.lineno
1321
1318
  }
1322
1319
  bodystmt k_end
1323
1320
  {
@@ -1327,11 +1324,10 @@ rule
1327
1324
  | tLPAREN_ARG
1328
1325
  {
1329
1326
  lexer.lex_state = EXPR_ENDARG
1330
- result = lexer.lineno
1331
1327
  }
1332
1328
  rparen
1333
1329
  {
1334
- _, line, _ = val
1330
+ (_, line), _, _ = val
1335
1331
  result = s(:begin).line line
1336
1332
  }
1337
1333
  | tLPAREN_ARG
@@ -1347,9 +1343,8 @@ rule
1347
1343
  }
1348
1344
  | tLPAREN compstmt tRPAREN
1349
1345
  {
1350
- _, stmt, _ = val
1351
- result = stmt
1352
- result ||= s(:nil).line lexer.lineno
1346
+ (_, line), stmt, _ = val
1347
+ result = stmt || s(:nil).line(line)
1353
1348
  result.paren = true
1354
1349
  }
1355
1350
  | primary_value tCOLON2 tCONSTANT
@@ -1362,9 +1357,9 @@ rule
1362
1357
  {
1363
1358
  result = wrap :colon3, val[1]
1364
1359
  }
1365
- | tLBRACK { result = lexer.lineno } aref_args rbracket
1360
+ | tLBRACK aref_args rbracket
1366
1361
  {
1367
- _, line, args, (_, line_max) = val
1362
+ (_, line), args, (_, line_max) = val
1368
1363
 
1369
1364
  result = args || s(:array)
1370
1365
  result.sexp_type = :array # aref_args is :args
@@ -1480,9 +1475,6 @@ rule
1480
1475
  result = new_for iter, var, body
1481
1476
  }
1482
1477
  | k_class
1483
- {
1484
- result = self.lexer.lineno
1485
- }
1486
1478
  cpath superclass
1487
1479
  {
1488
1480
  if (self.in_def || self.in_single > 0) then
@@ -1497,9 +1489,6 @@ rule
1497
1489
  self.lexer.ignore_body_comments
1498
1490
  }
1499
1491
  | k_class tLSHFT
1500
- {
1501
- result = self.lexer.lineno
1502
- }
1503
1492
  expr
1504
1493
  {
1505
1494
  result = self.in_def
@@ -1511,16 +1500,14 @@ rule
1511
1500
  self.in_single = 0
1512
1501
  self.env.extend
1513
1502
  }
1514
- bodystmt k_end
1503
+ bodystmt
1504
+ k_end
1515
1505
  {
1516
1506
  result = new_sclass val
1517
1507
  self.env.unextend
1518
1508
  self.lexer.ignore_body_comments
1519
1509
  }
1520
1510
  | k_module
1521
- {
1522
- result = self.lexer.lineno
1523
- }
1524
1511
  cpath
1525
1512
  {
1526
1513
  yyerror "module definition in method body" if
@@ -1623,6 +1610,7 @@ rule
1623
1610
  k_def: kDEF
1624
1611
  {
1625
1612
  self.comments.push self.lexer.comments
1613
+ self.in_argdef = true
1626
1614
  }
1627
1615
  k_do: kDO
1628
1616
  k_do_block: kDO_BLOCK
@@ -1662,20 +1650,33 @@ rule
1662
1650
  }
1663
1651
 
1664
1652
  f_marg: f_norm_arg
1653
+ {
1654
+ (sym, line), = val
1655
+
1656
+ result = s(:dummy, sym).line line
1657
+ }
1665
1658
  | tLPAREN f_margs rparen
1666
1659
  {
1667
- result = val[1]
1660
+ _, args, _ = val
1661
+ result = args
1668
1662
  }
1669
1663
 
1670
1664
  f_marg_list: f_marg
1671
1665
  {
1672
- sym, = val
1666
+ arg, = val
1667
+ line = arg.line
1668
+
1669
+ arg = arg.last if arg.sexp_type == :dummy
1673
1670
 
1674
- result = s(:array, sym).line lexer.lineno
1671
+ result = s(:array, arg).line line
1675
1672
  }
1676
1673
  | f_marg_list tCOMMA f_marg
1677
1674
  {
1678
- result = list_append val[0], val[2]
1675
+ args, _, arg = val
1676
+
1677
+ arg = arg.last if arg.sexp_type == :dummy
1678
+
1679
+ result = list_append args, arg
1679
1680
  }
1680
1681
 
1681
1682
  f_margs: f_marg_list
@@ -1718,14 +1719,14 @@ rule
1718
1719
  }
1719
1720
  | tSTAR
1720
1721
  {
1721
- result = args [:*]
1722
- result.line lexer.lineno # FIX: tSTAR -> line
1722
+ (_, line), = val
1723
+ result = args([:*]).line line
1723
1724
  }
1724
1725
 
1725
1726
  f_any_kwrest: f_kwrest
1726
1727
  | f_no_kwarg
1727
1728
 
1728
- f_eq: tEQL # TODO: self.in_argdef = false
1729
+ f_eq: { self.in_argdef = false } tEQL
1729
1730
 
1730
1731
  block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
1731
1732
  {
@@ -1829,15 +1830,19 @@ opt_block_args_tail: tCOMMA block_args_tail
1829
1830
  {
1830
1831
  # TODO: current_arg = 0
1831
1832
  result = args val
1833
+ self.in_argdef = false
1832
1834
  }
1833
1835
  | tOROP
1834
1836
  {
1835
- result = s(:args).line lexer.lineno
1837
+ (_, line), = val
1838
+
1839
+ result = s(:args).line line
1836
1840
  }
1837
1841
  | tPIPE block_param opt_bv_decl tPIPE
1838
1842
  {
1839
1843
  # TODO: current_arg = 0
1840
1844
  result = args val
1845
+ self.in_argdef = false
1841
1846
  }
1842
1847
 
1843
1848
  opt_bv_decl: opt_nl
@@ -1864,7 +1869,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1864
1869
  lambda: tLAMBDA
1865
1870
  {
1866
1871
  self.env.extend :dynamic
1867
- result = [lexer.lineno, lexer.lpar_beg]
1872
+ result = lexer.lpar_beg
1868
1873
  lexer.paren_nest += 1
1869
1874
  lexer.lpar_beg = lexer.paren_nest
1870
1875
  }
@@ -1874,7 +1879,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1874
1879
  }
1875
1880
  lambda_body
1876
1881
  {
1877
- _, (line, lpar), args, _cmdarg, body = val
1882
+ (_, line), lpar, args, _cmdarg, body = val
1878
1883
  lexer.lpar_beg = lpar
1879
1884
 
1880
1885
  lexer.cmdarg.pop
@@ -1887,10 +1892,12 @@ opt_block_args_tail: tCOMMA block_args_tail
1887
1892
 
1888
1893
  f_larglist: tLPAREN2 f_args opt_bv_decl rparen
1889
1894
  {
1895
+ self.in_argdef = false
1890
1896
  result = args val
1891
1897
  }
1892
1898
  | f_args
1893
1899
  {
1900
+ self.in_argdef = false
1894
1901
  result = val[0]
1895
1902
  result = 0 if result == s(:args)
1896
1903
  }
@@ -1998,7 +2005,8 @@ opt_block_args_tail: tCOMMA block_args_tail
1998
2005
  }
1999
2006
  | kSUPER
2000
2007
  {
2001
- result = s(:zsuper).line lexer.lineno
2008
+ (_, line), = val
2009
+ result = s(:zsuper).line line
2002
2010
  }
2003
2011
  | primary_value tLBRACK2 opt_call_args rbracket
2004
2012
  {
@@ -2008,11 +2016,11 @@ opt_block_args_tail: tCOMMA block_args_tail
2008
2016
  brace_block: tLCURLY
2009
2017
  {
2010
2018
  self.env.extend :dynamic
2011
- result = self.lexer.lineno
2012
2019
  }
2013
- brace_body tRCURLY
2020
+ brace_body
2021
+ tRCURLY
2014
2022
  {
2015
- _, line, body, _ = val
2023
+ (_, line), _, body, _ = val
2016
2024
 
2017
2025
  result = body
2018
2026
  result.line line
@@ -2022,11 +2030,11 @@ opt_block_args_tail: tCOMMA block_args_tail
2022
2030
  | k_do
2023
2031
  {
2024
2032
  self.env.extend :dynamic
2025
- result = self.lexer.lineno
2026
2033
  }
2027
- do_body kEND
2034
+ do_body
2035
+ kEND
2028
2036
  {
2029
- _, line, body, _ = val
2037
+ (_, line), _, body, _ = val
2030
2038
 
2031
2039
  result = body
2032
2040
  result.line line
@@ -2084,14 +2092,13 @@ opt_block_args_tail: tCOMMA block_args_tail
2084
2092
  }
2085
2093
 
2086
2094
  case_body: k_when
2087
- {
2088
- result = self.lexer.lineno
2089
- }
2090
2095
  case_args then compstmt cases
2091
2096
  {
2092
- result = new_when(val[2], val[4])
2093
- result.line val[1]
2094
- result << val[5] if val[5]
2097
+ (_, line), case_args, _then, body, cases = val
2098
+
2099
+ result = new_when case_args, body
2100
+ result.line line
2101
+ result << cases if cases
2095
2102
  }
2096
2103
 
2097
2104
  cases: opt_else | case_body
@@ -2882,7 +2889,6 @@ regexp_contents: none
2882
2889
  lexer.brace_nest,
2883
2890
  lexer.string_nest, # TODO: remove
2884
2891
  lexer.lex_state,
2885
- lexer.lineno,
2886
2892
  ]
2887
2893
 
2888
2894
  lexer.cmdarg.push false
@@ -2897,9 +2903,9 @@ regexp_contents: none
2897
2903
  compstmt
2898
2904
  tSTRING_DEND
2899
2905
  {
2900
- _, memo, stmt, _ = val
2906
+ (_, line), memo, stmt, _ = val
2901
2907
 
2902
- lex_strterm, brace_nest, string_nest, oldlex_state, line = memo
2908
+ lex_strterm, brace_nest, string_nest, oldlex_state = memo
2903
2909
  # TODO: heredoc_indent
2904
2910
 
2905
2911
  lexer.lex_strterm = lex_strterm
@@ -2959,11 +2965,11 @@ regexp_contents: none
2959
2965
 
2960
2966
  dsym: tSYMBEG string_contents tSTRING_END
2961
2967
  {
2962
- _, result, _ = val
2968
+ (_, line), result, _ = val
2963
2969
 
2964
2970
  lexer.lex_state = EXPR_END
2965
2971
 
2966
- result ||= s(:str, "").line lexer.lineno
2972
+ result ||= s(:str, "").line line
2967
2973
 
2968
2974
  case result.sexp_type
2969
2975
  when :dstr then
@@ -2999,15 +3005,15 @@ regexp_contents: none
2999
3005
  | tCONSTANT
3000
3006
  | tCVAR
3001
3007
 
3002
- keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
3003
- | kSELF { result = s(:self).line lexer.lineno }
3004
- | kTRUE { result = s(:true).line lexer.lineno }
3005
- | kFALSE { result = s(:false).line lexer.lineno }
3006
- | k__FILE__ { result = s(:str, self.file).line lexer.lineno }
3007
- | k__LINE__ { result = s(:lit, lexer.lineno).line lexer.lineno }
3008
+ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
3009
+ | kSELF { (_, line), = val; result = s(:self).line line }
3010
+ | kTRUE { (_, line), = val; result = s(:true).line line }
3011
+ | kFALSE { (_, line), = val; result = s(:false).line line }
3012
+ | k__FILE__ { (_, line), = val; result = s(:str, self.file).line line }
3013
+ | k__LINE__ { (_, line), = val; result = s(:lit, line).line line }
3008
3014
  | k__ENCODING__
3009
3015
  {
3010
- l = lexer.lineno
3016
+ (_, l), = val
3011
3017
  result =
3012
3018
  if defined? Encoding then
3013
3019
  s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
@@ -3068,11 +3074,13 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
3068
3074
  f_opt_paren_args: f_paren_args
3069
3075
  | none
3070
3076
  {
3077
+ self.in_argdef = false
3071
3078
  result = end_args val
3072
3079
  }
3073
3080
 
3074
3081
  f_paren_args: tLPAREN2 f_args rparen
3075
3082
  {
3083
+ self.in_argdef = false
3076
3084
  result = end_args val
3077
3085
  }
3078
3086
 
@@ -3080,10 +3088,12 @@ f_opt_paren_args: f_paren_args
3080
3088
  | {
3081
3089
  result = self.in_kwarg
3082
3090
  self.in_kwarg = true
3091
+ self.in_argdef = true
3083
3092
  self.lexer.lex_state |= EXPR_LABEL
3084
3093
  }
3085
3094
  f_args term
3086
3095
  {
3096
+ self.in_argdef = false
3087
3097
  result = end_args val
3088
3098
  }
3089
3099
 
@@ -3170,12 +3180,12 @@ f_opt_paren_args: f_paren_args
3170
3180
  |
3171
3181
  {
3172
3182
  result = args val
3173
- # result.line lexer.lineno
3174
3183
  }
3175
3184
 
3176
3185
  args_forward: tBDOT3
3177
3186
  {
3178
- result = s(:forward_args).line lexer.lineno
3187
+ (_, line), = val
3188
+ result = s(:forward_args).line line
3179
3189
  }
3180
3190
 
3181
3191
  f_bad_arg: tCONSTANT
@@ -3240,6 +3250,14 @@ f_opt_paren_args: f_paren_args
3240
3250
  }
3241
3251
 
3242
3252
  f_label: tLABEL
3253
+ {
3254
+ label, = val
3255
+ # arg_var(p, formal_argument(p, $1));
3256
+ # p->cur_arg = get_id($1);
3257
+ # p->max_numparam = ORDINAL_PARAM;
3258
+ self.in_argdef = false
3259
+ result = label
3260
+ }
3243
3261
 
3244
3262
  f_kw: f_label arg_value
3245
3263
  {
@@ -3248,6 +3266,7 @@ f_opt_paren_args: f_paren_args
3248
3266
 
3249
3267
  identifier = label.to_sym
3250
3268
  self.env[identifier] = :lvar
3269
+ self.in_argdef = true
3251
3270
 
3252
3271
  kwarg = s(:kwarg, identifier, arg).line line
3253
3272
  result = s(:array, kwarg).line line
@@ -3258,6 +3277,7 @@ f_opt_paren_args: f_paren_args
3258
3277
 
3259
3278
  id = label.to_sym
3260
3279
  self.env[id] = :lvar
3280
+ self.in_argdef = true
3261
3281
 
3262
3282
  result = s(:array, s(:kwarg, id).line(line)).line line
3263
3283
  }
@@ -3268,6 +3288,7 @@ f_opt_paren_args: f_paren_args
3268
3288
  (label, line), expr = val
3269
3289
  id = label.to_sym
3270
3290
  self.env[id] = :lvar
3291
+ self.in_argdef = true
3271
3292
 
3272
3293
  result = s(:array, s(:kwarg, id, expr).line(line)).line line
3273
3294
  }
@@ -3277,6 +3298,7 @@ f_opt_paren_args: f_paren_args
3277
3298
  (label, line), = val
3278
3299
  id = label.to_sym
3279
3300
  self.env[id] = :lvar
3301
+ self.in_argdef = true
3280
3302
 
3281
3303
  result = s(:array, s(:kwarg, id).line(line)).line line
3282
3304
  }
@@ -3313,9 +3335,10 @@ f_opt_paren_args: f_paren_args
3313
3335
  }
3314
3336
  | kwrest_mark
3315
3337
  {
3338
+ (_, line), = val
3316
3339
  id = :"**"
3317
- self.env[id] = :lvar # TODO: needed?!?
3318
- result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
3340
+ self.env[id] = :lvar
3341
+ result = [id, line]
3319
3342
  }
3320
3343
 
3321
3344
  f_opt: f_arg_asgn
@@ -3323,10 +3346,10 @@ f_opt_paren_args: f_paren_args
3323
3346
  arg_value
3324
3347
  {
3325
3348
  lhs, _, rhs = val
3349
+ self.in_argdef = true
3326
3350
  result = self.assignable lhs, rhs
3327
3351
  # TODO: detect duplicate names
3328
3352
  # TODO? p->cur_arg = 0;
3329
- # TODO? p->ctxt.in_argdef = 1;
3330
3353
  }
3331
3354
 
3332
3355
  f_block_opt: f_arg_asgn
@@ -3334,9 +3357,9 @@ f_opt_paren_args: f_paren_args
3334
3357
  primary_value
3335
3358
  {
3336
3359
  lhs, _, rhs = val
3360
+ self.in_argdef = true
3337
3361
  result = self.assignable lhs, rhs
3338
3362
  # TODO? p->cur_arg = 0;
3339
- # TODO? p->ctxt.in_argdef = 1;
3340
3363
  }
3341
3364
 
3342
3365
  f_block_optarg: f_block_opt
@@ -3373,9 +3396,10 @@ f_opt_paren_args: f_paren_args
3373
3396
  }
3374
3397
  | restarg_mark
3375
3398
  {
3399
+ (_, line), = val
3376
3400
  name = :"*"
3377
3401
  self.env[name] = :lvar
3378
- result = [name, lexer.lineno] # FIX: tSTAR to include lineno
3402
+ result = [name, line]
3379
3403
  }
3380
3404
 
3381
3405
  blkarg_mark: tAMPER2 | tAMPER
@@ -3480,11 +3504,10 @@ f_opt_paren_args: f_paren_args
3480
3504
  opt_terms: | terms
3481
3505
  opt_nl: | tNL
3482
3506
  rparen: opt_nl tRPAREN
3483
- # TODO:
3484
- # {
3485
- # _, close = val
3486
- # result = [close, lexer.lineno]
3487
- # }
3507
+ {
3508
+ _, close = val # TODO: include lineno in close?
3509
+ result = [close, lexer.lineno]
3510
+ }
3488
3511
  rbracket: opt_nl tRBRACK
3489
3512
  {
3490
3513
  _, close = val