ruby_parser 3.18.1 → 3.19.0
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 +0 -0
- data/History.rdoc +21 -0
- data/Manifest.txt +2 -0
- data/README.rdoc +8 -6
- data/Rakefile +8 -7
- data/gauntlet.md +17 -15
- data/lib/ruby20_parser.rb +5871 -2026
- data/lib/ruby20_parser.y +14 -27
- data/lib/ruby21_parser.rb +5847 -2049
- data/lib/ruby21_parser.y +14 -27
- data/lib/ruby22_parser.rb +5969 -2074
- data/lib/ruby22_parser.y +14 -27
- data/lib/ruby23_parser.rb +5973 -2078
- data/lib/ruby23_parser.y +14 -27
- data/lib/ruby24_parser.rb +6061 -2098
- data/lib/ruby24_parser.y +14 -27
- data/lib/ruby25_parser.rb +6061 -2098
- data/lib/ruby25_parser.y +14 -27
- data/lib/ruby26_parser.rb +6063 -2097
- data/lib/ruby26_parser.y +14 -27
- data/lib/ruby27_parser.rb +6862 -2399
- data/lib/ruby27_parser.y +19 -41
- data/lib/ruby30_parser.rb +7162 -2671
- data/lib/ruby30_parser.y +65 -90
- data/lib/ruby31_parser.rb +13622 -0
- data/lib/ruby31_parser.y +3481 -0
- data/lib/ruby3_parser.yy +149 -89
- data/lib/ruby_parser.rb +2 -0
- data/lib/ruby_parser.yy +19 -41
- data/lib/ruby_parser_extras.rb +46 -1
- data/test/test_ruby_parser.rb +116 -0
- data.tar.gz.sig +0 -0
- metadata +18 -13
- metadata.gz.sig +0 -0
data/lib/ruby3_parser.yy
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
#if V == 30
|
4
4
|
class Ruby30Parser
|
5
|
+
#elif V == 31
|
6
|
+
class Ruby31Parser
|
5
7
|
#else
|
6
8
|
fail "version not specified or supported on code generation"
|
7
9
|
#endif
|
@@ -84,7 +86,7 @@ rule
|
|
84
86
|
| klBEGIN
|
85
87
|
{
|
86
88
|
if (self.in_def || self.in_single > 0) then
|
87
|
-
debug
|
89
|
+
debug 1
|
88
90
|
yyerror "BEGIN in method"
|
89
91
|
end
|
90
92
|
self.env.extend
|
@@ -139,7 +141,7 @@ rule
|
|
139
141
|
| error stmt
|
140
142
|
{
|
141
143
|
result = val[1]
|
142
|
-
debug
|
144
|
+
debug 2
|
143
145
|
}
|
144
146
|
|
145
147
|
stmt_or_begin: stmt
|
@@ -211,7 +213,7 @@ rule
|
|
211
213
|
(_, line), _, stmt, _ = val
|
212
214
|
|
213
215
|
if (self.in_def || self.in_single > 0) then
|
214
|
-
debug
|
216
|
+
debug 3
|
215
217
|
yyerror "END in method; use at_exit"
|
216
218
|
end
|
217
219
|
|
@@ -286,6 +288,24 @@ rule
|
|
286
288
|
|
287
289
|
result = s(:op_asgn, lhs1, rhs, lhs2.to_sym, id.to_sym).line line
|
288
290
|
}
|
291
|
+
#if V > 30
|
292
|
+
| defn_head f_opt_paren_args tEQL command
|
293
|
+
{
|
294
|
+
result = new_endless_defn val
|
295
|
+
}
|
296
|
+
| defn_head f_opt_paren_args tEQL command kRESCUE_MOD arg
|
297
|
+
{
|
298
|
+
result = new_endless_defn val
|
299
|
+
}
|
300
|
+
| defs_head f_opt_paren_args tEQL command
|
301
|
+
{
|
302
|
+
result = new_endless_defs val
|
303
|
+
}
|
304
|
+
| defs_head f_opt_paren_args tEQL command kRESCUE_MOD arg
|
305
|
+
{
|
306
|
+
result = new_endless_defs val
|
307
|
+
}
|
308
|
+
#endif
|
289
309
|
| backref tOP_ASGN command_rhs
|
290
310
|
{
|
291
311
|
self.backref_assign_error val[0]
|
@@ -339,7 +359,11 @@ rule
|
|
339
359
|
self.in_kwarg = true
|
340
360
|
self.env.extend
|
341
361
|
}
|
362
|
+
#if V == 30
|
342
363
|
p_expr
|
364
|
+
#else
|
365
|
+
p_top_expr_body
|
366
|
+
#endif
|
343
367
|
{
|
344
368
|
lhs, _, in_kwarg, rhs = val
|
345
369
|
|
@@ -359,7 +383,11 @@ rule
|
|
359
383
|
self.in_kwarg = true
|
360
384
|
self.env.extend
|
361
385
|
}
|
386
|
+
#if V == 30
|
362
387
|
p_expr
|
388
|
+
#else
|
389
|
+
p_top_expr_body
|
390
|
+
#endif
|
363
391
|
{
|
364
392
|
self.env.unextend
|
365
393
|
|
@@ -679,7 +707,7 @@ rule
|
|
679
707
|
| primary_value tCOLON2 tCONSTANT
|
680
708
|
{
|
681
709
|
if (self.in_def || self.in_single > 0) then
|
682
|
-
debug
|
710
|
+
debug 4
|
683
711
|
yyerror "dynamic constant assignment"
|
684
712
|
end
|
685
713
|
|
@@ -691,7 +719,7 @@ rule
|
|
691
719
|
| tCOLON3 tCONSTANT
|
692
720
|
{
|
693
721
|
if (self.in_def || self.in_single > 0) then
|
694
|
-
debug
|
722
|
+
debug 5
|
695
723
|
yyerror "dynamic constant assignment"
|
696
724
|
end
|
697
725
|
|
@@ -718,7 +746,7 @@ rule
|
|
718
746
|
|
719
747
|
result = self.assignable var
|
720
748
|
|
721
|
-
debug
|
749
|
+
debug 6
|
722
750
|
}
|
723
751
|
| primary_value tLBRACK2 opt_call_args rbracket
|
724
752
|
{
|
@@ -749,7 +777,7 @@ rule
|
|
749
777
|
expr, _, (id, _line) = val
|
750
778
|
|
751
779
|
if (self.in_def || self.in_single > 0) then
|
752
|
-
debug
|
780
|
+
debug 7
|
753
781
|
yyerror "dynamic constant assignment"
|
754
782
|
end
|
755
783
|
|
@@ -761,7 +789,7 @@ rule
|
|
761
789
|
_, (id, l) = val
|
762
790
|
|
763
791
|
if (self.in_def || self.in_single > 0) then
|
764
|
-
debug
|
792
|
+
debug 8
|
765
793
|
yyerror "dynamic constant assignment"
|
766
794
|
end
|
767
795
|
|
@@ -780,8 +808,7 @@ rule
|
|
780
808
|
|
781
809
|
cpath: tCOLON3 cname
|
782
810
|
{
|
783
|
-
|
784
|
-
result = s(:colon3, name.to_sym).line line
|
811
|
+
result = wrap :colon3, val[1]
|
785
812
|
}
|
786
813
|
| cname
|
787
814
|
{
|
@@ -806,9 +833,7 @@ rule
|
|
806
833
|
|
807
834
|
fitem: fname
|
808
835
|
{
|
809
|
-
|
810
|
-
|
811
|
-
result = s(:lit, id.to_sym).line line
|
836
|
+
result = wrap :lit, val[0]
|
812
837
|
}
|
813
838
|
| symbol
|
814
839
|
|
@@ -877,9 +902,9 @@ rule
|
|
877
902
|
}
|
878
903
|
| tCOLON3 tCONSTANT tOP_ASGN arg_rhs
|
879
904
|
{
|
880
|
-
_,
|
905
|
+
_, lhs, op, rhs = val
|
881
906
|
|
882
|
-
lhs =
|
907
|
+
lhs = wrap :colon3, lhs
|
883
908
|
result = new_const_op_asgn [lhs, op, rhs]
|
884
909
|
}
|
885
910
|
| backref tOP_ASGN arg_rhs
|
@@ -962,8 +987,8 @@ rule
|
|
962
987
|
}
|
963
988
|
| tUMINUS_NUM simple_numeric tPOW arg
|
964
989
|
{
|
965
|
-
_,
|
966
|
-
lit =
|
990
|
+
_, num, _, arg = val
|
991
|
+
lit = wrap :lit, num
|
967
992
|
result = new_call(new_call(lit, :"**", argl(arg)), :"-@")
|
968
993
|
|
969
994
|
}
|
@@ -1056,46 +1081,19 @@ rule
|
|
1056
1081
|
}
|
1057
1082
|
| defn_head f_opt_paren_args tEQL arg
|
1058
1083
|
{
|
1059
|
-
|
1060
|
-
|
1061
|
-
result = s(:defn, name, args, body).line line
|
1062
|
-
|
1063
|
-
local_pop in_def
|
1064
|
-
endless_method_name result
|
1084
|
+
result = new_endless_defn val
|
1065
1085
|
}
|
1066
1086
|
| defn_head f_opt_paren_args tEQL arg kRESCUE_MOD arg
|
1067
1087
|
{
|
1068
|
-
|
1069
|
-
|
1070
|
-
result = s(:defn, name, args,
|
1071
|
-
new_rescue(body,
|
1072
|
-
new_resbody(s(:array).line(line),
|
1073
|
-
resbody))).line line
|
1074
|
-
|
1075
|
-
local_pop in_def
|
1076
|
-
endless_method_name result
|
1088
|
+
result = new_endless_defn val
|
1077
1089
|
}
|
1078
1090
|
| defs_head f_opt_paren_args tEQL arg
|
1079
1091
|
{
|
1080
|
-
|
1081
|
-
|
1082
|
-
result = s(:defs, recv, name, args, body).line(line)
|
1083
|
-
|
1084
|
-
self.in_single -= 1
|
1085
|
-
local_pop in_def
|
1086
|
-
endless_method_name result
|
1092
|
+
result = new_endless_defs val
|
1087
1093
|
}
|
1088
1094
|
| defs_head f_opt_paren_args tEQL arg kRESCUE_MOD arg
|
1089
1095
|
{
|
1090
|
-
|
1091
|
-
|
1092
|
-
result = s(:defs, recv, name, args,
|
1093
|
-
new_rescue(body,
|
1094
|
-
new_resbody(s(:array).line(line),
|
1095
|
-
resbody))).line line
|
1096
|
-
|
1097
|
-
local_pop in_def
|
1098
|
-
endless_method_name result
|
1096
|
+
result = new_endless_defs val
|
1099
1097
|
}
|
1100
1098
|
| primary
|
1101
1099
|
|
@@ -1251,6 +1249,13 @@ rule
|
|
1251
1249
|
_, arg = val
|
1252
1250
|
result = s(:block_pass, arg).line arg.line
|
1253
1251
|
}
|
1252
|
+
#if V > 30
|
1253
|
+
| tAMPER
|
1254
|
+
{
|
1255
|
+
(_, line), = val
|
1256
|
+
result = s(:block_pass).line line
|
1257
|
+
}
|
1258
|
+
#endif
|
1254
1259
|
|
1255
1260
|
opt_block_arg: tCOMMA block_arg
|
1256
1261
|
{
|
@@ -1370,9 +1375,7 @@ rule
|
|
1370
1375
|
}
|
1371
1376
|
| tCOLON3 tCONSTANT
|
1372
1377
|
{
|
1373
|
-
|
1374
|
-
|
1375
|
-
result = s(:colon3, id.to_sym).line line
|
1378
|
+
result = wrap :colon3, val[1]
|
1376
1379
|
}
|
1377
1380
|
| tLBRACK { result = lexer.lineno } aref_args tRBRACK
|
1378
1381
|
{
|
@@ -1425,7 +1428,7 @@ rule
|
|
1425
1428
|
}
|
1426
1429
|
| kNOT tLPAREN2 rparen
|
1427
1430
|
{
|
1428
|
-
debug
|
1431
|
+
debug 9
|
1429
1432
|
}
|
1430
1433
|
| fcall brace_block
|
1431
1434
|
{
|
@@ -1735,6 +1738,10 @@ rule
|
|
1735
1738
|
f_any_kwrest: f_kwrest
|
1736
1739
|
| f_no_kwarg
|
1737
1740
|
|
1741
|
+
#if V > 30
|
1742
|
+
f_eq: tEQL # TODO: self.in_argdef = false
|
1743
|
+
#endif
|
1744
|
+
|
1738
1745
|
block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg
|
1739
1746
|
{
|
1740
1747
|
result = call_args val
|
@@ -1865,8 +1872,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
1865
1872
|
|
1866
1873
|
bvar: tIDENTIFIER
|
1867
1874
|
{
|
1868
|
-
|
1869
|
-
result = s(:shadow, id.to_sym).line line
|
1875
|
+
result = wrap :shadow, val[0]
|
1870
1876
|
}
|
1871
1877
|
| f_bad_arg
|
1872
1878
|
|
@@ -2205,6 +2211,9 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2205
2211
|
p_lbracket: tLBRACK2 { push_pktbl }
|
2206
2212
|
|
2207
2213
|
p_expr_basic: p_value
|
2214
|
+
#if V > 30
|
2215
|
+
| p_variable
|
2216
|
+
#endif
|
2208
2217
|
| p_const p_lparen p_args tRPAREN
|
2209
2218
|
{
|
2210
2219
|
lhs, _, args, _ = val
|
@@ -2480,7 +2489,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2480
2489
|
assignable [lhs.value, lhs.line]
|
2481
2490
|
else
|
2482
2491
|
# TODO or done?
|
2483
|
-
debug
|
2492
|
+
debug 10
|
2484
2493
|
end
|
2485
2494
|
|
2486
2495
|
# TODO PAIR -> LIST ?
|
@@ -2489,10 +2498,15 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2489
2498
|
|
2490
2499
|
p_kw_label: tLABEL
|
2491
2500
|
{
|
2492
|
-
|
2493
|
-
|
2494
|
-
result = s(:lit, id.to_sym).line line
|
2501
|
+
result = wrap :lit, val[0]
|
2495
2502
|
}
|
2503
|
+
#if V > 30
|
2504
|
+
| tSTRING_BEG string_contents tLABEL_END
|
2505
|
+
{
|
2506
|
+
# you can't actually get here the way I lex labels
|
2507
|
+
debug 11
|
2508
|
+
}
|
2509
|
+
#endif
|
2496
2510
|
|
2497
2511
|
p_kwrest: kwrest_mark tIDENTIFIER
|
2498
2512
|
{
|
@@ -2551,8 +2565,13 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2551
2565
|
|
2552
2566
|
result = s(:dot3, v1, nil).line v1.line
|
2553
2567
|
}
|
2568
|
+
#if V == 30
|
2554
2569
|
| p_variable
|
2570
|
+
#endif
|
2555
2571
|
| p_var_ref
|
2572
|
+
#if V > 30
|
2573
|
+
| p_expr_ref
|
2574
|
+
#endif
|
2556
2575
|
| p_const
|
2557
2576
|
| tBDOT2 p_primitive
|
2558
2577
|
{
|
@@ -2586,26 +2605,35 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2586
2605
|
|
2587
2606
|
p_variable: tIDENTIFIER
|
2588
2607
|
{
|
2589
|
-
(id, line), = val
|
2590
|
-
|
2591
2608
|
# TODO: error_duplicate_pattern_variable(p, $1, &@1);
|
2592
2609
|
# TODO: assignable(p, $1, 0, &@$);
|
2593
|
-
result =
|
2610
|
+
result = wrap :lvar, val[0]
|
2594
2611
|
}
|
2595
2612
|
|
2596
2613
|
p_var_ref: tCARET tIDENTIFIER
|
2597
2614
|
{
|
2598
|
-
_, (id, line) = val
|
2599
|
-
|
2600
2615
|
# TODO: check id against env for lvar or dvar
|
2616
|
+
result = wrap :lvar, val[1]
|
2617
|
+
}
|
2618
|
+
#if V > 30
|
2619
|
+
| tCARET nonlocal_var
|
2620
|
+
{
|
2621
|
+
_, var = val
|
2622
|
+
result = var
|
2623
|
+
}
|
2624
|
+
#endif
|
2601
2625
|
|
2602
|
-
|
2626
|
+
#if V > 30
|
2627
|
+
p_expr_ref: tCARET tLPAREN expr_value rparen
|
2628
|
+
{
|
2629
|
+
_, _, expr, _ = val
|
2630
|
+
result = expr # TODO? s(:begin, expr).line expr.line
|
2603
2631
|
}
|
2632
|
+
#endif
|
2604
2633
|
|
2605
2634
|
p_const: tCOLON3 cname
|
2606
2635
|
{
|
2607
|
-
|
2608
|
-
result = s(:colon3, id.to_sym).line line
|
2636
|
+
result = wrap :colon3, val[1]
|
2609
2637
|
}
|
2610
2638
|
| p_const tCOLON2 cname
|
2611
2639
|
{
|
@@ -2617,8 +2645,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2617
2645
|
| tCONSTANT
|
2618
2646
|
{
|
2619
2647
|
# TODO $$ = gettable(p, $1, &@$);
|
2620
|
-
|
2621
|
-
result = s(:const, id.to_sym).line line
|
2648
|
+
result = wrap :const, val[0]
|
2622
2649
|
}
|
2623
2650
|
######################################################################
|
2624
2651
|
|
@@ -2676,7 +2703,7 @@ opt_block_args_tail: tCOMMA block_args_tail
|
|
2676
2703
|
|
2677
2704
|
string: tCHAR
|
2678
2705
|
{
|
2679
|
-
debug
|
2706
|
+
debug 12
|
2680
2707
|
}
|
2681
2708
|
| string1
|
2682
2709
|
| string string1
|
@@ -2897,25 +2924,22 @@ regexp_contents: none
|
|
2897
2924
|
when nil then
|
2898
2925
|
result = s(:evstr).line line
|
2899
2926
|
else
|
2900
|
-
debug
|
2927
|
+
debug 13
|
2901
2928
|
raise "unknown string body: #{stmt.inspect}"
|
2902
2929
|
end
|
2903
2930
|
}
|
2904
2931
|
|
2905
2932
|
string_dvar: tGVAR
|
2906
2933
|
{
|
2907
|
-
|
2908
|
-
result = s(:gvar, id.to_sym).line line
|
2934
|
+
result = wrap :gvar, val[0]
|
2909
2935
|
}
|
2910
2936
|
| tIVAR
|
2911
2937
|
{
|
2912
|
-
|
2913
|
-
result = s(:ivar, id.to_sym).line line
|
2938
|
+
result = wrap :ivar, val[0]
|
2914
2939
|
}
|
2915
2940
|
| tCVAR
|
2916
2941
|
{
|
2917
|
-
|
2918
|
-
result = s(:cvar, id.to_sym).line line
|
2942
|
+
result = wrap :cvar, val[0]
|
2919
2943
|
}
|
2920
2944
|
| backref
|
2921
2945
|
|
@@ -2924,17 +2948,13 @@ regexp_contents: none
|
|
2924
2948
|
|
2925
2949
|
ssym: tSYMBEG sym
|
2926
2950
|
{
|
2927
|
-
_, (id, line) = val
|
2928
|
-
|
2929
2951
|
lexer.lex_state = EXPR_END
|
2930
|
-
result =
|
2952
|
+
result = wrap :lit, val[1]
|
2931
2953
|
}
|
2932
2954
|
| tSYMBOL
|
2933
2955
|
{
|
2934
|
-
(id, line), = val
|
2935
|
-
|
2936
2956
|
lexer.lex_state = EXPR_END
|
2937
|
-
result =
|
2957
|
+
result = wrap :lit, val[0]
|
2938
2958
|
}
|
2939
2959
|
|
2940
2960
|
sym: fname | tIVAR | tGVAR | tCVAR
|
@@ -2955,7 +2975,7 @@ regexp_contents: none
|
|
2955
2975
|
when :evstr then
|
2956
2976
|
result = s(:dsym, "", result).line result.line
|
2957
2977
|
else
|
2958
|
-
debug
|
2978
|
+
debug 14
|
2959
2979
|
end
|
2960
2980
|
}
|
2961
2981
|
|
@@ -2971,6 +2991,12 @@ regexp_contents: none
|
|
2971
2991
|
| tRATIONAL
|
2972
2992
|
| tIMAGINARY
|
2973
2993
|
|
2994
|
+
#if V > 30
|
2995
|
+
nonlocal_var: tIVAR { result = wrap :ivar, val[0] }
|
2996
|
+
| tGVAR { result = wrap :gvar, val[0] }
|
2997
|
+
| tCVAR { result = wrap :cvar, val[0] }
|
2998
|
+
#endif
|
2999
|
+
|
2974
3000
|
user_variable: tIDENTIFIER
|
2975
3001
|
| tIVAR
|
2976
3002
|
| tGVAR
|
@@ -3015,7 +3041,7 @@ keyword_variable: kNIL { result = s(:nil).line lexer.lineno }
|
|
3015
3041
|
| keyword_variable
|
3016
3042
|
{
|
3017
3043
|
result = self.assignable val[0]
|
3018
|
-
debug
|
3044
|
+
debug 15
|
3019
3045
|
}
|
3020
3046
|
|
3021
3047
|
backref: tNTH_REF
|
@@ -3053,6 +3079,7 @@ f_opt_paren_args: f_paren_args
|
|
3053
3079
|
{
|
3054
3080
|
result = end_args val
|
3055
3081
|
}
|
3082
|
+
#if V == 30
|
3056
3083
|
| tLPAREN2 f_arg tCOMMA args_forward rparen
|
3057
3084
|
{
|
3058
3085
|
result = end_args val
|
@@ -3061,6 +3088,7 @@ f_opt_paren_args: f_paren_args
|
|
3061
3088
|
{
|
3062
3089
|
result = end_args val
|
3063
3090
|
}
|
3091
|
+
#endif
|
3064
3092
|
|
3065
3093
|
f_arglist: f_paren_args
|
3066
3094
|
| {
|
@@ -3086,6 +3114,9 @@ f_opt_paren_args: f_paren_args
|
|
3086
3114
|
result = args val
|
3087
3115
|
}
|
3088
3116
|
| f_block_arg
|
3117
|
+
#if V > 30
|
3118
|
+
| args_forward
|
3119
|
+
#endif
|
3089
3120
|
|
3090
3121
|
opt_args_tail: tCOMMA args_tail
|
3091
3122
|
{
|
@@ -3296,17 +3327,33 @@ f_opt_paren_args: f_paren_args
|
|
3296
3327
|
result = [id, lexer.lineno] # TODO: tPOW/tDSTAR include lineno
|
3297
3328
|
}
|
3298
3329
|
|
3299
|
-
f_opt: f_arg_asgn
|
3330
|
+
f_opt: f_arg_asgn
|
3331
|
+
#if V > 30
|
3332
|
+
f_eq
|
3333
|
+
#else
|
3334
|
+
tEQL
|
3335
|
+
#endif
|
3336
|
+
arg_value
|
3300
3337
|
{
|
3301
3338
|
lhs, _, rhs = val
|
3302
3339
|
result = self.assignable lhs, rhs
|
3303
3340
|
# TODO: detect duplicate names
|
3341
|
+
# TODO? p->cur_arg = 0;
|
3342
|
+
# TODO? p->ctxt.in_argdef = 1;
|
3304
3343
|
}
|
3305
3344
|
|
3306
|
-
f_block_opt: f_arg_asgn
|
3345
|
+
f_block_opt: f_arg_asgn
|
3346
|
+
#if V > 30
|
3347
|
+
f_eq
|
3348
|
+
#else
|
3349
|
+
tEQL
|
3350
|
+
#endif
|
3351
|
+
primary_value
|
3307
3352
|
{
|
3308
3353
|
lhs, _, rhs = val
|
3309
3354
|
result = self.assignable lhs, rhs
|
3355
|
+
# TODO? p->cur_arg = 0;
|
3356
|
+
# TODO? p->ctxt.in_argdef = 1;
|
3310
3357
|
}
|
3311
3358
|
|
3312
3359
|
f_block_optarg: f_block_opt
|
@@ -3358,6 +3405,12 @@ f_opt_paren_args: f_paren_args
|
|
3358
3405
|
self.env[identifier] = :lvar
|
3359
3406
|
result = ["&#{identifier}".to_sym, line]
|
3360
3407
|
}
|
3408
|
+
| blkarg_mark
|
3409
|
+
{
|
3410
|
+
(_, line), = val
|
3411
|
+
|
3412
|
+
result = [:&, line]
|
3413
|
+
}
|
3361
3414
|
|
3362
3415
|
opt_f_block_arg: tCOMMA f_block_arg
|
3363
3416
|
{
|
@@ -3404,10 +3457,17 @@ f_opt_paren_args: f_paren_args
|
|
3404
3457
|
}
|
3405
3458
|
| tLABEL arg_value
|
3406
3459
|
{
|
3407
|
-
|
3460
|
+
label, arg = val
|
3461
|
+
|
3462
|
+
lit = wrap :lit, label
|
3463
|
+
result = s(:array, lit, arg).line lit.line
|
3464
|
+
}
|
3465
|
+
| tLABEL
|
3466
|
+
{
|
3467
|
+
lit = wrap :lit, val[0]
|
3468
|
+
arg = nil
|
3408
3469
|
|
3409
|
-
|
3410
|
-
result = s(:array, lit, arg).line line
|
3470
|
+
result = s(:array, lit, arg).line lit.line
|
3411
3471
|
}
|
3412
3472
|
| tSTRING_BEG string_contents tLABEL_END arg_value
|
3413
3473
|
{
|
data/lib/ruby_parser.rb
CHANGED
@@ -80,10 +80,12 @@ require "ruby25_parser"
|
|
80
80
|
require "ruby26_parser"
|
81
81
|
require "ruby27_parser"
|
82
82
|
require "ruby30_parser"
|
83
|
+
require "ruby31_parser"
|
83
84
|
|
84
85
|
class RubyParser # HACK
|
85
86
|
VERSIONS.clear # also a HACK caused by racc namespace issues
|
86
87
|
|
88
|
+
class V31 < ::Ruby31Parser; end
|
87
89
|
class V30 < ::Ruby30Parser; end
|
88
90
|
class V27 < ::Ruby27Parser; end
|
89
91
|
class V26 < ::Ruby26Parser; end
|