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/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
 
@@ -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
  }
@@ -1260,6 +1261,11 @@ rule
1260
1261
  _, arg = val
1261
1262
  result = s(:array, s(:splat, arg).line(arg.line)).line arg.line
1262
1263
  }
1264
+ | tSTAR
1265
+ {
1266
+ (_, line), = val
1267
+ result = s(:array, s(:splat).line(line)).line line
1268
+ }
1263
1269
  | args tCOMMA arg_value
1264
1270
  {
1265
1271
  args, _, id = val
@@ -1267,11 +1273,14 @@ rule
1267
1273
  }
1268
1274
  | args tCOMMA tSTAR arg_value
1269
1275
  {
1270
- # TODO: the line number from tSTAR has been dropped
1271
- args, _, _, id = val
1272
- line = lexer.lineno
1276
+ args, _, (_, line), id = val
1273
1277
  result = self.list_append args, s(:splat, id).line(line)
1274
1278
  }
1279
+ | args tCOMMA tSTAR
1280
+ {
1281
+ args, _, (_, line) = val
1282
+ result = self.list_append args, s(:splat).line(line)
1283
+ }
1275
1284
 
1276
1285
  mrhs_arg: mrhs
1277
1286
  {
@@ -1288,7 +1297,6 @@ rule
1288
1297
  }
1289
1298
  | args tCOMMA tSTAR arg_value
1290
1299
  {
1291
- # TODO: make all tXXXX terminals include lexer.lineno
1292
1300
  arg, _, _, splat = val
1293
1301
  result = self.arg_concat arg, splat
1294
1302
  }
@@ -1317,7 +1325,6 @@ rule
1317
1325
  | k_begin
1318
1326
  {
1319
1327
  lexer.cmdarg.push false
1320
- result = self.lexer.lineno
1321
1328
  }
1322
1329
  bodystmt k_end
1323
1330
  {
@@ -1327,11 +1334,10 @@ rule
1327
1334
  | tLPAREN_ARG
1328
1335
  {
1329
1336
  lexer.lex_state = EXPR_ENDARG
1330
- result = lexer.lineno
1331
1337
  }
1332
1338
  rparen
1333
1339
  {
1334
- _, line, _ = val
1340
+ (_, line), _, _ = val
1335
1341
  result = s(:begin).line line
1336
1342
  }
1337
1343
  | tLPAREN_ARG
@@ -1347,9 +1353,8 @@ rule
1347
1353
  }
1348
1354
  | tLPAREN compstmt tRPAREN
1349
1355
  {
1350
- _, stmt, _ = val
1351
- result = stmt
1352
- result ||= s(:nil).line lexer.lineno
1356
+ (_, line), stmt, _ = val
1357
+ result = stmt || s(:nil).line(line)
1353
1358
  result.paren = true
1354
1359
  }
1355
1360
  | primary_value tCOLON2 tCONSTANT
@@ -1362,9 +1367,9 @@ rule
1362
1367
  {
1363
1368
  result = wrap :colon3, val[1]
1364
1369
  }
1365
- | tLBRACK { result = lexer.lineno } aref_args rbracket
1370
+ | tLBRACK aref_args rbracket
1366
1371
  {
1367
- _, line, args, (_, line_max) = val
1372
+ (_, line), args, (_, line_max) = val
1368
1373
 
1369
1374
  result = args || s(:array)
1370
1375
  result.sexp_type = :array # aref_args is :args
@@ -1480,9 +1485,6 @@ rule
1480
1485
  result = new_for iter, var, body
1481
1486
  }
1482
1487
  | k_class
1483
- {
1484
- result = self.lexer.lineno
1485
- }
1486
1488
  cpath superclass
1487
1489
  {
1488
1490
  if (self.in_def || self.in_single > 0) then
@@ -1497,9 +1499,6 @@ rule
1497
1499
  self.lexer.ignore_body_comments
1498
1500
  }
1499
1501
  | k_class tLSHFT
1500
- {
1501
- result = self.lexer.lineno
1502
- }
1503
1502
  expr
1504
1503
  {
1505
1504
  result = self.in_def
@@ -1511,16 +1510,14 @@ rule
1511
1510
  self.in_single = 0
1512
1511
  self.env.extend
1513
1512
  }
1514
- bodystmt k_end
1513
+ bodystmt
1514
+ k_end
1515
1515
  {
1516
1516
  result = new_sclass val
1517
1517
  self.env.unextend
1518
1518
  self.lexer.ignore_body_comments
1519
1519
  }
1520
1520
  | k_module
1521
- {
1522
- result = self.lexer.lineno
1523
- }
1524
1521
  cpath
1525
1522
  {
1526
1523
  yyerror "module definition in method body" if
@@ -1623,6 +1620,7 @@ rule
1623
1620
  k_def: kDEF
1624
1621
  {
1625
1622
  self.comments.push self.lexer.comments
1623
+ self.in_argdef = true
1626
1624
  }
1627
1625
  k_do: kDO
1628
1626
  k_do_block: kDO_BLOCK
@@ -1662,20 +1660,33 @@ rule
1662
1660
  }
1663
1661
 
1664
1662
  f_marg: f_norm_arg
1663
+ {
1664
+ (sym, line), = val
1665
+
1666
+ result = s(:dummy, sym).line line
1667
+ }
1665
1668
  | tLPAREN f_margs rparen
1666
1669
  {
1667
- result = val[1]
1670
+ _, args, _ = val
1671
+ result = args
1668
1672
  }
1669
1673
 
1670
1674
  f_marg_list: f_marg
1671
1675
  {
1672
- sym, = val
1676
+ arg, = val
1677
+ line = arg.line
1678
+
1679
+ arg = arg.last if arg.sexp_type == :dummy
1673
1680
 
1674
- result = s(:array, sym).line lexer.lineno
1681
+ result = s(:array, arg).line line
1675
1682
  }
1676
1683
  | f_marg_list tCOMMA f_marg
1677
1684
  {
1678
- result = list_append val[0], val[2]
1685
+ args, _, arg = val
1686
+
1687
+ arg = arg.last if arg.sexp_type == :dummy
1688
+
1689
+ result = list_append args, arg
1679
1690
  }
1680
1691
 
1681
1692
  f_margs: f_marg_list
@@ -1718,14 +1729,14 @@ rule
1718
1729
  }
1719
1730
  | tSTAR
1720
1731
  {
1721
- result = args [:*]
1722
- result.line lexer.lineno # FIX: tSTAR -> line
1732
+ (_, line), = val
1733
+ result = args([:*]).line line
1723
1734
  }
1724
1735
 
1725
1736
  f_any_kwrest: f_kwrest
1726
1737
  | f_no_kwarg
1727
1738
 
1728
- f_eq: tEQL # TODO: self.in_argdef = false
1739
+ f_eq: { self.in_argdef = false } tEQL
1729
1740
 
1730
1741
  block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
1731
1742
  {
@@ -1829,15 +1840,19 @@ opt_block_args_tail: tCOMMA block_args_tail
1829
1840
  {
1830
1841
  # TODO: current_arg = 0
1831
1842
  result = args val
1843
+ self.in_argdef = false
1832
1844
  }
1833
1845
  | tOROP
1834
1846
  {
1835
- result = s(:args).line lexer.lineno
1847
+ (_, line), = val
1848
+
1849
+ result = s(:args).line line
1836
1850
  }
1837
1851
  | tPIPE block_param opt_bv_decl tPIPE
1838
1852
  {
1839
1853
  # TODO: current_arg = 0
1840
1854
  result = args val
1855
+ self.in_argdef = false
1841
1856
  }
1842
1857
 
1843
1858
  opt_bv_decl: opt_nl
@@ -1864,7 +1879,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1864
1879
  lambda: tLAMBDA
1865
1880
  {
1866
1881
  self.env.extend :dynamic
1867
- result = [lexer.lineno, lexer.lpar_beg]
1882
+ result = lexer.lpar_beg
1868
1883
  lexer.paren_nest += 1
1869
1884
  lexer.lpar_beg = lexer.paren_nest
1870
1885
  }
@@ -1874,7 +1889,7 @@ opt_block_args_tail: tCOMMA block_args_tail
1874
1889
  }
1875
1890
  lambda_body
1876
1891
  {
1877
- _, (line, lpar), args, _cmdarg, body = val
1892
+ (_, line), lpar, args, _cmdarg, body = val
1878
1893
  lexer.lpar_beg = lpar
1879
1894
 
1880
1895
  lexer.cmdarg.pop
@@ -1887,10 +1902,12 @@ opt_block_args_tail: tCOMMA block_args_tail
1887
1902
 
1888
1903
  f_larglist: tLPAREN2 f_args opt_bv_decl rparen
1889
1904
  {
1905
+ self.in_argdef = false
1890
1906
  result = args val
1891
1907
  }
1892
1908
  | f_args
1893
1909
  {
1910
+ self.in_argdef = false
1894
1911
  result = val[0]
1895
1912
  result = 0 if result == s(:args)
1896
1913
  }
@@ -1998,7 +2015,8 @@ opt_block_args_tail: tCOMMA block_args_tail
1998
2015
  }
1999
2016
  | kSUPER
2000
2017
  {
2001
- result = s(:zsuper).line lexer.lineno
2018
+ (_, line), = val
2019
+ result = s(:zsuper).line line
2002
2020
  }
2003
2021
  | primary_value tLBRACK2 opt_call_args rbracket
2004
2022
  {
@@ -2008,11 +2026,11 @@ opt_block_args_tail: tCOMMA block_args_tail
2008
2026
  brace_block: tLCURLY
2009
2027
  {
2010
2028
  self.env.extend :dynamic
2011
- result = self.lexer.lineno
2012
2029
  }
2013
- brace_body tRCURLY
2030
+ brace_body
2031
+ tRCURLY
2014
2032
  {
2015
- _, line, body, _ = val
2033
+ (_, line), _, body, _ = val
2016
2034
 
2017
2035
  result = body
2018
2036
  result.line line
@@ -2022,11 +2040,11 @@ opt_block_args_tail: tCOMMA block_args_tail
2022
2040
  | k_do
2023
2041
  {
2024
2042
  self.env.extend :dynamic
2025
- result = self.lexer.lineno
2026
2043
  }
2027
- do_body kEND
2044
+ do_body
2045
+ kEND
2028
2046
  {
2029
- _, line, body, _ = val
2047
+ (_, line), _, body, _ = val
2030
2048
 
2031
2049
  result = body
2032
2050
  result.line line
@@ -2084,14 +2102,13 @@ opt_block_args_tail: tCOMMA block_args_tail
2084
2102
  }
2085
2103
 
2086
2104
  case_body: k_when
2087
- {
2088
- result = self.lexer.lineno
2089
- }
2090
2105
  case_args then compstmt cases
2091
2106
  {
2092
- result = new_when(val[2], val[4])
2093
- result.line val[1]
2094
- result << val[5] if val[5]
2107
+ (_, line), case_args, _then, body, cases = val
2108
+
2109
+ result = new_when case_args, body
2110
+ result.line line
2111
+ result << cases if cases
2095
2112
  }
2096
2113
 
2097
2114
  cases: opt_else | case_body
@@ -2328,31 +2345,17 @@ opt_block_args_tail: tCOMMA block_args_tail
2328
2345
  result = new_array_pattern_tail both, nil, nil, nil
2329
2346
  result.line head.line
2330
2347
  }
2331
- | p_args_head tSTAR tIDENTIFIER
2348
+ | p_args_head p_rest
2332
2349
  {
2333
- head, _, (id, _line) = val
2350
+ head, (rest, _) = val
2334
2351
 
2335
- result = new_array_pattern_tail head, true, id.to_sym, nil
2336
- result.line head.line
2352
+ result = new_array_pattern_tail(head, true, rest, nil).line head.line
2337
2353
  }
2338
- | p_args_head tSTAR tIDENTIFIER tCOMMA p_args_post
2354
+ | p_args_head p_rest tCOMMA p_args_post
2339
2355
  {
2340
- head, _, (id, _line), _, post = val
2341
-
2342
- result = new_array_pattern_tail head, true, id.to_sym, post
2343
- result.line head.line
2344
- }
2345
- | p_args_head tSTAR
2346
- {
2347
- expr, _ = val
2356
+ head, (rest, _), _, post = val
2348
2357
 
2349
- result = new_array_pattern_tail(expr, true, nil, nil).line expr.line
2350
- }
2351
- | p_args_head tSTAR tCOMMA p_args_post
2352
- {
2353
- head, _, _, post = val
2354
-
2355
- result = new_array_pattern_tail(head, true, nil, post).line head.line
2358
+ result = new_array_pattern_tail(head, true, rest, post).line head.line
2356
2359
  }
2357
2360
  | p_args_tail
2358
2361
 
@@ -2882,7 +2885,6 @@ regexp_contents: none
2882
2885
  lexer.brace_nest,
2883
2886
  lexer.string_nest, # TODO: remove
2884
2887
  lexer.lex_state,
2885
- lexer.lineno,
2886
2888
  ]
2887
2889
 
2888
2890
  lexer.cmdarg.push false
@@ -2897,9 +2899,9 @@ regexp_contents: none
2897
2899
  compstmt
2898
2900
  tSTRING_DEND
2899
2901
  {
2900
- _, memo, stmt, _ = val
2902
+ (_, line), memo, stmt, _ = val
2901
2903
 
2902
- lex_strterm, brace_nest, string_nest, oldlex_state, line = memo
2904
+ lex_strterm, brace_nest, string_nest, oldlex_state = memo
2903
2905
  # TODO: heredoc_indent
2904
2906
 
2905
2907
  lexer.lex_strterm = lex_strterm
@@ -2959,11 +2961,11 @@ regexp_contents: none
2959
2961
 
2960
2962
  dsym: tSYMBEG string_contents tSTRING_END
2961
2963
  {
2962
- _, result, _ = val
2964
+ (_, line), result, _ = val
2963
2965
 
2964
2966
  lexer.lex_state = EXPR_END
2965
2967
 
2966
- result ||= s(:str, "").line lexer.lineno
2968
+ result ||= s(:str, "").line line
2967
2969
 
2968
2970
  case result.sexp_type
2969
2971
  when :dstr then
@@ -2999,15 +3001,15 @@ regexp_contents: none
2999
3001
  | tCONSTANT
3000
3002
  | tCVAR
3001
3003
 
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 }
3004
+ keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
3005
+ | kSELF { (_, line), = val; result = s(:self).line line }
3006
+ | kTRUE { (_, line), = val; result = s(:true).line line }
3007
+ | kFALSE { (_, line), = val; result = s(:false).line line }
3008
+ | k__FILE__ { (_, line), = val; result = s(:str, self.file).line line }
3009
+ | k__LINE__ { (_, line), = val; result = s(:lit, line).line line }
3008
3010
  | k__ENCODING__
3009
3011
  {
3010
- l = lexer.lineno
3012
+ (_, l), = val
3011
3013
  result =
3012
3014
  if defined? Encoding then
3013
3015
  s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
@@ -3068,11 +3070,13 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
3068
3070
  f_opt_paren_args: f_paren_args
3069
3071
  | none
3070
3072
  {
3073
+ self.in_argdef = false
3071
3074
  result = end_args val
3072
3075
  }
3073
3076
 
3074
3077
  f_paren_args: tLPAREN2 f_args rparen
3075
3078
  {
3079
+ self.in_argdef = false
3076
3080
  result = end_args val
3077
3081
  }
3078
3082
 
@@ -3080,10 +3084,12 @@ f_opt_paren_args: f_paren_args
3080
3084
  | {
3081
3085
  result = self.in_kwarg
3082
3086
  self.in_kwarg = true
3087
+ self.in_argdef = true
3083
3088
  self.lexer.lex_state |= EXPR_LABEL
3084
3089
  }
3085
3090
  f_args term
3086
3091
  {
3092
+ self.in_argdef = false
3087
3093
  result = end_args val
3088
3094
  }
3089
3095
 
@@ -3170,12 +3176,12 @@ f_opt_paren_args: f_paren_args
3170
3176
  |
3171
3177
  {
3172
3178
  result = args val
3173
- # result.line lexer.lineno
3174
3179
  }
3175
3180
 
3176
3181
  args_forward: tBDOT3
3177
3182
  {
3178
- result = s(:forward_args).line lexer.lineno
3183
+ (_, line), = val
3184
+ result = s(:forward_args).line line
3179
3185
  }
3180
3186
 
3181
3187
  f_bad_arg: tCONSTANT
@@ -3240,6 +3246,14 @@ f_opt_paren_args: f_paren_args
3240
3246
  }
3241
3247
 
3242
3248
  f_label: tLABEL
3249
+ {
3250
+ label, = val
3251
+ # arg_var(p, formal_argument(p, $1));
3252
+ # p->cur_arg = get_id($1);
3253
+ # p->max_numparam = ORDINAL_PARAM;
3254
+ self.in_argdef = false
3255
+ result = label
3256
+ }
3243
3257
 
3244
3258
  f_kw: f_label arg_value
3245
3259
  {
@@ -3248,6 +3262,7 @@ f_opt_paren_args: f_paren_args
3248
3262
 
3249
3263
  identifier = label.to_sym
3250
3264
  self.env[identifier] = :lvar
3265
+ self.in_argdef = true
3251
3266
 
3252
3267
  kwarg = s(:kwarg, identifier, arg).line line
3253
3268
  result = s(:array, kwarg).line line
@@ -3258,6 +3273,7 @@ f_opt_paren_args: f_paren_args
3258
3273
 
3259
3274
  id = label.to_sym
3260
3275
  self.env[id] = :lvar
3276
+ self.in_argdef = true
3261
3277
 
3262
3278
  result = s(:array, s(:kwarg, id).line(line)).line line
3263
3279
  }
@@ -3268,6 +3284,7 @@ f_opt_paren_args: f_paren_args
3268
3284
  (label, line), expr = val
3269
3285
  id = label.to_sym
3270
3286
  self.env[id] = :lvar
3287
+ self.in_argdef = true
3271
3288
 
3272
3289
  result = s(:array, s(:kwarg, id, expr).line(line)).line line
3273
3290
  }
@@ -3277,6 +3294,7 @@ f_opt_paren_args: f_paren_args
3277
3294
  (label, line), = val
3278
3295
  id = label.to_sym
3279
3296
  self.env[id] = :lvar
3297
+ self.in_argdef = true
3280
3298
 
3281
3299
  result = s(:array, s(:kwarg, id).line(line)).line line
3282
3300
  }
@@ -3313,9 +3331,10 @@ f_opt_paren_args: f_paren_args
3313
3331
  }
3314
3332
  | kwrest_mark
3315
3333
  {
3334
+ (_, line), = val
3316
3335
  id = :"**"
3317
- self.env[id] = :lvar # TODO: needed?!?
3318
- result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
3336
+ self.env[id] = :lvar
3337
+ result = [id, line]
3319
3338
  }
3320
3339
 
3321
3340
  f_opt: f_arg_asgn
@@ -3323,10 +3342,10 @@ f_opt_paren_args: f_paren_args
3323
3342
  arg_value
3324
3343
  {
3325
3344
  lhs, _, rhs = val
3345
+ self.in_argdef = true
3326
3346
  result = self.assignable lhs, rhs
3327
3347
  # TODO: detect duplicate names
3328
3348
  # TODO? p->cur_arg = 0;
3329
- # TODO? p->ctxt.in_argdef = 1;
3330
3349
  }
3331
3350
 
3332
3351
  f_block_opt: f_arg_asgn
@@ -3334,9 +3353,9 @@ f_opt_paren_args: f_paren_args
3334
3353
  primary_value
3335
3354
  {
3336
3355
  lhs, _, rhs = val
3356
+ self.in_argdef = true
3337
3357
  result = self.assignable lhs, rhs
3338
3358
  # TODO? p->cur_arg = 0;
3339
- # TODO? p->ctxt.in_argdef = 1;
3340
3359
  }
3341
3360
 
3342
3361
  f_block_optarg: f_block_opt
@@ -3373,9 +3392,10 @@ f_opt_paren_args: f_paren_args
3373
3392
  }
3374
3393
  | restarg_mark
3375
3394
  {
3395
+ (_, line), = val
3376
3396
  name = :"*"
3377
3397
  self.env[name] = :lvar
3378
- result = [name, lexer.lineno] # FIX: tSTAR to include lineno
3398
+ result = [name, line]
3379
3399
  }
3380
3400
 
3381
3401
  blkarg_mark: tAMPER2 | tAMPER
@@ -3466,6 +3486,11 @@ f_opt_paren_args: f_paren_args
3466
3486
  line = arg.line
3467
3487
  result = s(:array, s(:kwsplat, arg).line(line)).line line
3468
3488
  }
3489
+ | tDSTAR
3490
+ {
3491
+ (_, line), = val
3492
+ result = s(:array, s(:kwsplat).line(line)).line line
3493
+ }
3469
3494
 
3470
3495
  operation: tIDENTIFIER | tCONSTANT | tFID
3471
3496
  operation2: tIDENTIFIER | tCONSTANT | tFID | op
@@ -3480,11 +3505,10 @@ f_opt_paren_args: f_paren_args
3480
3505
  opt_terms: | terms
3481
3506
  opt_nl: | tNL
3482
3507
  rparen: opt_nl tRPAREN
3483
- # TODO:
3484
- # {
3485
- # _, close = val
3486
- # result = [close, lexer.lineno]
3487
- # }
3508
+ {
3509
+ _, close = val # TODO: include lineno in close?
3510
+ result = [close, lexer.lineno]
3511
+ }
3488
3512
  rbracket: opt_nl tRBRACK
3489
3513
  {
3490
3514
  _, close = val