ruby_parser 3.20.0 → 3.20.3
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +1 -1
- data/History.rdoc +24 -0
- data/compare/normalize.rb +1 -0
- data/lib/ruby20_parser.rb +4266 -4283
- data/lib/ruby20_parser.y +50 -26
- data/lib/ruby21_parser.rb +4240 -4239
- data/lib/ruby21_parser.y +50 -26
- data/lib/ruby22_parser.rb +4288 -4289
- data/lib/ruby22_parser.y +50 -26
- data/lib/ruby23_parser.rb +4273 -4242
- data/lib/ruby23_parser.y +50 -26
- data/lib/ruby24_parser.rb +4278 -4297
- data/lib/ruby24_parser.y +50 -26
- data/lib/ruby25_parser.rb +4269 -4288
- data/lib/ruby25_parser.y +50 -26
- data/lib/ruby26_parser.rb +4269 -4288
- data/lib/ruby26_parser.y +50 -26
- data/lib/ruby27_parser.rb +4172 -4205
- data/lib/ruby27_parser.y +50 -26
- data/lib/ruby30_parser.rb +6028 -5970
- data/lib/ruby30_parser.y +135 -86
- data/lib/ruby31_parser.rb +6194 -6183
- data/lib/ruby31_parser.y +136 -87
- data/lib/ruby32_parser.rb +6290 -6327
- data/lib/ruby32_parser.y +157 -107
- data/lib/ruby3_parser.yy +172 -87
- data/lib/ruby_lexer.rb +15 -7
- data/lib/ruby_lexer.rex.rb +1 -1
- data/lib/ruby_lexer_strings.rb +2 -2
- data/lib/ruby_parser.yy +50 -26
- data/lib/ruby_parser_extras.rb +25 -19
- data/test/test_ruby_parser.rb +195 -7
- data/tools/munge.rb +8 -2
- data/tools/ripper.rb +14 -12
- data.tar.gz.sig +0 -0
- metadata +3 -3
- metadata.gz.sig +0 -0
data/lib/ruby3_parser.yy
CHANGED
@@ -104,9 +104,9 @@ rule
|
|
104
104
|
result = iter
|
105
105
|
}
|
106
106
|
|
107
|
-
begin_block: tLCURLY
|
107
|
+
begin_block: tLCURLY top_compstmt tRCURLY
|
108
108
|
{
|
109
|
-
_, line, stmt, _ = val
|
109
|
+
(_, line), stmt, _ = val
|
110
110
|
result = new_iter s(:preexe).line(line), 0, stmt
|
111
111
|
}
|
112
112
|
|
@@ -229,6 +229,7 @@ rule
|
|
229
229
|
| lhs tEQL mrhs
|
230
230
|
{
|
231
231
|
lhs, _, rhs = val
|
232
|
+
|
232
233
|
result = new_assign lhs, s(:svalue, rhs).line(rhs.line)
|
233
234
|
}
|
234
235
|
| mlhs tEQL mrhs_arg kRESCUE_MOD stmt
|
@@ -425,6 +426,7 @@ rule
|
|
425
426
|
defs_head: k_def singleton dot_or_colon
|
426
427
|
{
|
427
428
|
lexer.lex_state = EXPR_FNAME
|
429
|
+
self.in_argdef = true
|
428
430
|
}
|
429
431
|
def_name
|
430
432
|
{
|
@@ -638,7 +640,7 @@ rule
|
|
638
640
|
}
|
639
641
|
| tSTAR
|
640
642
|
{
|
641
|
-
l =
|
643
|
+
(_, l), = val
|
642
644
|
result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l
|
643
645
|
}
|
644
646
|
| tSTAR tCOMMA mlhs_post
|
@@ -1148,8 +1150,10 @@ rule
|
|
1148
1150
|
|
1149
1151
|
paren_args: tLPAREN2 opt_call_args rparen
|
1150
1152
|
{
|
1151
|
-
_, args, _ = val
|
1153
|
+
_, args, (_, line_max) = val
|
1154
|
+
|
1152
1155
|
result = args
|
1156
|
+
result.line_max = line_max if args
|
1153
1157
|
}
|
1154
1158
|
| tLPAREN2 args tCOMMA args_forward rparen
|
1155
1159
|
{
|
@@ -1268,7 +1272,7 @@ rule
|
|
1268
1272
|
args: arg_value
|
1269
1273
|
{
|
1270
1274
|
arg, = val
|
1271
|
-
lineno = arg.line
|
1275
|
+
lineno = arg.line
|
1272
1276
|
|
1273
1277
|
result = s(:array, arg).line lineno
|
1274
1278
|
}
|
@@ -1277,6 +1281,13 @@ rule
|
|
1277
1281
|
_, arg = val
|
1278
1282
|
result = s(:array, s(:splat, arg).line(arg.line)).line arg.line
|
1279
1283
|
}
|
1284
|
+
#if V >= 32
|
1285
|
+
| tSTAR
|
1286
|
+
{
|
1287
|
+
(_, line), = val
|
1288
|
+
result = s(:array, s(:splat).line(line)).line line
|
1289
|
+
}
|
1290
|
+
#endif
|
1280
1291
|
| args tCOMMA arg_value
|
1281
1292
|
{
|
1282
1293
|
args, _, id = val
|
@@ -1284,11 +1295,16 @@ rule
|
|
1284
1295
|
}
|
1285
1296
|
| args tCOMMA tSTAR arg_value
|
1286
1297
|
{
|
1287
|
-
|
1288
|
-
args, _, _, id = val
|
1289
|
-
line = lexer.lineno
|
1298
|
+
args, _, (_, line), id = val
|
1290
1299
|
result = self.list_append args, s(:splat, id).line(line)
|
1291
1300
|
}
|
1301
|
+
#if V >= 32
|
1302
|
+
| args tCOMMA tSTAR
|
1303
|
+
{
|
1304
|
+
args, _, (_, line) = val
|
1305
|
+
result = self.list_append args, s(:splat).line(line)
|
1306
|
+
}
|
1307
|
+
#endif
|
1292
1308
|
|
1293
1309
|
mrhs_arg: mrhs
|
1294
1310
|
{
|
@@ -1305,7 +1321,6 @@ rule
|
|
1305
1321
|
}
|
1306
1322
|
| args tCOMMA tSTAR arg_value
|
1307
1323
|
{
|
1308
|
-
# TODO: make all tXXXX terminals include lexer.lineno
|
1309
1324
|
arg, _, _, splat = val
|
1310
1325
|
result = self.arg_concat arg, splat
|
1311
1326
|
}
|
@@ -1334,7 +1349,6 @@ rule
|
|
1334
1349
|
| k_begin
|
1335
1350
|
{
|
1336
1351
|
lexer.cmdarg.push false
|
1337
|
-
result = self.lexer.lineno
|
1338
1352
|
}
|
1339
1353
|
bodystmt k_end
|
1340
1354
|
{
|
@@ -1344,11 +1358,10 @@ rule
|
|
1344
1358
|
| tLPAREN_ARG
|
1345
1359
|
{
|
1346
1360
|
lexer.lex_state = EXPR_ENDARG
|
1347
|
-
result = lexer.lineno
|
1348
1361
|
}
|
1349
1362
|
rparen
|
1350
1363
|
{
|
1351
|
-
_, line, _ = val
|
1364
|
+
(_, line), _, _ = val
|
1352
1365
|
result = s(:begin).line line
|
1353
1366
|
}
|
1354
1367
|
| tLPAREN_ARG
|
@@ -1364,9 +1377,8 @@ rule
|
|
1364
1377
|
}
|
1365
1378
|
| tLPAREN compstmt tRPAREN
|
1366
1379
|
{
|
1367
|
-
_, stmt, _ = val
|
1368
|
-
result = stmt
|
1369
|
-
result ||= s(:nil).line lexer.lineno
|
1380
|
+
(_, line), stmt, _ = val
|
1381
|
+
result = stmt || s(:nil).line(line)
|
1370
1382
|
result.paren = true
|
1371
1383
|
}
|
1372
1384
|
| primary_value tCOLON2 tCONSTANT
|
@@ -1379,12 +1391,14 @@ rule
|
|
1379
1391
|
{
|
1380
1392
|
result = wrap :colon3, val[1]
|
1381
1393
|
}
|
1382
|
-
| tLBRACK
|
1394
|
+
| tLBRACK aref_args rbracket
|
1383
1395
|
{
|
1384
|
-
_, line, args, _ = val
|
1396
|
+
(_, line), args, (_, line_max) = val
|
1397
|
+
|
1385
1398
|
result = args || s(:array)
|
1386
1399
|
result.sexp_type = :array # aref_args is :args
|
1387
1400
|
result.line line
|
1401
|
+
result.line_max = line_max
|
1388
1402
|
}
|
1389
1403
|
| tLBRACE
|
1390
1404
|
{
|
@@ -1495,9 +1509,6 @@ rule
|
|
1495
1509
|
result = new_for iter, var, body
|
1496
1510
|
}
|
1497
1511
|
| k_class
|
1498
|
-
{
|
1499
|
-
result = self.lexer.lineno
|
1500
|
-
}
|
1501
1512
|
cpath superclass
|
1502
1513
|
{
|
1503
1514
|
if (self.in_def || self.in_single > 0) then
|
@@ -1512,9 +1523,6 @@ rule
|
|
1512
1523
|
self.lexer.ignore_body_comments
|
1513
1524
|
}
|
1514
1525
|
| k_class tLSHFT
|
1515
|
-
{
|
1516
|
-
result = self.lexer.lineno
|
1517
|
-
}
|
1518
1526
|
expr
|
1519
1527
|
{
|
1520
1528
|
result = self.in_def
|
@@ -1526,16 +1534,14 @@ rule
|
|
1526
1534
|
self.in_single = 0
|
1527
1535
|
self.env.extend
|
1528
1536
|
}
|
1529
|
-
bodystmt
|
1537
|
+
bodystmt
|
1538
|
+
k_end
|
1530
1539
|
{
|
1531
1540
|
result = new_sclass val
|
1532
1541
|
self.env.unextend
|
1533
1542
|
self.lexer.ignore_body_comments
|
1534
1543
|
}
|
1535
1544
|
| k_module
|
1536
|
-
{
|
1537
|
-
result = self.lexer.lineno
|
1538
|
-
}
|
1539
1545
|
cpath
|
1540
1546
|
{
|
1541
1547
|
yyerror "module definition in method body" if
|
@@ -1638,6 +1644,7 @@ rule
|
|
1638
1644
|
k_def: kDEF
|
1639
1645
|
{
|
1640
1646
|
self.comments.push self.lexer.comments
|
1647
|
+
self.in_argdef = true
|
1641
1648
|
}
|
1642
1649
|
k_do: kDO
|
1643
1650
|
k_do_block: kDO_BLOCK
|
@@ -1677,20 +1684,33 @@ rule
|
|
1677
1684
|
}
|
1678
1685
|
|
1679
1686
|
f_marg: f_norm_arg
|
1687
|
+
{
|
1688
|
+
(sym, line), = val
|
1689
|
+
|
1690
|
+
result = s(:dummy, sym).line line
|
1691
|
+
}
|
1680
1692
|
| tLPAREN f_margs rparen
|
1681
1693
|
{
|
1682
|
-
|
1694
|
+
_, args, _ = val
|
1695
|
+
result = args
|
1683
1696
|
}
|
1684
1697
|
|
1685
1698
|
f_marg_list: f_marg
|
1686
1699
|
{
|
1687
|
-
|
1700
|
+
arg, = val
|
1701
|
+
line = arg.line
|
1702
|
+
|
1703
|
+
arg = arg.last if arg.sexp_type == :dummy
|
1688
1704
|
|
1689
|
-
result = s(:array,
|
1705
|
+
result = s(:array, arg).line line
|
1690
1706
|
}
|
1691
1707
|
| f_marg_list tCOMMA f_marg
|
1692
1708
|
{
|
1693
|
-
|
1709
|
+
args, _, arg = val
|
1710
|
+
|
1711
|
+
arg = arg.last if arg.sexp_type == :dummy
|
1712
|
+
|
1713
|
+
result = list_append args, arg
|
1694
1714
|
}
|
1695
1715
|
|
1696
1716
|
f_margs: f_marg_list
|
@@ -1733,15 +1753,15 @@ rule
|
|
1733
1753
|
}
|
1734
1754
|
| tSTAR
|
1735
1755
|
{
|
1736
|
-
|
1737
|
-
result.line
|
1756
|
+
(_, line), = val
|
1757
|
+
result = args([:*]).line line
|
1738
1758
|
}
|
1739
1759
|
|
1740
1760
|
f_any_kwrest: f_kwrest
|
1741
1761
|
| f_no_kwarg
|
1742
1762
|
|
1743
1763
|
#if V > 30
|
1744
|
-
f_eq:
|
1764
|
+
f_eq: { self.in_argdef = false } tEQL
|
1745
1765
|
#endif
|
1746
1766
|
|
1747
1767
|
block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
|
@@ -1846,15 +1866,19 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1846
1866
|
{
|
1847
1867
|
# TODO: current_arg = 0
|
1848
1868
|
result = args val
|
1869
|
+
self.in_argdef = false
|
1849
1870
|
}
|
1850
1871
|
| tOROP
|
1851
1872
|
{
|
1852
|
-
|
1873
|
+
(_, line), = val
|
1874
|
+
|
1875
|
+
result = s(:args).line line
|
1853
1876
|
}
|
1854
1877
|
| tPIPE block_param opt_bv_decl tPIPE
|
1855
1878
|
{
|
1856
1879
|
# TODO: current_arg = 0
|
1857
1880
|
result = args val
|
1881
|
+
self.in_argdef = false
|
1858
1882
|
}
|
1859
1883
|
|
1860
1884
|
opt_bv_decl: opt_nl
|
@@ -1881,7 +1905,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1881
1905
|
lambda: tLAMBDA
|
1882
1906
|
{
|
1883
1907
|
self.env.extend :dynamic
|
1884
|
-
result =
|
1908
|
+
result = lexer.lpar_beg
|
1885
1909
|
lexer.paren_nest += 1
|
1886
1910
|
lexer.lpar_beg = lexer.paren_nest
|
1887
1911
|
}
|
@@ -1891,7 +1915,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1891
1915
|
}
|
1892
1916
|
lambda_body
|
1893
1917
|
{
|
1894
|
-
_,
|
1918
|
+
(_, line), lpar, args, _cmdarg, body = val
|
1895
1919
|
lexer.lpar_beg = lpar
|
1896
1920
|
|
1897
1921
|
lexer.cmdarg.pop
|
@@ -1904,10 +1928,12 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1904
1928
|
|
1905
1929
|
f_larglist: tLPAREN2 f_args opt_bv_decl rparen
|
1906
1930
|
{
|
1931
|
+
self.in_argdef = false
|
1907
1932
|
result = args val
|
1908
1933
|
}
|
1909
1934
|
| f_args
|
1910
1935
|
{
|
1936
|
+
self.in_argdef = false
|
1911
1937
|
result = val[0]
|
1912
1938
|
result = 0 if result == s(:args)
|
1913
1939
|
}
|
@@ -1975,13 +2001,19 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1975
2001
|
{
|
1976
2002
|
call, args = val
|
1977
2003
|
|
1978
|
-
result = call
|
2004
|
+
result = call
|
2005
|
+
|
2006
|
+
if args then
|
2007
|
+
call.concat args.sexp_body
|
2008
|
+
result.line_max = args.line_max
|
2009
|
+
end
|
1979
2010
|
}
|
1980
2011
|
| primary_value call_op operation2 opt_paren_args
|
1981
2012
|
{
|
1982
|
-
recv, call_op, (op,
|
2013
|
+
recv, call_op, (op, op_line), args = val
|
1983
2014
|
|
1984
2015
|
result = new_call recv, op.to_sym, args, call_op
|
2016
|
+
result.line_max = op_line unless args
|
1985
2017
|
}
|
1986
2018
|
| primary_value tCOLON2 operation2 paren_args
|
1987
2019
|
{
|
@@ -2009,7 +2041,8 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2009
2041
|
}
|
2010
2042
|
| kSUPER
|
2011
2043
|
{
|
2012
|
-
|
2044
|
+
(_, line), = val
|
2045
|
+
result = s(:zsuper).line line
|
2013
2046
|
}
|
2014
2047
|
| primary_value tLBRACK2 opt_call_args rbracket
|
2015
2048
|
{
|
@@ -2019,11 +2052,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2019
2052
|
brace_block: tLCURLY
|
2020
2053
|
{
|
2021
2054
|
self.env.extend :dynamic
|
2022
|
-
result = self.lexer.lineno
|
2023
2055
|
}
|
2024
|
-
brace_body
|
2056
|
+
brace_body
|
2057
|
+
tRCURLY
|
2025
2058
|
{
|
2026
|
-
_, line, body, _ = val
|
2059
|
+
(_, line), _, body, _ = val
|
2027
2060
|
|
2028
2061
|
result = body
|
2029
2062
|
result.line line
|
@@ -2033,11 +2066,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2033
2066
|
| k_do
|
2034
2067
|
{
|
2035
2068
|
self.env.extend :dynamic
|
2036
|
-
result = self.lexer.lineno
|
2037
2069
|
}
|
2038
|
-
do_body
|
2070
|
+
do_body
|
2071
|
+
kEND
|
2039
2072
|
{
|
2040
|
-
_, line, body, _ = val
|
2073
|
+
(_, line), _, body, _ = val
|
2041
2074
|
|
2042
2075
|
result = body
|
2043
2076
|
result.line line
|
@@ -2095,14 +2128,13 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2095
2128
|
}
|
2096
2129
|
|
2097
2130
|
case_body: k_when
|
2098
|
-
{
|
2099
|
-
result = self.lexer.lineno
|
2100
|
-
}
|
2101
2131
|
case_args then compstmt cases
|
2102
2132
|
{
|
2103
|
-
|
2104
|
-
|
2105
|
-
result
|
2133
|
+
(_, line), case_args, _then, body, cases = val
|
2134
|
+
|
2135
|
+
result = new_when case_args, body
|
2136
|
+
result.line line
|
2137
|
+
result << cases if cases
|
2106
2138
|
}
|
2107
2139
|
|
2108
2140
|
cases: opt_else | case_body
|
@@ -2341,6 +2373,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2341
2373
|
result = new_array_pattern_tail both, nil, nil, nil
|
2342
2374
|
result.line head.line
|
2343
2375
|
}
|
2376
|
+
#if V < 32
|
2344
2377
|
| p_args_head tSTAR tIDENTIFIER
|
2345
2378
|
{
|
2346
2379
|
head, _, (id, _line) = val
|
@@ -2367,6 +2400,20 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2367
2400
|
|
2368
2401
|
result = new_array_pattern_tail(head, true, nil, post).line head.line
|
2369
2402
|
}
|
2403
|
+
#else
|
2404
|
+
| p_args_head p_rest
|
2405
|
+
{
|
2406
|
+
head, (rest, _) = val
|
2407
|
+
|
2408
|
+
result = new_array_pattern_tail(head, true, rest, nil).line head.line
|
2409
|
+
}
|
2410
|
+
| p_args_head p_rest tCOMMA p_args_post
|
2411
|
+
{
|
2412
|
+
head, (rest, _), _, post = val
|
2413
|
+
|
2414
|
+
result = new_array_pattern_tail(head, true, rest, post).line head.line
|
2415
|
+
}
|
2416
|
+
#endif
|
2370
2417
|
| p_args_tail
|
2371
2418
|
|
2372
2419
|
p_args_head: p_arg tCOMMA
|
@@ -2751,15 +2798,17 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2751
2798
|
|
2752
2799
|
words: tWORDS_BEG tSPACE tSTRING_END
|
2753
2800
|
{
|
2754
|
-
(_, line), _, _ = val
|
2801
|
+
(_, line), _, (_, line_max) = val
|
2755
2802
|
|
2756
2803
|
result = s(:array).line line
|
2804
|
+
result.line_max = line_max
|
2757
2805
|
}
|
2758
2806
|
| tWORDS_BEG word_list tSTRING_END
|
2759
2807
|
{
|
2760
|
-
(_, line), list, _ = val
|
2808
|
+
(_, line), list, (_, line_max) = val
|
2761
2809
|
|
2762
2810
|
result = list.line line
|
2811
|
+
result.line_max = line_max
|
2763
2812
|
}
|
2764
2813
|
|
2765
2814
|
word_list: none
|
@@ -2779,15 +2828,17 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2779
2828
|
|
2780
2829
|
symbols: tSYMBOLS_BEG tSPACE tSTRING_END
|
2781
2830
|
{
|
2782
|
-
(_, line), _, _ = val
|
2831
|
+
(_, line), _, (_, line_max) = val
|
2783
2832
|
|
2784
2833
|
result = s(:array).line line
|
2834
|
+
result.line_max = line_max
|
2785
2835
|
}
|
2786
2836
|
| tSYMBOLS_BEG symbol_list tSTRING_END
|
2787
2837
|
{
|
2788
|
-
(_, line), list, _, = val
|
2789
|
-
|
2790
|
-
result = list
|
2838
|
+
(_, line), list, (_, line_max), = val
|
2839
|
+
|
2840
|
+
result = list.line line
|
2841
|
+
result.line_max = line_max
|
2791
2842
|
}
|
2792
2843
|
|
2793
2844
|
symbol_list: none
|
@@ -2802,28 +2853,32 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2802
2853
|
|
2803
2854
|
qwords: tQWORDS_BEG tSPACE tSTRING_END
|
2804
2855
|
{
|
2805
|
-
(_, line), _, _ = val
|
2856
|
+
(_, line), _, (_, line_max) = val
|
2806
2857
|
|
2807
2858
|
result = s(:array).line line
|
2859
|
+
result.line_max = line_max
|
2808
2860
|
}
|
2809
2861
|
| tQWORDS_BEG qword_list tSTRING_END
|
2810
2862
|
{
|
2811
|
-
(_, line), list, _ = val
|
2863
|
+
(_, line), list, (_, line_max) = val
|
2812
2864
|
|
2813
2865
|
result = list.line line
|
2866
|
+
result.line_max = line_max
|
2814
2867
|
}
|
2815
2868
|
|
2816
2869
|
qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END
|
2817
2870
|
{
|
2818
|
-
(_, line), _, _ = val
|
2871
|
+
(_, line), _, (_, line_max) = val
|
2819
2872
|
|
2820
2873
|
result = s(:array).line line
|
2874
|
+
result.line_max = line_max
|
2821
2875
|
}
|
2822
2876
|
| tQSYMBOLS_BEG qsym_list tSTRING_END
|
2823
2877
|
{
|
2824
|
-
(_, line), list, _ = val
|
2878
|
+
(_, line), list, (_, line_max) = val
|
2825
2879
|
|
2826
2880
|
result = list.line line
|
2881
|
+
result.line_max = line_max
|
2827
2882
|
}
|
2828
2883
|
|
2829
2884
|
qword_list: none
|
@@ -2898,7 +2953,6 @@ regexp_contents: none
|
|
2898
2953
|
lexer.brace_nest,
|
2899
2954
|
lexer.string_nest, # TODO: remove
|
2900
2955
|
lexer.lex_state,
|
2901
|
-
lexer.lineno,
|
2902
2956
|
]
|
2903
2957
|
|
2904
2958
|
lexer.cmdarg.push false
|
@@ -2913,9 +2967,9 @@ regexp_contents: none
|
|
2913
2967
|
compstmt
|
2914
2968
|
tSTRING_DEND
|
2915
2969
|
{
|
2916
|
-
_, memo, stmt, _ = val
|
2970
|
+
(_, line), memo, stmt, _ = val
|
2917
2971
|
|
2918
|
-
lex_strterm, brace_nest, string_nest, oldlex_state
|
2972
|
+
lex_strterm, brace_nest, string_nest, oldlex_state = memo
|
2919
2973
|
# TODO: heredoc_indent
|
2920
2974
|
|
2921
2975
|
lexer.lex_strterm = lex_strterm
|
@@ -2975,11 +3029,11 @@ regexp_contents: none
|
|
2975
3029
|
|
2976
3030
|
dsym: tSYMBEG string_contents tSTRING_END
|
2977
3031
|
{
|
2978
|
-
_, result, _ = val
|
3032
|
+
(_, line), result, _ = val
|
2979
3033
|
|
2980
3034
|
lexer.lex_state = EXPR_END
|
2981
3035
|
|
2982
|
-
result ||= s(:str, "").line
|
3036
|
+
result ||= s(:str, "").line line
|
2983
3037
|
|
2984
3038
|
case result.sexp_type
|
2985
3039
|
when :dstr then
|
@@ -3017,15 +3071,15 @@ regexp_contents: none
|
|
3017
3071
|
| tCONSTANT
|
3018
3072
|
| tCVAR
|
3019
3073
|
|
3020
|
-
keyword_variable: kNIL { result = s(:nil).line
|
3021
|
-
| kSELF { result = s(:self).line
|
3022
|
-
| kTRUE { result = s(:true).line
|
3023
|
-
| kFALSE { result = s(:false).line
|
3024
|
-
| k__FILE__ { result = s(:str, self.file).line
|
3025
|
-
| k__LINE__ { result = s(:lit,
|
3074
|
+
keyword_variable: kNIL { (_, line), = val; result = s(:nil).line line }
|
3075
|
+
| kSELF { (_, line), = val; result = s(:self).line line }
|
3076
|
+
| kTRUE { (_, line), = val; result = s(:true).line line }
|
3077
|
+
| kFALSE { (_, line), = val; result = s(:false).line line }
|
3078
|
+
| k__FILE__ { (_, line), = val; result = s(:str, self.file).line line }
|
3079
|
+
| k__LINE__ { (_, line), = val; result = s(:lit, line).line line }
|
3026
3080
|
| k__ENCODING__
|
3027
3081
|
{
|
3028
|
-
l =
|
3082
|
+
(_, l), = val
|
3029
3083
|
result =
|
3030
3084
|
if defined? Encoding then
|
3031
3085
|
s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
|
@@ -3086,11 +3140,13 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
|
|
3086
3140
|
f_opt_paren_args: f_paren_args
|
3087
3141
|
| none
|
3088
3142
|
{
|
3143
|
+
self.in_argdef = false
|
3089
3144
|
result = end_args val
|
3090
3145
|
}
|
3091
3146
|
|
3092
3147
|
f_paren_args: tLPAREN2 f_args rparen
|
3093
3148
|
{
|
3149
|
+
self.in_argdef = false
|
3094
3150
|
result = end_args val
|
3095
3151
|
}
|
3096
3152
|
#if V == 30
|
@@ -3108,10 +3164,12 @@ f_opt_paren_args: f_paren_args
|
|
3108
3164
|
| {
|
3109
3165
|
result = self.in_kwarg
|
3110
3166
|
self.in_kwarg = true
|
3167
|
+
self.in_argdef = true
|
3111
3168
|
self.lexer.lex_state |= EXPR_LABEL
|
3112
3169
|
}
|
3113
3170
|
f_args term
|
3114
3171
|
{
|
3172
|
+
self.in_argdef = false
|
3115
3173
|
result = end_args val
|
3116
3174
|
}
|
3117
3175
|
|
@@ -3200,12 +3258,12 @@ f_opt_paren_args: f_paren_args
|
|
3200
3258
|
|
|
3201
3259
|
{
|
3202
3260
|
result = args val
|
3203
|
-
# result.line lexer.lineno
|
3204
3261
|
}
|
3205
3262
|
|
3206
3263
|
args_forward: tBDOT3
|
3207
3264
|
{
|
3208
|
-
|
3265
|
+
(_, line), = val
|
3266
|
+
result = s(:forward_args).line line
|
3209
3267
|
}
|
3210
3268
|
|
3211
3269
|
f_bad_arg: tCONSTANT
|
@@ -3259,10 +3317,25 @@ f_opt_paren_args: f_paren_args
|
|
3259
3317
|
result = s(:args, list).line list.line
|
3260
3318
|
end
|
3261
3319
|
|
3262
|
-
|
3320
|
+
if Sexp === item then
|
3321
|
+
line_max = item.line_max
|
3322
|
+
else
|
3323
|
+
item, line_max = item
|
3324
|
+
end
|
3325
|
+
|
3326
|
+
result << item
|
3327
|
+
result.line_max = line_max
|
3263
3328
|
}
|
3264
3329
|
|
3265
3330
|
f_label: tLABEL
|
3331
|
+
{
|
3332
|
+
label, = val
|
3333
|
+
# arg_var(p, formal_argument(p, $1));
|
3334
|
+
# p->cur_arg = get_id($1);
|
3335
|
+
# p->max_numparam = ORDINAL_PARAM;
|
3336
|
+
self.in_argdef = false
|
3337
|
+
result = label
|
3338
|
+
}
|
3266
3339
|
|
3267
3340
|
f_kw: f_label arg_value
|
3268
3341
|
{
|
@@ -3271,6 +3344,7 @@ f_opt_paren_args: f_paren_args
|
|
3271
3344
|
|
3272
3345
|
identifier = label.to_sym
|
3273
3346
|
self.env[identifier] = :lvar
|
3347
|
+
self.in_argdef = true
|
3274
3348
|
|
3275
3349
|
kwarg = s(:kwarg, identifier, arg).line line
|
3276
3350
|
result = s(:array, kwarg).line line
|
@@ -3281,6 +3355,7 @@ f_opt_paren_args: f_paren_args
|
|
3281
3355
|
|
3282
3356
|
id = label.to_sym
|
3283
3357
|
self.env[id] = :lvar
|
3358
|
+
self.in_argdef = true
|
3284
3359
|
|
3285
3360
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3286
3361
|
}
|
@@ -3291,6 +3366,7 @@ f_opt_paren_args: f_paren_args
|
|
3291
3366
|
(label, line), expr = val
|
3292
3367
|
id = label.to_sym
|
3293
3368
|
self.env[id] = :lvar
|
3369
|
+
self.in_argdef = true
|
3294
3370
|
|
3295
3371
|
result = s(:array, s(:kwarg, id, expr).line(line)).line line
|
3296
3372
|
}
|
@@ -3300,6 +3376,7 @@ f_opt_paren_args: f_paren_args
|
|
3300
3376
|
(label, line), = val
|
3301
3377
|
id = label.to_sym
|
3302
3378
|
self.env[id] = :lvar
|
3379
|
+
self.in_argdef = true
|
3303
3380
|
|
3304
3381
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3305
3382
|
}
|
@@ -3336,9 +3413,10 @@ f_opt_paren_args: f_paren_args
|
|
3336
3413
|
}
|
3337
3414
|
| kwrest_mark
|
3338
3415
|
{
|
3416
|
+
(_, line), = val
|
3339
3417
|
id = :"**"
|
3340
|
-
self.env[id] = :lvar
|
3341
|
-
result = [id,
|
3418
|
+
self.env[id] = :lvar
|
3419
|
+
result = [id, line]
|
3342
3420
|
}
|
3343
3421
|
|
3344
3422
|
f_opt: f_arg_asgn
|
@@ -3350,10 +3428,10 @@ f_opt_paren_args: f_paren_args
|
|
3350
3428
|
arg_value
|
3351
3429
|
{
|
3352
3430
|
lhs, _, rhs = val
|
3431
|
+
self.in_argdef = true
|
3353
3432
|
result = self.assignable lhs, rhs
|
3354
3433
|
# TODO: detect duplicate names
|
3355
3434
|
# TODO? p->cur_arg = 0;
|
3356
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3357
3435
|
}
|
3358
3436
|
|
3359
3437
|
f_block_opt: f_arg_asgn
|
@@ -3365,9 +3443,9 @@ f_opt_paren_args: f_paren_args
|
|
3365
3443
|
primary_value
|
3366
3444
|
{
|
3367
3445
|
lhs, _, rhs = val
|
3446
|
+
self.in_argdef = true
|
3368
3447
|
result = self.assignable lhs, rhs
|
3369
3448
|
# TODO? p->cur_arg = 0;
|
3370
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3371
3449
|
}
|
3372
3450
|
|
3373
3451
|
f_block_optarg: f_block_opt
|
@@ -3404,9 +3482,10 @@ f_opt_paren_args: f_paren_args
|
|
3404
3482
|
}
|
3405
3483
|
| restarg_mark
|
3406
3484
|
{
|
3485
|
+
(_, line), = val
|
3407
3486
|
name = :"*"
|
3408
3487
|
self.env[name] = :lvar
|
3409
|
-
result = [name,
|
3488
|
+
result = [name, line]
|
3410
3489
|
}
|
3411
3490
|
|
3412
3491
|
blkarg_mark: tAMPER2 | tAMPER
|
@@ -3497,6 +3576,13 @@ f_opt_paren_args: f_paren_args
|
|
3497
3576
|
line = arg.line
|
3498
3577
|
result = s(:array, s(:kwsplat, arg).line(line)).line line
|
3499
3578
|
}
|
3579
|
+
#if V >= 32
|
3580
|
+
| tDSTAR
|
3581
|
+
{
|
3582
|
+
(_, line), = val
|
3583
|
+
result = s(:array, s(:kwsplat).line(line)).line line
|
3584
|
+
}
|
3585
|
+
#endif
|
3500
3586
|
|
3501
3587
|
operation: tIDENTIFIER | tCONSTANT | tFID
|
3502
3588
|
operation2: tIDENTIFIER | tCONSTANT | tFID | op
|
@@ -3511,11 +3597,10 @@ f_opt_paren_args: f_paren_args
|
|
3511
3597
|
opt_terms: | terms
|
3512
3598
|
opt_nl: | tNL
|
3513
3599
|
rparen: opt_nl tRPAREN
|
3514
|
-
|
3515
|
-
|
3516
|
-
|
3517
|
-
|
3518
|
-
# }
|
3600
|
+
{
|
3601
|
+
_, close = val # TODO: include lineno in close?
|
3602
|
+
result = [close, lexer.lineno]
|
3603
|
+
}
|
3519
3604
|
rbracket: opt_nl tRBRACK
|
3520
3605
|
{
|
3521
3606
|
_, close = val
|