parser 2.7.1.3 → 2.7.1.4
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
- data/.travis.yml +7 -7
- data/CHANGELOG.md +16 -1
- data/README.md +1 -0
- data/doc/AST_FORMAT.md +56 -2
- data/lib/parser/ast/processor.rb +2 -0
- data/lib/parser/builders/default.rb +50 -3
- data/lib/parser/context.rb +1 -0
- data/lib/parser/lexer.rl +8 -1
- data/lib/parser/macruby.y +14 -4
- data/lib/parser/meta.rb +2 -2
- data/lib/parser/ruby18.y +2 -0
- data/lib/parser/ruby19.y +14 -4
- data/lib/parser/ruby20.y +14 -4
- data/lib/parser/ruby21.y +9 -2
- data/lib/parser/ruby22.y +9 -2
- data/lib/parser/ruby23.y +9 -2
- data/lib/parser/ruby24.y +9 -2
- data/lib/parser/ruby25.y +9 -2
- data/lib/parser/ruby26.y +9 -2
- data/lib/parser/ruby27.y +15 -6
- data/lib/parser/ruby28.y +65 -38
- data/lib/parser/rubymotion.y +14 -4
- data/lib/parser/runner.rb +1 -1
- data/lib/parser/source/range.rb +1 -1
- data/lib/parser/source/tree_rewriter.rb +67 -1
- data/lib/parser/source/tree_rewriter/action.rb +39 -0
- data/lib/parser/version.rb +1 -1
- data/parser.gemspec +1 -1
- data/test/helper.rb +24 -0
- data/test/parse_helper.rb +16 -6
- data/test/test_parser.rb +225 -41
- data/test/test_source_tree_rewriter.rb +109 -11
- metadata +10 -10
data/lib/parser/ruby21.y
CHANGED
@@ -1029,11 +1029,15 @@ rule
|
|
1029
1029
|
result = @builder.block(val[0],
|
1030
1030
|
begin_t, args, body, end_t)
|
1031
1031
|
}
|
1032
|
-
| tLAMBDA
|
1032
|
+
| tLAMBDA
|
1033
|
+
{
|
1034
|
+
@context.push(:lambda)
|
1035
|
+
}
|
1036
|
+
lambda
|
1033
1037
|
{
|
1034
1038
|
lambda_call = @builder.call_lambda(val[0])
|
1035
1039
|
|
1036
|
-
args, (begin_t, body, end_t) = val[
|
1040
|
+
args, (begin_t, body, end_t) = val[2]
|
1037
1041
|
result = @builder.block(lambda_call,
|
1038
1042
|
begin_t, args, body, end_t)
|
1039
1043
|
}
|
@@ -1147,6 +1151,7 @@ rule
|
|
1147
1151
|
{
|
1148
1152
|
@static_env.extend_static
|
1149
1153
|
@lexer.push_cmdarg
|
1154
|
+
@context.push(:module)
|
1150
1155
|
}
|
1151
1156
|
bodystmt kEND
|
1152
1157
|
{
|
@@ -1159,6 +1164,7 @@ rule
|
|
1159
1164
|
|
1160
1165
|
@lexer.pop_cmdarg
|
1161
1166
|
@static_env.unextend
|
1167
|
+
@context.pop
|
1162
1168
|
}
|
1163
1169
|
| kDEF fname
|
1164
1170
|
{
|
@@ -1471,6 +1477,7 @@ opt_block_args_tail:
|
|
1471
1477
|
{
|
1472
1478
|
result = @lexer.cmdarg.dup
|
1473
1479
|
@lexer.cmdarg.clear
|
1480
|
+
@context.pop
|
1474
1481
|
}
|
1475
1482
|
lambda_body
|
1476
1483
|
{
|
data/lib/parser/ruby22.y
CHANGED
@@ -1028,11 +1028,15 @@ rule
|
|
1028
1028
|
result = @builder.block(val[0],
|
1029
1029
|
begin_t, args, body, end_t)
|
1030
1030
|
}
|
1031
|
-
| tLAMBDA
|
1031
|
+
| tLAMBDA
|
1032
|
+
{
|
1033
|
+
@context.push(:lambda)
|
1034
|
+
}
|
1035
|
+
lambda
|
1032
1036
|
{
|
1033
1037
|
lambda_call = @builder.call_lambda(val[0])
|
1034
1038
|
|
1035
|
-
args, (begin_t, body, end_t) = val[
|
1039
|
+
args, (begin_t, body, end_t) = val[2]
|
1036
1040
|
result = @builder.block(lambda_call,
|
1037
1041
|
begin_t, args, body, end_t)
|
1038
1042
|
}
|
@@ -1146,6 +1150,7 @@ rule
|
|
1146
1150
|
{
|
1147
1151
|
@static_env.extend_static
|
1148
1152
|
@lexer.push_cmdarg
|
1153
|
+
@context.push(:module)
|
1149
1154
|
}
|
1150
1155
|
bodystmt kEND
|
1151
1156
|
{
|
@@ -1158,6 +1163,7 @@ rule
|
|
1158
1163
|
|
1159
1164
|
@lexer.pop_cmdarg
|
1160
1165
|
@static_env.unextend
|
1166
|
+
@context.pop
|
1161
1167
|
}
|
1162
1168
|
| kDEF fname
|
1163
1169
|
{
|
@@ -1470,6 +1476,7 @@ opt_block_args_tail:
|
|
1470
1476
|
{
|
1471
1477
|
result = @lexer.cmdarg.dup
|
1472
1478
|
@lexer.cmdarg.clear
|
1479
|
+
@context.pop
|
1473
1480
|
}
|
1474
1481
|
lambda_body
|
1475
1482
|
{
|
data/lib/parser/ruby23.y
CHANGED
@@ -1028,11 +1028,15 @@ rule
|
|
1028
1028
|
result = @builder.block(val[0],
|
1029
1029
|
begin_t, args, body, end_t)
|
1030
1030
|
}
|
1031
|
-
| tLAMBDA
|
1031
|
+
| tLAMBDA
|
1032
|
+
{
|
1033
|
+
@context.push(:lambda)
|
1034
|
+
}
|
1035
|
+
lambda
|
1032
1036
|
{
|
1033
1037
|
lambda_call = @builder.call_lambda(val[0])
|
1034
1038
|
|
1035
|
-
args, (begin_t, body, end_t) = val[
|
1039
|
+
args, (begin_t, body, end_t) = val[2]
|
1036
1040
|
result = @builder.block(lambda_call,
|
1037
1041
|
begin_t, args, body, end_t)
|
1038
1042
|
}
|
@@ -1146,6 +1150,7 @@ rule
|
|
1146
1150
|
{
|
1147
1151
|
@static_env.extend_static
|
1148
1152
|
@lexer.push_cmdarg
|
1153
|
+
@context.push(:module)
|
1149
1154
|
}
|
1150
1155
|
bodystmt kEND
|
1151
1156
|
{
|
@@ -1158,6 +1163,7 @@ rule
|
|
1158
1163
|
|
1159
1164
|
@lexer.pop_cmdarg
|
1160
1165
|
@static_env.unextend
|
1166
|
+
@context.pop
|
1161
1167
|
}
|
1162
1168
|
| kDEF fname
|
1163
1169
|
{
|
@@ -1470,6 +1476,7 @@ opt_block_args_tail:
|
|
1470
1476
|
{
|
1471
1477
|
result = @lexer.cmdarg.dup
|
1472
1478
|
@lexer.cmdarg.clear
|
1479
|
+
@context.pop
|
1473
1480
|
}
|
1474
1481
|
lambda_body
|
1475
1482
|
{
|
data/lib/parser/ruby24.y
CHANGED
@@ -1047,11 +1047,15 @@ rule
|
|
1047
1047
|
result = @builder.block(val[0],
|
1048
1048
|
begin_t, args, body, end_t)
|
1049
1049
|
}
|
1050
|
-
| tLAMBDA
|
1050
|
+
| tLAMBDA
|
1051
|
+
{
|
1052
|
+
@context.push(:lambda)
|
1053
|
+
}
|
1054
|
+
lambda
|
1051
1055
|
{
|
1052
1056
|
lambda_call = @builder.call_lambda(val[0])
|
1053
1057
|
|
1054
|
-
args, (begin_t, body, end_t) = val[
|
1058
|
+
args, (begin_t, body, end_t) = val[2]
|
1055
1059
|
result = @builder.block(lambda_call,
|
1056
1060
|
begin_t, args, body, end_t)
|
1057
1061
|
}
|
@@ -1165,6 +1169,7 @@ rule
|
|
1165
1169
|
{
|
1166
1170
|
@static_env.extend_static
|
1167
1171
|
@lexer.cmdarg.push(false)
|
1172
|
+
@context.push(:module)
|
1168
1173
|
}
|
1169
1174
|
bodystmt kEND
|
1170
1175
|
{
|
@@ -1177,6 +1182,7 @@ rule
|
|
1177
1182
|
|
1178
1183
|
@lexer.cmdarg.pop
|
1179
1184
|
@static_env.unextend
|
1185
|
+
@context.pop
|
1180
1186
|
}
|
1181
1187
|
| kDEF fname
|
1182
1188
|
{
|
@@ -1487,6 +1493,7 @@ opt_block_args_tail:
|
|
1487
1493
|
}
|
1488
1494
|
f_larglist
|
1489
1495
|
{
|
1496
|
+
@context.pop
|
1490
1497
|
@lexer.cmdarg.push(false)
|
1491
1498
|
}
|
1492
1499
|
lambda_body
|
data/lib/parser/ruby25.y
CHANGED
@@ -1057,11 +1057,15 @@ rule
|
|
1057
1057
|
result = @builder.block(val[0],
|
1058
1058
|
begin_t, args, body, end_t)
|
1059
1059
|
}
|
1060
|
-
| tLAMBDA
|
1060
|
+
| tLAMBDA
|
1061
|
+
{
|
1062
|
+
@context.push(:lambda)
|
1063
|
+
}
|
1064
|
+
lambda
|
1061
1065
|
{
|
1062
1066
|
lambda_call = @builder.call_lambda(val[0])
|
1063
1067
|
|
1064
|
-
args, (begin_t, body, end_t) = val[
|
1068
|
+
args, (begin_t, body, end_t) = val[2]
|
1065
1069
|
result = @builder.block(lambda_call,
|
1066
1070
|
begin_t, args, body, end_t)
|
1067
1071
|
}
|
@@ -1151,6 +1155,7 @@ rule
|
|
1151
1155
|
{
|
1152
1156
|
@static_env.extend_static
|
1153
1157
|
@lexer.cmdarg.push(false)
|
1158
|
+
@context.push(:module)
|
1154
1159
|
}
|
1155
1160
|
bodystmt kEND
|
1156
1161
|
{
|
@@ -1163,6 +1168,7 @@ rule
|
|
1163
1168
|
|
1164
1169
|
@lexer.cmdarg.pop
|
1165
1170
|
@static_env.unextend
|
1171
|
+
@context.pop
|
1166
1172
|
}
|
1167
1173
|
| kDEF fname
|
1168
1174
|
{
|
@@ -1484,6 +1490,7 @@ opt_block_args_tail:
|
|
1484
1490
|
}
|
1485
1491
|
f_larglist
|
1486
1492
|
{
|
1493
|
+
@context.pop
|
1487
1494
|
@lexer.cmdarg.push(false)
|
1488
1495
|
}
|
1489
1496
|
lambda_body
|
data/lib/parser/ruby26.y
CHANGED
@@ -1065,11 +1065,15 @@ rule
|
|
1065
1065
|
result = @builder.block(val[0],
|
1066
1066
|
begin_t, args, body, end_t)
|
1067
1067
|
}
|
1068
|
-
| tLAMBDA
|
1068
|
+
| tLAMBDA
|
1069
|
+
{
|
1070
|
+
@context.push(:lambda)
|
1071
|
+
}
|
1072
|
+
lambda
|
1069
1073
|
{
|
1070
1074
|
lambda_call = @builder.call_lambda(val[0])
|
1071
1075
|
|
1072
|
-
args, (begin_t, body, end_t) = val[
|
1076
|
+
args, (begin_t, body, end_t) = val[2]
|
1073
1077
|
result = @builder.block(lambda_call,
|
1074
1078
|
begin_t, args, body, end_t)
|
1075
1079
|
}
|
@@ -1159,6 +1163,7 @@ rule
|
|
1159
1163
|
{
|
1160
1164
|
@static_env.extend_static
|
1161
1165
|
@lexer.cmdarg.push(false)
|
1166
|
+
@context.push(:module)
|
1162
1167
|
}
|
1163
1168
|
bodystmt kEND
|
1164
1169
|
{
|
@@ -1171,6 +1176,7 @@ rule
|
|
1171
1176
|
|
1172
1177
|
@lexer.cmdarg.pop
|
1173
1178
|
@static_env.unextend
|
1179
|
+
@context.pop
|
1174
1180
|
}
|
1175
1181
|
| kDEF fname
|
1176
1182
|
{
|
@@ -1492,6 +1498,7 @@ opt_block_args_tail:
|
|
1492
1498
|
}
|
1493
1499
|
f_larglist
|
1494
1500
|
{
|
1501
|
+
@context.pop
|
1495
1502
|
@lexer.cmdarg.push(false)
|
1496
1503
|
}
|
1497
1504
|
lambda_body
|
data/lib/parser/ruby27.y
CHANGED
@@ -1109,11 +1109,15 @@ rule
|
|
1109
1109
|
result = @builder.block(val[0],
|
1110
1110
|
begin_t, args, body, end_t)
|
1111
1111
|
}
|
1112
|
-
| tLAMBDA
|
1112
|
+
| tLAMBDA
|
1113
|
+
{
|
1114
|
+
@context.push(:lambda)
|
1115
|
+
}
|
1116
|
+
lambda
|
1113
1117
|
{
|
1114
1118
|
lambda_call = @builder.call_lambda(val[0])
|
1115
1119
|
|
1116
|
-
args, (begin_t, body, end_t) = val[
|
1120
|
+
args, (begin_t, body, end_t) = val[2]
|
1117
1121
|
result = @builder.block(lambda_call,
|
1118
1122
|
begin_t, args, body, end_t)
|
1119
1123
|
}
|
@@ -1211,6 +1215,7 @@ rule
|
|
1211
1215
|
{
|
1212
1216
|
@static_env.extend_static
|
1213
1217
|
@lexer.cmdarg.push(false)
|
1218
|
+
@context.push(:module)
|
1214
1219
|
}
|
1215
1220
|
bodystmt kEND
|
1216
1221
|
{
|
@@ -1223,6 +1228,7 @@ rule
|
|
1223
1228
|
|
1224
1229
|
@lexer.cmdarg.pop
|
1225
1230
|
@static_env.unextend
|
1231
|
+
@context.pop
|
1226
1232
|
}
|
1227
1233
|
| kDEF fname
|
1228
1234
|
{
|
@@ -1538,7 +1544,6 @@ opt_block_args_tail:
|
|
1538
1544
|
lambda: {
|
1539
1545
|
@static_env.extend_dynamic
|
1540
1546
|
@max_numparam_stack.push
|
1541
|
-
@context.push(:lambda)
|
1542
1547
|
}
|
1543
1548
|
f_larglist
|
1544
1549
|
{
|
@@ -2089,11 +2094,15 @@ opt_block_args_tail:
|
|
2089
2094
|
{
|
2090
2095
|
result = @builder.accessible(val[0])
|
2091
2096
|
}
|
2092
|
-
| tLAMBDA
|
2097
|
+
| tLAMBDA
|
2098
|
+
{
|
2099
|
+
@context.push(:lambda)
|
2100
|
+
}
|
2101
|
+
lambda
|
2093
2102
|
{
|
2094
2103
|
lambda_call = @builder.call_lambda(val[0])
|
2095
2104
|
|
2096
|
-
args, (begin_t, body, end_t) = val[
|
2105
|
+
args, (begin_t, body, end_t) = val[2]
|
2097
2106
|
result = @builder.block(lambda_call,
|
2098
2107
|
begin_t, args, body, end_t)
|
2099
2108
|
}
|
@@ -2523,7 +2532,7 @@ keyword_variable: kNIL
|
|
2523
2532
|
}
|
2524
2533
|
| tLPAREN2 args_forward rparen
|
2525
2534
|
{
|
2526
|
-
result = @builder.
|
2535
|
+
result = @builder.forward_only_args(val[0], val[1], val[2])
|
2527
2536
|
@static_env.declare_forward_args
|
2528
2537
|
|
2529
2538
|
@lexer.state = :expr_value
|
data/lib/parser/ruby28.y
CHANGED
@@ -960,6 +960,14 @@ rule
|
|
960
960
|
{
|
961
961
|
result = val
|
962
962
|
}
|
963
|
+
| tLPAREN2 args tCOMMA args_forward rparen
|
964
|
+
{
|
965
|
+
unless @static_env.declared_forward_args?
|
966
|
+
diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3]
|
967
|
+
end
|
968
|
+
|
969
|
+
result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]]
|
970
|
+
}
|
963
971
|
| tLPAREN2 args_forward rparen
|
964
972
|
{
|
965
973
|
unless @static_env.declared_forward_args?
|
@@ -1212,14 +1220,7 @@ rule
|
|
1212
1220
|
result = @builder.block(val[0],
|
1213
1221
|
begin_t, args, body, end_t)
|
1214
1222
|
}
|
1215
|
-
|
|
1216
|
-
{
|
1217
|
-
lambda_call = @builder.call_lambda(val[0])
|
1218
|
-
|
1219
|
-
args, (begin_t, body, end_t) = val[1]
|
1220
|
-
result = @builder.block(lambda_call,
|
1221
|
-
begin_t, args, body, end_t)
|
1222
|
-
}
|
1223
|
+
| lambda
|
1223
1224
|
| kIF expr_value then compstmt if_tail kEND
|
1224
1225
|
{
|
1225
1226
|
else_t, else_ = val[4]
|
@@ -1314,6 +1315,7 @@ rule
|
|
1314
1315
|
{
|
1315
1316
|
@static_env.extend_static
|
1316
1317
|
@lexer.cmdarg.push(false)
|
1318
|
+
@context.push(:module)
|
1317
1319
|
}
|
1318
1320
|
bodystmt kEND
|
1319
1321
|
{
|
@@ -1326,6 +1328,7 @@ rule
|
|
1326
1328
|
|
1327
1329
|
@lexer.cmdarg.pop
|
1328
1330
|
@static_env.unextend
|
1331
|
+
@context.pop
|
1329
1332
|
}
|
1330
1333
|
| defn_head f_arglist bodystmt kEND
|
1331
1334
|
{
|
@@ -1483,6 +1486,8 @@ opt_block_args_tail:
|
|
1483
1486
|
result = []
|
1484
1487
|
}
|
1485
1488
|
|
1489
|
+
excessed_comma: tCOMMA
|
1490
|
+
|
1486
1491
|
block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail
|
1487
1492
|
{
|
1488
1493
|
result = val[0].
|
@@ -1517,7 +1522,7 @@ opt_block_args_tail:
|
|
1517
1522
|
concat(val[2]).
|
1518
1523
|
concat(val[3])
|
1519
1524
|
}
|
1520
|
-
| f_arg
|
1525
|
+
| f_arg excessed_comma
|
1521
1526
|
| f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail
|
1522
1527
|
{
|
1523
1528
|
result = val[0].
|
@@ -1617,7 +1622,8 @@ opt_block_args_tail:
|
|
1617
1622
|
}
|
1618
1623
|
| f_bad_arg
|
1619
1624
|
|
1620
|
-
lambda:
|
1625
|
+
lambda: tLAMBDA
|
1626
|
+
{
|
1621
1627
|
@static_env.extend_dynamic
|
1622
1628
|
@max_numparam_stack.push
|
1623
1629
|
@context.push(:lambda)
|
@@ -1629,12 +1635,16 @@ opt_block_args_tail:
|
|
1629
1635
|
}
|
1630
1636
|
lambda_body
|
1631
1637
|
{
|
1632
|
-
|
1633
|
-
|
1638
|
+
lambda_call = @builder.call_lambda(val[0])
|
1639
|
+
args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2]
|
1640
|
+
begin_t, body, end_t = val[4]
|
1634
1641
|
|
1635
1642
|
@max_numparam_stack.pop
|
1636
1643
|
@static_env.unextend
|
1637
1644
|
@lexer.cmdarg.pop
|
1645
|
+
|
1646
|
+
result = @builder.block(lambda_call,
|
1647
|
+
begin_t, args, body, end_t)
|
1638
1648
|
}
|
1639
1649
|
|
1640
1650
|
f_larglist: tLPAREN2 f_args opt_bv_decl tRPAREN
|
@@ -1873,6 +1883,10 @@ opt_block_args_tail:
|
|
1873
1883
|
{
|
1874
1884
|
result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil)
|
1875
1885
|
}
|
1886
|
+
| p_find
|
1887
|
+
{
|
1888
|
+
result = @builder.find_pattern(nil, val[0], nil)
|
1889
|
+
}
|
1876
1890
|
| p_args_tail
|
1877
1891
|
{
|
1878
1892
|
result = @builder.array_pattern(nil, val[0], nil)
|
@@ -1915,6 +1929,12 @@ opt_block_args_tail:
|
|
1915
1929
|
pattern = @builder.array_pattern(nil, val[2], nil)
|
1916
1930
|
result = @builder.const_pattern(val[0], val[1], pattern, val[3])
|
1917
1931
|
}
|
1932
|
+
| p_const p_lparen p_find rparen
|
1933
|
+
{
|
1934
|
+
@pattern_hash_keys.pop
|
1935
|
+
pattern = @builder.find_pattern(nil, val[2], nil)
|
1936
|
+
result = @builder.const_pattern(val[0], val[1], pattern, val[3])
|
1937
|
+
}
|
1918
1938
|
| p_const p_lparen p_kwargs rparen
|
1919
1939
|
{
|
1920
1940
|
@pattern_hash_keys.pop
|
@@ -1932,6 +1952,12 @@ opt_block_args_tail:
|
|
1932
1952
|
pattern = @builder.array_pattern(nil, val[2], nil)
|
1933
1953
|
result = @builder.const_pattern(val[0], val[1], pattern, val[3])
|
1934
1954
|
}
|
1955
|
+
| p_const p_lbracket p_find rbracket
|
1956
|
+
{
|
1957
|
+
@pattern_hash_keys.pop
|
1958
|
+
pattern = @builder.find_pattern(nil, val[2], nil)
|
1959
|
+
result = @builder.const_pattern(val[0], val[1], pattern, val[3])
|
1960
|
+
}
|
1935
1961
|
| p_const p_lbracket p_kwargs rbracket
|
1936
1962
|
{
|
1937
1963
|
@pattern_hash_keys.pop
|
@@ -1943,14 +1969,13 @@ opt_block_args_tail:
|
|
1943
1969
|
pattern = @builder.array_pattern(val[1], nil, val[2])
|
1944
1970
|
result = @builder.const_pattern(val[0], val[1], pattern, val[2])
|
1945
1971
|
}
|
1946
|
-
| tLBRACK
|
1972
|
+
| tLBRACK p_args rbracket
|
1947
1973
|
{
|
1948
|
-
@
|
1974
|
+
result = @builder.array_pattern(val[0], val[1], val[2])
|
1949
1975
|
}
|
1950
|
-
|
1976
|
+
| tLBRACK p_find rbracket
|
1951
1977
|
{
|
1952
|
-
@
|
1953
|
-
result = @builder.array_pattern(val[0], val[2], val[3])
|
1978
|
+
result = @builder.find_pattern(val[0], val[1], val[2])
|
1954
1979
|
}
|
1955
1980
|
| tLBRACK rbracket
|
1956
1981
|
{
|
@@ -2031,25 +2056,27 @@ opt_block_args_tail:
|
|
2031
2056
|
result = [ *val[0], last_item ]
|
2032
2057
|
}
|
2033
2058
|
|
2034
|
-
p_args_tail:
|
2059
|
+
p_args_tail: p_rest
|
2035
2060
|
{
|
2036
|
-
|
2037
|
-
result = [ match_rest ]
|
2061
|
+
result = [ val[0] ]
|
2038
2062
|
}
|
2039
|
-
|
|
2063
|
+
| p_rest tCOMMA p_args_post
|
2040
2064
|
{
|
2041
|
-
|
2042
|
-
result = [ match_rest, *val[3] ]
|
2065
|
+
result = [ val[0], *val[2] ]
|
2043
2066
|
}
|
2044
|
-
|
2067
|
+
|
2068
|
+
p_find: p_rest tCOMMA p_args_post tCOMMA p_rest
|
2045
2069
|
{
|
2046
|
-
|
2047
|
-
result = [ match_rest ]
|
2070
|
+
result = [ val[0], *val[2], val[4] ]
|
2048
2071
|
}
|
2049
|
-
|
2072
|
+
|
2073
|
+
p_rest: tSTAR tIDENTIFIER
|
2050
2074
|
{
|
2051
|
-
|
2052
|
-
|
2075
|
+
result = @builder.match_rest(val[0], val[1])
|
2076
|
+
}
|
2077
|
+
| tSTAR
|
2078
|
+
{
|
2079
|
+
result = @builder.match_rest(val[0])
|
2053
2080
|
}
|
2054
2081
|
|
2055
2082
|
p_args_post: p_arg
|
@@ -2166,14 +2193,7 @@ opt_block_args_tail:
|
|
2166
2193
|
{
|
2167
2194
|
result = @builder.accessible(val[0])
|
2168
2195
|
}
|
2169
|
-
|
|
2170
|
-
{
|
2171
|
-
lambda_call = @builder.call_lambda(val[0])
|
2172
|
-
|
2173
|
-
args, (begin_t, body, end_t) = val[1]
|
2174
|
-
result = @builder.block(lambda_call,
|
2175
|
-
begin_t, args, body, end_t)
|
2176
|
-
}
|
2196
|
+
| lambda
|
2177
2197
|
|
2178
2198
|
p_variable: tIDENTIFIER
|
2179
2199
|
{
|
@@ -2598,9 +2618,16 @@ keyword_variable: kNIL
|
|
2598
2618
|
|
2599
2619
|
@lexer.state = :expr_value
|
2600
2620
|
}
|
2621
|
+
| tLPAREN2 f_arg tCOMMA args_forward rparen
|
2622
|
+
{
|
2623
|
+
args = [ *val[1], @builder.forward_arg(val[3]) ]
|
2624
|
+
result = @builder.args(val[0], args, val[4])
|
2625
|
+
|
2626
|
+
@static_env.declare_forward_args
|
2627
|
+
}
|
2601
2628
|
| tLPAREN2 args_forward rparen
|
2602
2629
|
{
|
2603
|
-
result = @builder.
|
2630
|
+
result = @builder.forward_only_args(val[0], val[1], val[2])
|
2604
2631
|
@static_env.declare_forward_args
|
2605
2632
|
|
2606
2633
|
@lexer.state = :expr_value
|