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/ruby32_parser.y
CHANGED
@@ -96,9 +96,9 @@ rule
|
|
96
96
|
result = iter
|
97
97
|
}
|
98
98
|
|
99
|
-
begin_block: tLCURLY
|
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
|
@@ -407,6 +408,7 @@ rule
|
|
407
408
|
defs_head: k_def singleton dot_or_colon
|
408
409
|
{
|
409
410
|
lexer.lex_state = EXPR_FNAME
|
411
|
+
self.in_argdef = true
|
410
412
|
}
|
411
413
|
def_name
|
412
414
|
{
|
@@ -620,7 +622,7 @@ rule
|
|
620
622
|
}
|
621
623
|
| tSTAR
|
622
624
|
{
|
623
|
-
l =
|
625
|
+
(_, l), = val
|
624
626
|
result = s(:masgn, s(:array, s(:splat).line(l)).line(l)).line l
|
625
627
|
}
|
626
628
|
| tSTAR tCOMMA mlhs_post
|
@@ -1130,8 +1132,10 @@ rule
|
|
1130
1132
|
|
1131
1133
|
paren_args: tLPAREN2 opt_call_args rparen
|
1132
1134
|
{
|
1133
|
-
_, args, _ = val
|
1135
|
+
_, args, (_, line_max) = val
|
1136
|
+
|
1134
1137
|
result = args
|
1138
|
+
result.line_max = line_max if args
|
1135
1139
|
}
|
1136
1140
|
| tLPAREN2 args tCOMMA args_forward rparen
|
1137
1141
|
{
|
@@ -1248,7 +1252,7 @@ rule
|
|
1248
1252
|
args: arg_value
|
1249
1253
|
{
|
1250
1254
|
arg, = val
|
1251
|
-
lineno = arg.line
|
1255
|
+
lineno = arg.line
|
1252
1256
|
|
1253
1257
|
result = s(:array, arg).line lineno
|
1254
1258
|
}
|
@@ -1257,6 +1261,11 @@ rule
|
|
1257
1261
|
_, arg = val
|
1258
1262
|
result = s(:array, s(:splat, arg).line(arg.line)).line arg.line
|
1259
1263
|
}
|
1264
|
+
| tSTAR
|
1265
|
+
{
|
1266
|
+
(_, line), = val
|
1267
|
+
result = s(:array, s(:splat).line(line)).line line
|
1268
|
+
}
|
1260
1269
|
| args tCOMMA arg_value
|
1261
1270
|
{
|
1262
1271
|
args, _, id = val
|
@@ -1264,11 +1273,14 @@ rule
|
|
1264
1273
|
}
|
1265
1274
|
| args tCOMMA tSTAR arg_value
|
1266
1275
|
{
|
1267
|
-
|
1268
|
-
args, _, _, id = val
|
1269
|
-
line = lexer.lineno
|
1276
|
+
args, _, (_, line), id = val
|
1270
1277
|
result = self.list_append args, s(:splat, id).line(line)
|
1271
1278
|
}
|
1279
|
+
| args tCOMMA tSTAR
|
1280
|
+
{
|
1281
|
+
args, _, (_, line) = val
|
1282
|
+
result = self.list_append args, s(:splat).line(line)
|
1283
|
+
}
|
1272
1284
|
|
1273
1285
|
mrhs_arg: mrhs
|
1274
1286
|
{
|
@@ -1285,7 +1297,6 @@ rule
|
|
1285
1297
|
}
|
1286
1298
|
| args tCOMMA tSTAR arg_value
|
1287
1299
|
{
|
1288
|
-
# TODO: make all tXXXX terminals include lexer.lineno
|
1289
1300
|
arg, _, _, splat = val
|
1290
1301
|
result = self.arg_concat arg, splat
|
1291
1302
|
}
|
@@ -1314,7 +1325,6 @@ rule
|
|
1314
1325
|
| k_begin
|
1315
1326
|
{
|
1316
1327
|
lexer.cmdarg.push false
|
1317
|
-
result = self.lexer.lineno
|
1318
1328
|
}
|
1319
1329
|
bodystmt k_end
|
1320
1330
|
{
|
@@ -1324,11 +1334,10 @@ rule
|
|
1324
1334
|
| tLPAREN_ARG
|
1325
1335
|
{
|
1326
1336
|
lexer.lex_state = EXPR_ENDARG
|
1327
|
-
result = lexer.lineno
|
1328
1337
|
}
|
1329
1338
|
rparen
|
1330
1339
|
{
|
1331
|
-
_, line, _ = val
|
1340
|
+
(_, line), _, _ = val
|
1332
1341
|
result = s(:begin).line line
|
1333
1342
|
}
|
1334
1343
|
| tLPAREN_ARG
|
@@ -1344,9 +1353,8 @@ rule
|
|
1344
1353
|
}
|
1345
1354
|
| tLPAREN compstmt tRPAREN
|
1346
1355
|
{
|
1347
|
-
_, stmt, _ = val
|
1348
|
-
result = stmt
|
1349
|
-
result ||= s(:nil).line lexer.lineno
|
1356
|
+
(_, line), stmt, _ = val
|
1357
|
+
result = stmt || s(:nil).line(line)
|
1350
1358
|
result.paren = true
|
1351
1359
|
}
|
1352
1360
|
| primary_value tCOLON2 tCONSTANT
|
@@ -1359,12 +1367,14 @@ rule
|
|
1359
1367
|
{
|
1360
1368
|
result = wrap :colon3, val[1]
|
1361
1369
|
}
|
1362
|
-
| tLBRACK
|
1370
|
+
| tLBRACK aref_args rbracket
|
1363
1371
|
{
|
1364
|
-
_, line, args, _ = val
|
1372
|
+
(_, line), args, (_, line_max) = val
|
1373
|
+
|
1365
1374
|
result = args || s(:array)
|
1366
1375
|
result.sexp_type = :array # aref_args is :args
|
1367
1376
|
result.line line
|
1377
|
+
result.line_max = line_max
|
1368
1378
|
}
|
1369
1379
|
| tLBRACE
|
1370
1380
|
{
|
@@ -1475,9 +1485,6 @@ rule
|
|
1475
1485
|
result = new_for iter, var, body
|
1476
1486
|
}
|
1477
1487
|
| k_class
|
1478
|
-
{
|
1479
|
-
result = self.lexer.lineno
|
1480
|
-
}
|
1481
1488
|
cpath superclass
|
1482
1489
|
{
|
1483
1490
|
if (self.in_def || self.in_single > 0) then
|
@@ -1492,9 +1499,6 @@ rule
|
|
1492
1499
|
self.lexer.ignore_body_comments
|
1493
1500
|
}
|
1494
1501
|
| k_class tLSHFT
|
1495
|
-
{
|
1496
|
-
result = self.lexer.lineno
|
1497
|
-
}
|
1498
1502
|
expr
|
1499
1503
|
{
|
1500
1504
|
result = self.in_def
|
@@ -1506,16 +1510,14 @@ rule
|
|
1506
1510
|
self.in_single = 0
|
1507
1511
|
self.env.extend
|
1508
1512
|
}
|
1509
|
-
bodystmt
|
1513
|
+
bodystmt
|
1514
|
+
k_end
|
1510
1515
|
{
|
1511
1516
|
result = new_sclass val
|
1512
1517
|
self.env.unextend
|
1513
1518
|
self.lexer.ignore_body_comments
|
1514
1519
|
}
|
1515
1520
|
| k_module
|
1516
|
-
{
|
1517
|
-
result = self.lexer.lineno
|
1518
|
-
}
|
1519
1521
|
cpath
|
1520
1522
|
{
|
1521
1523
|
yyerror "module definition in method body" if
|
@@ -1618,6 +1620,7 @@ rule
|
|
1618
1620
|
k_def: kDEF
|
1619
1621
|
{
|
1620
1622
|
self.comments.push self.lexer.comments
|
1623
|
+
self.in_argdef = true
|
1621
1624
|
}
|
1622
1625
|
k_do: kDO
|
1623
1626
|
k_do_block: kDO_BLOCK
|
@@ -1657,20 +1660,33 @@ rule
|
|
1657
1660
|
}
|
1658
1661
|
|
1659
1662
|
f_marg: f_norm_arg
|
1663
|
+
{
|
1664
|
+
(sym, line), = val
|
1665
|
+
|
1666
|
+
result = s(:dummy, sym).line line
|
1667
|
+
}
|
1660
1668
|
| tLPAREN f_margs rparen
|
1661
1669
|
{
|
1662
|
-
|
1670
|
+
_, args, _ = val
|
1671
|
+
result = args
|
1663
1672
|
}
|
1664
1673
|
|
1665
1674
|
f_marg_list: f_marg
|
1666
1675
|
{
|
1667
|
-
|
1676
|
+
arg, = val
|
1677
|
+
line = arg.line
|
1668
1678
|
|
1669
|
-
|
1679
|
+
arg = arg.last if arg.sexp_type == :dummy
|
1680
|
+
|
1681
|
+
result = s(:array, arg).line line
|
1670
1682
|
}
|
1671
1683
|
| f_marg_list tCOMMA f_marg
|
1672
1684
|
{
|
1673
|
-
|
1685
|
+
args, _, arg = val
|
1686
|
+
|
1687
|
+
arg = arg.last if arg.sexp_type == :dummy
|
1688
|
+
|
1689
|
+
result = list_append args, arg
|
1674
1690
|
}
|
1675
1691
|
|
1676
1692
|
f_margs: f_marg_list
|
@@ -1713,14 +1729,14 @@ rule
|
|
1713
1729
|
}
|
1714
1730
|
| tSTAR
|
1715
1731
|
{
|
1716
|
-
|
1717
|
-
result.line
|
1732
|
+
(_, line), = val
|
1733
|
+
result = args([:*]).line line
|
1718
1734
|
}
|
1719
1735
|
|
1720
1736
|
f_any_kwrest: f_kwrest
|
1721
1737
|
| f_no_kwarg
|
1722
1738
|
|
1723
|
-
f_eq:
|
1739
|
+
f_eq: { self.in_argdef = false } tEQL
|
1724
1740
|
|
1725
1741
|
block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
|
1726
1742
|
{
|
@@ -1824,15 +1840,19 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1824
1840
|
{
|
1825
1841
|
# TODO: current_arg = 0
|
1826
1842
|
result = args val
|
1843
|
+
self.in_argdef = false
|
1827
1844
|
}
|
1828
1845
|
| tOROP
|
1829
1846
|
{
|
1830
|
-
|
1847
|
+
(_, line), = val
|
1848
|
+
|
1849
|
+
result = s(:args).line line
|
1831
1850
|
}
|
1832
1851
|
| tPIPE block_param opt_bv_decl tPIPE
|
1833
1852
|
{
|
1834
1853
|
# TODO: current_arg = 0
|
1835
1854
|
result = args val
|
1855
|
+
self.in_argdef = false
|
1836
1856
|
}
|
1837
1857
|
|
1838
1858
|
opt_bv_decl: opt_nl
|
@@ -1859,7 +1879,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1859
1879
|
lambda: tLAMBDA
|
1860
1880
|
{
|
1861
1881
|
self.env.extend :dynamic
|
1862
|
-
result =
|
1882
|
+
result = lexer.lpar_beg
|
1863
1883
|
lexer.paren_nest += 1
|
1864
1884
|
lexer.lpar_beg = lexer.paren_nest
|
1865
1885
|
}
|
@@ -1869,7 +1889,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1869
1889
|
}
|
1870
1890
|
lambda_body
|
1871
1891
|
{
|
1872
|
-
_,
|
1892
|
+
(_, line), lpar, args, _cmdarg, body = val
|
1873
1893
|
lexer.lpar_beg = lpar
|
1874
1894
|
|
1875
1895
|
lexer.cmdarg.pop
|
@@ -1882,10 +1902,12 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1882
1902
|
|
1883
1903
|
f_larglist: tLPAREN2 f_args opt_bv_decl rparen
|
1884
1904
|
{
|
1905
|
+
self.in_argdef = false
|
1885
1906
|
result = args val
|
1886
1907
|
}
|
1887
1908
|
| f_args
|
1888
1909
|
{
|
1910
|
+
self.in_argdef = false
|
1889
1911
|
result = val[0]
|
1890
1912
|
result = 0 if result == s(:args)
|
1891
1913
|
}
|
@@ -1953,13 +1975,19 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1953
1975
|
{
|
1954
1976
|
call, args = val
|
1955
1977
|
|
1956
|
-
result = call
|
1978
|
+
result = call
|
1979
|
+
|
1980
|
+
if args then
|
1981
|
+
call.concat args.sexp_body
|
1982
|
+
result.line_max = args.line_max
|
1983
|
+
end
|
1957
1984
|
}
|
1958
1985
|
| primary_value call_op operation2 opt_paren_args
|
1959
1986
|
{
|
1960
|
-
recv, call_op, (op,
|
1987
|
+
recv, call_op, (op, op_line), args = val
|
1961
1988
|
|
1962
1989
|
result = new_call recv, op.to_sym, args, call_op
|
1990
|
+
result.line_max = op_line unless args
|
1963
1991
|
}
|
1964
1992
|
| primary_value tCOLON2 operation2 paren_args
|
1965
1993
|
{
|
@@ -1987,7 +2015,8 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1987
2015
|
}
|
1988
2016
|
| kSUPER
|
1989
2017
|
{
|
1990
|
-
|
2018
|
+
(_, line), = val
|
2019
|
+
result = s(:zsuper).line line
|
1991
2020
|
}
|
1992
2021
|
| primary_value tLBRACK2 opt_call_args rbracket
|
1993
2022
|
{
|
@@ -1997,11 +2026,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1997
2026
|
brace_block: tLCURLY
|
1998
2027
|
{
|
1999
2028
|
self.env.extend :dynamic
|
2000
|
-
result = self.lexer.lineno
|
2001
2029
|
}
|
2002
|
-
brace_body
|
2030
|
+
brace_body
|
2031
|
+
tRCURLY
|
2003
2032
|
{
|
2004
|
-
_, line, body, _ = val
|
2033
|
+
(_, line), _, body, _ = val
|
2005
2034
|
|
2006
2035
|
result = body
|
2007
2036
|
result.line line
|
@@ -2011,11 +2040,11 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2011
2040
|
| k_do
|
2012
2041
|
{
|
2013
2042
|
self.env.extend :dynamic
|
2014
|
-
result = self.lexer.lineno
|
2015
2043
|
}
|
2016
|
-
do_body
|
2044
|
+
do_body
|
2045
|
+
kEND
|
2017
2046
|
{
|
2018
|
-
_, line, body, _ = val
|
2047
|
+
(_, line), _, body, _ = val
|
2019
2048
|
|
2020
2049
|
result = body
|
2021
2050
|
result.line line
|
@@ -2073,14 +2102,13 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2073
2102
|
}
|
2074
2103
|
|
2075
2104
|
case_body: k_when
|
2076
|
-
{
|
2077
|
-
result = self.lexer.lineno
|
2078
|
-
}
|
2079
2105
|
case_args then compstmt cases
|
2080
2106
|
{
|
2081
|
-
|
2082
|
-
|
2083
|
-
result
|
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
|
2084
2112
|
}
|
2085
2113
|
|
2086
2114
|
cases: opt_else | case_body
|
@@ -2317,31 +2345,17 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2317
2345
|
result = new_array_pattern_tail both, nil, nil, nil
|
2318
2346
|
result.line head.line
|
2319
2347
|
}
|
2320
|
-
| p_args_head
|
2348
|
+
| p_args_head p_rest
|
2321
2349
|
{
|
2322
|
-
head,
|
2350
|
+
head, (rest, _) = val
|
2323
2351
|
|
2324
|
-
result = new_array_pattern_tail
|
2325
|
-
result.line head.line
|
2326
|
-
}
|
2327
|
-
| p_args_head tSTAR tIDENTIFIER tCOMMA p_args_post
|
2328
|
-
{
|
2329
|
-
head, _, (id, _line), _, post = val
|
2330
|
-
|
2331
|
-
result = new_array_pattern_tail head, true, id.to_sym, post
|
2332
|
-
result.line head.line
|
2352
|
+
result = new_array_pattern_tail(head, true, rest, nil).line head.line
|
2333
2353
|
}
|
2334
|
-
| p_args_head
|
2354
|
+
| p_args_head p_rest tCOMMA p_args_post
|
2335
2355
|
{
|
2336
|
-
|
2356
|
+
head, (rest, _), _, post = val
|
2337
2357
|
|
2338
|
-
result = new_array_pattern_tail(
|
2339
|
-
}
|
2340
|
-
| p_args_head tSTAR tCOMMA p_args_post
|
2341
|
-
{
|
2342
|
-
head, _, _, post = val
|
2343
|
-
|
2344
|
-
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
|
2345
2359
|
}
|
2346
2360
|
| p_args_tail
|
2347
2361
|
|
@@ -2716,15 +2730,17 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2716
2730
|
|
2717
2731
|
words: tWORDS_BEG tSPACE tSTRING_END
|
2718
2732
|
{
|
2719
|
-
(_, line), _, _ = val
|
2733
|
+
(_, line), _, (_, line_max) = val
|
2720
2734
|
|
2721
2735
|
result = s(:array).line line
|
2736
|
+
result.line_max = line_max
|
2722
2737
|
}
|
2723
2738
|
| tWORDS_BEG word_list tSTRING_END
|
2724
2739
|
{
|
2725
|
-
(_, line), list, _ = val
|
2740
|
+
(_, line), list, (_, line_max) = val
|
2726
2741
|
|
2727
2742
|
result = list.line line
|
2743
|
+
result.line_max = line_max
|
2728
2744
|
}
|
2729
2745
|
|
2730
2746
|
word_list: none
|
@@ -2744,15 +2760,17 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2744
2760
|
|
2745
2761
|
symbols: tSYMBOLS_BEG tSPACE tSTRING_END
|
2746
2762
|
{
|
2747
|
-
(_, line), _, _ = val
|
2763
|
+
(_, line), _, (_, line_max) = val
|
2748
2764
|
|
2749
2765
|
result = s(:array).line line
|
2766
|
+
result.line_max = line_max
|
2750
2767
|
}
|
2751
2768
|
| tSYMBOLS_BEG symbol_list tSTRING_END
|
2752
2769
|
{
|
2753
|
-
(_, line), list, _, = val
|
2754
|
-
|
2755
|
-
result = list
|
2770
|
+
(_, line), list, (_, line_max), = val
|
2771
|
+
|
2772
|
+
result = list.line line
|
2773
|
+
result.line_max = line_max
|
2756
2774
|
}
|
2757
2775
|
|
2758
2776
|
symbol_list: none
|
@@ -2767,28 +2785,32 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2767
2785
|
|
2768
2786
|
qwords: tQWORDS_BEG tSPACE tSTRING_END
|
2769
2787
|
{
|
2770
|
-
(_, line), _, _ = val
|
2788
|
+
(_, line), _, (_, line_max) = val
|
2771
2789
|
|
2772
2790
|
result = s(:array).line line
|
2791
|
+
result.line_max = line_max
|
2773
2792
|
}
|
2774
2793
|
| tQWORDS_BEG qword_list tSTRING_END
|
2775
2794
|
{
|
2776
|
-
(_, line), list, _ = val
|
2795
|
+
(_, line), list, (_, line_max) = val
|
2777
2796
|
|
2778
2797
|
result = list.line line
|
2798
|
+
result.line_max = line_max
|
2779
2799
|
}
|
2780
2800
|
|
2781
2801
|
qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END
|
2782
2802
|
{
|
2783
|
-
(_, line), _, _ = val
|
2803
|
+
(_, line), _, (_, line_max) = val
|
2784
2804
|
|
2785
2805
|
result = s(:array).line line
|
2806
|
+
result.line_max = line_max
|
2786
2807
|
}
|
2787
2808
|
| tQSYMBOLS_BEG qsym_list tSTRING_END
|
2788
2809
|
{
|
2789
|
-
(_, line), list, _ = val
|
2810
|
+
(_, line), list, (_, line_max) = val
|
2790
2811
|
|
2791
2812
|
result = list.line line
|
2813
|
+
result.line_max = line_max
|
2792
2814
|
}
|
2793
2815
|
|
2794
2816
|
qword_list: none
|
@@ -2863,7 +2885,6 @@ regexp_contents: none
|
|
2863
2885
|
lexer.brace_nest,
|
2864
2886
|
lexer.string_nest, # TODO: remove
|
2865
2887
|
lexer.lex_state,
|
2866
|
-
lexer.lineno,
|
2867
2888
|
]
|
2868
2889
|
|
2869
2890
|
lexer.cmdarg.push false
|
@@ -2878,9 +2899,9 @@ regexp_contents: none
|
|
2878
2899
|
compstmt
|
2879
2900
|
tSTRING_DEND
|
2880
2901
|
{
|
2881
|
-
_, memo, stmt, _ = val
|
2902
|
+
(_, line), memo, stmt, _ = val
|
2882
2903
|
|
2883
|
-
lex_strterm, brace_nest, string_nest, oldlex_state
|
2904
|
+
lex_strterm, brace_nest, string_nest, oldlex_state = memo
|
2884
2905
|
# TODO: heredoc_indent
|
2885
2906
|
|
2886
2907
|
lexer.lex_strterm = lex_strterm
|
@@ -2940,11 +2961,11 @@ regexp_contents: none
|
|
2940
2961
|
|
2941
2962
|
dsym: tSYMBEG string_contents tSTRING_END
|
2942
2963
|
{
|
2943
|
-
_, result, _ = val
|
2964
|
+
(_, line), result, _ = val
|
2944
2965
|
|
2945
2966
|
lexer.lex_state = EXPR_END
|
2946
2967
|
|
2947
|
-
result ||= s(:str, "").line
|
2968
|
+
result ||= s(:str, "").line line
|
2948
2969
|
|
2949
2970
|
case result.sexp_type
|
2950
2971
|
when :dstr then
|
@@ -2980,15 +3001,15 @@ regexp_contents: none
|
|
2980
3001
|
| tCONSTANT
|
2981
3002
|
| tCVAR
|
2982
3003
|
|
2983
|
-
keyword_variable: kNIL { result = s(:nil).line
|
2984
|
-
| kSELF { result = s(:self).line
|
2985
|
-
| kTRUE { result = s(:true).line
|
2986
|
-
| kFALSE { result = s(:false).line
|
2987
|
-
| k__FILE__ { result = s(:str, self.file).line
|
2988
|
-
| k__LINE__ { result = s(:lit,
|
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 }
|
2989
3010
|
| k__ENCODING__
|
2990
3011
|
{
|
2991
|
-
l =
|
3012
|
+
(_, l), = val
|
2992
3013
|
result =
|
2993
3014
|
if defined? Encoding then
|
2994
3015
|
s(:colon2, s(:const, :Encoding).line(l), :UTF_8).line l
|
@@ -3049,11 +3070,13 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
|
|
3049
3070
|
f_opt_paren_args: f_paren_args
|
3050
3071
|
| none
|
3051
3072
|
{
|
3073
|
+
self.in_argdef = false
|
3052
3074
|
result = end_args val
|
3053
3075
|
}
|
3054
3076
|
|
3055
3077
|
f_paren_args: tLPAREN2 f_args rparen
|
3056
3078
|
{
|
3079
|
+
self.in_argdef = false
|
3057
3080
|
result = end_args val
|
3058
3081
|
}
|
3059
3082
|
|
@@ -3061,10 +3084,12 @@ f_opt_paren_args: f_paren_args
|
|
3061
3084
|
| {
|
3062
3085
|
result = self.in_kwarg
|
3063
3086
|
self.in_kwarg = true
|
3087
|
+
self.in_argdef = true
|
3064
3088
|
self.lexer.lex_state |= EXPR_LABEL
|
3065
3089
|
}
|
3066
3090
|
f_args term
|
3067
3091
|
{
|
3092
|
+
self.in_argdef = false
|
3068
3093
|
result = end_args val
|
3069
3094
|
}
|
3070
3095
|
|
@@ -3151,12 +3176,12 @@ f_opt_paren_args: f_paren_args
|
|
3151
3176
|
|
|
3152
3177
|
{
|
3153
3178
|
result = args val
|
3154
|
-
# result.line lexer.lineno
|
3155
3179
|
}
|
3156
3180
|
|
3157
3181
|
args_forward: tBDOT3
|
3158
3182
|
{
|
3159
|
-
|
3183
|
+
(_, line), = val
|
3184
|
+
result = s(:forward_args).line line
|
3160
3185
|
}
|
3161
3186
|
|
3162
3187
|
f_bad_arg: tCONSTANT
|
@@ -3210,10 +3235,25 @@ f_opt_paren_args: f_paren_args
|
|
3210
3235
|
result = s(:args, list).line list.line
|
3211
3236
|
end
|
3212
3237
|
|
3213
|
-
|
3238
|
+
if Sexp === item then
|
3239
|
+
line_max = item.line_max
|
3240
|
+
else
|
3241
|
+
item, line_max = item
|
3242
|
+
end
|
3243
|
+
|
3244
|
+
result << item
|
3245
|
+
result.line_max = line_max
|
3214
3246
|
}
|
3215
3247
|
|
3216
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
|
+
}
|
3217
3257
|
|
3218
3258
|
f_kw: f_label arg_value
|
3219
3259
|
{
|
@@ -3222,6 +3262,7 @@ f_opt_paren_args: f_paren_args
|
|
3222
3262
|
|
3223
3263
|
identifier = label.to_sym
|
3224
3264
|
self.env[identifier] = :lvar
|
3265
|
+
self.in_argdef = true
|
3225
3266
|
|
3226
3267
|
kwarg = s(:kwarg, identifier, arg).line line
|
3227
3268
|
result = s(:array, kwarg).line line
|
@@ -3232,6 +3273,7 @@ f_opt_paren_args: f_paren_args
|
|
3232
3273
|
|
3233
3274
|
id = label.to_sym
|
3234
3275
|
self.env[id] = :lvar
|
3276
|
+
self.in_argdef = true
|
3235
3277
|
|
3236
3278
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3237
3279
|
}
|
@@ -3242,6 +3284,7 @@ f_opt_paren_args: f_paren_args
|
|
3242
3284
|
(label, line), expr = val
|
3243
3285
|
id = label.to_sym
|
3244
3286
|
self.env[id] = :lvar
|
3287
|
+
self.in_argdef = true
|
3245
3288
|
|
3246
3289
|
result = s(:array, s(:kwarg, id, expr).line(line)).line line
|
3247
3290
|
}
|
@@ -3251,6 +3294,7 @@ f_opt_paren_args: f_paren_args
|
|
3251
3294
|
(label, line), = val
|
3252
3295
|
id = label.to_sym
|
3253
3296
|
self.env[id] = :lvar
|
3297
|
+
self.in_argdef = true
|
3254
3298
|
|
3255
3299
|
result = s(:array, s(:kwarg, id).line(line)).line line
|
3256
3300
|
}
|
@@ -3287,9 +3331,10 @@ f_opt_paren_args: f_paren_args
|
|
3287
3331
|
}
|
3288
3332
|
| kwrest_mark
|
3289
3333
|
{
|
3334
|
+
(_, line), = val
|
3290
3335
|
id = :"**"
|
3291
|
-
self.env[id] = :lvar
|
3292
|
-
result = [id,
|
3336
|
+
self.env[id] = :lvar
|
3337
|
+
result = [id, line]
|
3293
3338
|
}
|
3294
3339
|
|
3295
3340
|
f_opt: f_arg_asgn
|
@@ -3297,10 +3342,10 @@ f_opt_paren_args: f_paren_args
|
|
3297
3342
|
arg_value
|
3298
3343
|
{
|
3299
3344
|
lhs, _, rhs = val
|
3345
|
+
self.in_argdef = true
|
3300
3346
|
result = self.assignable lhs, rhs
|
3301
3347
|
# TODO: detect duplicate names
|
3302
3348
|
# TODO? p->cur_arg = 0;
|
3303
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3304
3349
|
}
|
3305
3350
|
|
3306
3351
|
f_block_opt: f_arg_asgn
|
@@ -3308,9 +3353,9 @@ f_opt_paren_args: f_paren_args
|
|
3308
3353
|
primary_value
|
3309
3354
|
{
|
3310
3355
|
lhs, _, rhs = val
|
3356
|
+
self.in_argdef = true
|
3311
3357
|
result = self.assignable lhs, rhs
|
3312
3358
|
# TODO? p->cur_arg = 0;
|
3313
|
-
# TODO? p->ctxt.in_argdef = 1;
|
3314
3359
|
}
|
3315
3360
|
|
3316
3361
|
f_block_optarg: f_block_opt
|
@@ -3347,9 +3392,10 @@ f_opt_paren_args: f_paren_args
|
|
3347
3392
|
}
|
3348
3393
|
| restarg_mark
|
3349
3394
|
{
|
3395
|
+
(_, line), = val
|
3350
3396
|
name = :"*"
|
3351
3397
|
self.env[name] = :lvar
|
3352
|
-
result = [name,
|
3398
|
+
result = [name, line]
|
3353
3399
|
}
|
3354
3400
|
|
3355
3401
|
blkarg_mark: tAMPER2 | tAMPER
|
@@ -3440,6 +3486,11 @@ f_opt_paren_args: f_paren_args
|
|
3440
3486
|
line = arg.line
|
3441
3487
|
result = s(:array, s(:kwsplat, arg).line(line)).line line
|
3442
3488
|
}
|
3489
|
+
| tDSTAR
|
3490
|
+
{
|
3491
|
+
(_, line), = val
|
3492
|
+
result = s(:array, s(:kwsplat).line(line)).line line
|
3493
|
+
}
|
3443
3494
|
|
3444
3495
|
operation: tIDENTIFIER | tCONSTANT | tFID
|
3445
3496
|
operation2: tIDENTIFIER | tCONSTANT | tFID | op
|
@@ -3454,11 +3505,10 @@ f_opt_paren_args: f_paren_args
|
|
3454
3505
|
opt_terms: | terms
|
3455
3506
|
opt_nl: | tNL
|
3456
3507
|
rparen: opt_nl tRPAREN
|
3457
|
-
|
3458
|
-
|
3459
|
-
|
3460
|
-
|
3461
|
-
# }
|
3508
|
+
{
|
3509
|
+
_, close = val # TODO: include lineno in close?
|
3510
|
+
result = [close, lexer.lineno]
|
3511
|
+
}
|
3462
3512
|
rbracket: opt_nl tRBRACK
|
3463
3513
|
{
|
3464
3514
|
_, close = val
|