parser 2.3.1.4 → 2.3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -1
- data/README.md +24 -2
- data/doc/AST_FORMAT.md +19 -0
- data/lib/parser/ast/processor.rb +1 -0
- data/lib/parser/builders/default.rb +34 -5
- data/lib/parser/current.rb +1 -1
- data/lib/parser/macruby.y +6 -8
- data/lib/parser/messages.rb +1 -0
- data/lib/parser/ruby18.y +0 -3
- data/lib/parser/ruby19.y +6 -8
- data/lib/parser/ruby20.y +8 -8
- data/lib/parser/ruby21.y +8 -8
- data/lib/parser/ruby22.y +8 -8
- data/lib/parser/ruby23.y +8 -8
- data/lib/parser/ruby24.y +63 -70
- data/lib/parser/rubymotion.y +5 -4
- data/lib/parser/version.rb +1 -1
- data/test/test_parser.rb +421 -170
- metadata +2 -2
data/lib/parser/rubymotion.y
CHANGED
@@ -1323,9 +1323,6 @@ rule
|
|
1323
1323
|
concat(val[3])
|
1324
1324
|
}
|
1325
1325
|
| f_arg tCOMMA
|
1326
|
-
{
|
1327
|
-
result = [@builder.multi_lhs(nil, val[0], nil)]
|
1328
|
-
}
|
1329
1326
|
| f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
1330
1327
|
{
|
1331
1328
|
result = val[0].
|
@@ -1335,7 +1332,11 @@ rule
|
|
1335
1332
|
}
|
1336
1333
|
| f_arg opt_f_block_arg
|
1337
1334
|
{
|
1338
|
-
|
1335
|
+
if val[1].empty? && val[0].size == 1
|
1336
|
+
result = [@builder.procarg0(val[0][0])]
|
1337
|
+
else
|
1338
|
+
result = val[0].concat(val[1])
|
1339
|
+
end
|
1339
1340
|
}
|
1340
1341
|
| f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
|
1341
1342
|
{
|
data/lib/parser/version.rb
CHANGED
data/test/test_parser.rb
CHANGED
@@ -19,6 +19,13 @@ class TestParser < Minitest::Test
|
|
19
19
|
parser
|
20
20
|
end
|
21
21
|
|
22
|
+
SINCE_1_9 = ALL_VERSIONS - %w(1.8)
|
23
|
+
SINCE_2_0 = SINCE_1_9 - %w(1.9 mac ios)
|
24
|
+
SINCE_2_1 = SINCE_2_0 - %w(2.0)
|
25
|
+
SINCE_2_2 = SINCE_2_1 - %w(2.1)
|
26
|
+
SINCE_2_3 = SINCE_2_2 - %w(2.2)
|
27
|
+
SINCE_2_4 = SINCE_2_3 - %w(2.3)
|
28
|
+
|
22
29
|
# Guidelines for test naming:
|
23
30
|
# * Test structure follows structure of AST_FORMAT.md.
|
24
31
|
# * Test names follow node names.
|
@@ -123,13 +130,13 @@ class TestParser < Minitest::Test
|
|
123
130
|
s(:rational, Rational(42)),
|
124
131
|
%q{42r},
|
125
132
|
%q{~~~ expression},
|
126
|
-
|
133
|
+
SINCE_2_1)
|
127
134
|
|
128
135
|
assert_parses(
|
129
136
|
s(:rational, Rational(421, 10)),
|
130
137
|
%q{42.1r},
|
131
138
|
%q{~~~~~ expression},
|
132
|
-
|
139
|
+
SINCE_2_1)
|
133
140
|
end
|
134
141
|
|
135
142
|
def test_complex
|
@@ -137,25 +144,25 @@ class TestParser < Minitest::Test
|
|
137
144
|
s(:complex, Complex(0, 42)),
|
138
145
|
%q{42i},
|
139
146
|
%q{~~~ expression},
|
140
|
-
|
147
|
+
SINCE_2_1)
|
141
148
|
|
142
149
|
assert_parses(
|
143
150
|
s(:complex, Complex(0, Rational(42))),
|
144
151
|
%q{42ri},
|
145
152
|
%q{~~~~ expression},
|
146
|
-
|
153
|
+
SINCE_2_1)
|
147
154
|
|
148
155
|
assert_parses(
|
149
156
|
s(:complex, Complex(0, 42.1)),
|
150
157
|
%q{42.1i},
|
151
158
|
%q{~~~~~ expression},
|
152
|
-
|
159
|
+
SINCE_2_1)
|
153
160
|
|
154
161
|
assert_parses(
|
155
162
|
s(:complex, Complex(0, Rational(421, 10))),
|
156
163
|
%q{42.1ri},
|
157
164
|
%q{~~~~~~ expression},
|
158
|
-
|
165
|
+
SINCE_2_1)
|
159
166
|
end
|
160
167
|
|
161
168
|
# Strings
|
@@ -230,7 +237,7 @@ class TestParser < Minitest::Test
|
|
230
237
|
%q{?a},
|
231
238
|
%q{^ begin
|
232
239
|
|~~ expression},
|
233
|
-
|
240
|
+
SINCE_1_9)
|
234
241
|
|
235
242
|
assert_parses(
|
236
243
|
s(:int, 97),
|
@@ -279,21 +286,21 @@ class TestParser < Minitest::Test
|
|
279
286
|
s(:dstr)),
|
280
287
|
%Q{p <<~E\nE},
|
281
288
|
%q{},
|
282
|
-
|
289
|
+
SINCE_2_3)
|
283
290
|
|
284
291
|
assert_parses(
|
285
292
|
s(:send, nil, :p,
|
286
293
|
s(:dstr)),
|
287
294
|
%Q{p <<~E\n E},
|
288
295
|
%q{},
|
289
|
-
|
296
|
+
SINCE_2_3)
|
290
297
|
|
291
298
|
assert_parses(
|
292
299
|
s(:send, nil, :p,
|
293
300
|
s(:str, "x\n")),
|
294
301
|
%Q{p <<~E\n x\nE},
|
295
302
|
%q{},
|
296
|
-
|
303
|
+
SINCE_2_3)
|
297
304
|
|
298
305
|
assert_parses(
|
299
306
|
s(:send, nil, :p,
|
@@ -302,7 +309,7 @@ class TestParser < Minitest::Test
|
|
302
309
|
s(:str, " y\n"))),
|
303
310
|
%Q{p <<~E\n x\n y\nE},
|
304
311
|
%q{},
|
305
|
-
|
312
|
+
SINCE_2_3)
|
306
313
|
|
307
314
|
assert_parses(
|
308
315
|
s(:send, nil, :p,
|
@@ -311,7 +318,7 @@ class TestParser < Minitest::Test
|
|
311
318
|
s(:str, "y\n"))),
|
312
319
|
%Q{p <<~E\n\tx\n y\nE},
|
313
320
|
%q{},
|
314
|
-
|
321
|
+
SINCE_2_3)
|
315
322
|
|
316
323
|
assert_parses(
|
317
324
|
s(:send, nil, :p,
|
@@ -320,7 +327,7 @@ class TestParser < Minitest::Test
|
|
320
327
|
s(:str, "y\n"))),
|
321
328
|
%Q{p <<~E\n\tx\n y\nE},
|
322
329
|
%q{},
|
323
|
-
|
330
|
+
SINCE_2_3)
|
324
331
|
|
325
332
|
assert_parses(
|
326
333
|
s(:send, nil, :p,
|
@@ -329,7 +336,7 @@ class TestParser < Minitest::Test
|
|
329
336
|
s(:str, "y\n"))),
|
330
337
|
%Q{p <<~E\n \tx\n y\nE},
|
331
338
|
%q{},
|
332
|
-
|
339
|
+
SINCE_2_3)
|
333
340
|
|
334
341
|
assert_parses(
|
335
342
|
s(:send, nil, :p,
|
@@ -338,7 +345,7 @@ class TestParser < Minitest::Test
|
|
338
345
|
s(:str, "y\n"))),
|
339
346
|
%Q{p <<~E\n \tx\n\ty\nE},
|
340
347
|
%q{},
|
341
|
-
|
348
|
+
SINCE_2_3)
|
342
349
|
|
343
350
|
assert_parses(
|
344
351
|
s(:send, nil, :p,
|
@@ -348,7 +355,7 @@ class TestParser < Minitest::Test
|
|
348
355
|
s(:str, "y\n"))),
|
349
356
|
%Q{p <<~E\n x\n\ny\nE},
|
350
357
|
%q{},
|
351
|
-
|
358
|
+
SINCE_2_3)
|
352
359
|
|
353
360
|
assert_parses(
|
354
361
|
s(:send, nil, :p,
|
@@ -358,7 +365,7 @@ class TestParser < Minitest::Test
|
|
358
365
|
s(:str, "y\n"))),
|
359
366
|
%Q{p <<~E\n x\n \n y\nE},
|
360
367
|
%q{},
|
361
|
-
|
368
|
+
SINCE_2_3)
|
362
369
|
|
363
370
|
assert_parses(
|
364
371
|
s(:send, nil, :p,
|
@@ -367,7 +374,7 @@ class TestParser < Minitest::Test
|
|
367
374
|
s(:str, " y\n"))),
|
368
375
|
%Q{p <<~E\n x\n \\ y\nE},
|
369
376
|
%q{},
|
370
|
-
|
377
|
+
SINCE_2_3)
|
371
378
|
|
372
379
|
assert_parses(
|
373
380
|
s(:send, nil, :p,
|
@@ -376,7 +383,7 @@ class TestParser < Minitest::Test
|
|
376
383
|
s(:str, "\ty\n"))),
|
377
384
|
%Q{p <<~E\n x\n \\\ty\nE},
|
378
385
|
%q{},
|
379
|
-
|
386
|
+
SINCE_2_3)
|
380
387
|
|
381
388
|
assert_parses(
|
382
389
|
s(:send, nil, :p,
|
@@ -388,7 +395,7 @@ class TestParser < Minitest::Test
|
|
388
395
|
s(:str, "\n"))),
|
389
396
|
%Q{p <<~"E"\n x\n \#{foo}\nE},
|
390
397
|
%q{},
|
391
|
-
|
398
|
+
SINCE_2_3)
|
392
399
|
|
393
400
|
assert_parses(
|
394
401
|
s(:send, nil, :p,
|
@@ -400,7 +407,7 @@ class TestParser < Minitest::Test
|
|
400
407
|
s(:str, "\n"))),
|
401
408
|
%Q{p <<~`E`\n x\n \#{foo}\nE},
|
402
409
|
%q{},
|
403
|
-
|
410
|
+
SINCE_2_3)
|
404
411
|
|
405
412
|
assert_parses(
|
406
413
|
s(:send, nil, :p,
|
@@ -412,7 +419,7 @@ class TestParser < Minitest::Test
|
|
412
419
|
s(:str, "\n"))),
|
413
420
|
%Q{p <<~"E"\n x\n \#{" y"}\nE},
|
414
421
|
%q{},
|
415
|
-
|
422
|
+
SINCE_2_3)
|
416
423
|
end
|
417
424
|
|
418
425
|
# Symbols
|
@@ -526,13 +533,13 @@ class TestParser < Minitest::Test
|
|
526
533
|
[:error, :invalid_regexp, {:message => message}],
|
527
534
|
%q[/?/],
|
528
535
|
%q(~~~ location),
|
529
|
-
|
536
|
+
SINCE_1_9)
|
530
537
|
|
531
538
|
assert_diagnoses(
|
532
539
|
[:error, :invalid_regexp, {:message => message}],
|
533
540
|
%q[/#{""}?/],
|
534
541
|
%q(~~~~~~~~ location),
|
535
|
-
|
542
|
+
SINCE_1_9)
|
536
543
|
end
|
537
544
|
|
538
545
|
# Arrays
|
@@ -558,7 +565,7 @@ class TestParser < Minitest::Test
|
|
558
565
|
| ^ operator (splat)
|
559
566
|
| ~~~~ expression (splat)
|
560
567
|
|~~~~~~~~~~~~ expression},
|
561
|
-
|
568
|
+
SINCE_1_9)
|
562
569
|
|
563
570
|
assert_parses(
|
564
571
|
s(:array,
|
@@ -592,7 +599,7 @@ class TestParser < Minitest::Test
|
|
592
599
|
s(:hash, s(:pair, s(:int, 2), s(:int, 3)))),
|
593
600
|
%q{[ 1, 2 => 3 ]},
|
594
601
|
%q{},
|
595
|
-
|
602
|
+
SINCE_1_9)
|
596
603
|
end
|
597
604
|
|
598
605
|
def test_array_words
|
@@ -651,7 +658,7 @@ class TestParser < Minitest::Test
|
|
651
658
|
| ^ end
|
652
659
|
| ~~~ expression (sym)
|
653
660
|
|~~~~~~~~~~~ expression},
|
654
|
-
|
661
|
+
SINCE_2_0)
|
655
662
|
end
|
656
663
|
|
657
664
|
def test_array_symbols_interp
|
@@ -668,7 +675,7 @@ class TestParser < Minitest::Test
|
|
668
675
|
| ~~~~~~ expression (dsym.begin)
|
669
676
|
| ~~~ expression (dsym.begin.lvar)
|
670
677
|
|~~~~~~~~~~~~~~ expression},
|
671
|
-
|
678
|
+
SINCE_2_0)
|
672
679
|
|
673
680
|
assert_parses(
|
674
681
|
s(:array,
|
@@ -677,7 +684,7 @@ class TestParser < Minitest::Test
|
|
677
684
|
s(:begin, s(:lvar, :bar)))),
|
678
685
|
%q{%I[foo#{bar}]},
|
679
686
|
%q{},
|
680
|
-
|
687
|
+
SINCE_2_0)
|
681
688
|
end
|
682
689
|
|
683
690
|
def test_array_symbols_empty
|
@@ -687,13 +694,13 @@ class TestParser < Minitest::Test
|
|
687
694
|
%q{^^^ begin
|
688
695
|
| ^ end
|
689
696
|
|~~~~ expression},
|
690
|
-
|
697
|
+
SINCE_2_0)
|
691
698
|
|
692
699
|
assert_parses(
|
693
700
|
s(:array),
|
694
701
|
%q{%I()},
|
695
702
|
%q{},
|
696
|
-
|
703
|
+
SINCE_2_0)
|
697
704
|
end
|
698
705
|
|
699
706
|
# Hashes
|
@@ -734,7 +741,7 @@ class TestParser < Minitest::Test
|
|
734
741
|
| ~~~ expression (pair.sym)
|
735
742
|
| ~~~~~~ expression (pair)
|
736
743
|
|~~~~~~~~~~ expression},
|
737
|
-
|
744
|
+
SINCE_1_9)
|
738
745
|
end
|
739
746
|
|
740
747
|
def test_hash_label_end
|
@@ -749,7 +756,7 @@ class TestParser < Minitest::Test
|
|
749
756
|
| ~~~~~ expression (pair.sym)
|
750
757
|
| ~~~~~~~~ expression (pair)
|
751
758
|
|~~~~~~~~~~~~ expression},
|
752
|
-
|
759
|
+
SINCE_2_2)
|
753
760
|
|
754
761
|
assert_parses(
|
755
762
|
s(:hash,
|
@@ -757,7 +764,7 @@ class TestParser < Minitest::Test
|
|
757
764
|
s(:pair, s(:sym, :bar), s(:hash))),
|
758
765
|
%q[{ 'foo': 2, 'bar': {}}],
|
759
766
|
%q{},
|
760
|
-
|
767
|
+
SINCE_2_2)
|
761
768
|
|
762
769
|
assert_parses(
|
763
770
|
s(:send, nil, :f,
|
@@ -766,7 +773,7 @@ class TestParser < Minitest::Test
|
|
766
773
|
s(:int, 1))),
|
767
774
|
%q{f(a ? "a":1)},
|
768
775
|
%q{},
|
769
|
-
|
776
|
+
SINCE_2_2)
|
770
777
|
end
|
771
778
|
|
772
779
|
def test_hash_kwsplat
|
@@ -777,7 +784,7 @@ class TestParser < Minitest::Test
|
|
777
784
|
%q[{ foo: 2, **bar }],
|
778
785
|
%q{ ^^ operator (kwsplat)
|
779
786
|
| ~~~~~ expression (kwsplat)},
|
780
|
-
|
787
|
+
SINCE_2_0)
|
781
788
|
end
|
782
789
|
|
783
790
|
def test_hash_no_hashrocket
|
@@ -913,7 +920,7 @@ class TestParser < Minitest::Test
|
|
913
920
|
s(:const, s(:const, nil, :Encoding), :UTF_8),
|
914
921
|
%q{__ENCODING__},
|
915
922
|
%q{~~~~~~~~~~~~ expression},
|
916
|
-
|
923
|
+
SINCE_1_9)
|
917
924
|
end
|
918
925
|
|
919
926
|
# defined?
|
@@ -1140,7 +1147,7 @@ class TestParser < Minitest::Test
|
|
1140
1147
|
s(:array, s(:splat, s(:lvar, :foo)), s(:lvar, :bar))),
|
1141
1148
|
%q{a, b = *foo, bar},
|
1142
1149
|
%q{},
|
1143
|
-
|
1150
|
+
SINCE_1_9)
|
1144
1151
|
|
1145
1152
|
assert_parses(
|
1146
1153
|
s(:masgn,
|
@@ -1157,7 +1164,7 @@ class TestParser < Minitest::Test
|
|
1157
1164
|
s(:lvar, :bar)),
|
1158
1165
|
%q{a, *b, c = bar},
|
1159
1166
|
%q{},
|
1160
|
-
|
1167
|
+
SINCE_1_9)
|
1161
1168
|
|
1162
1169
|
assert_parses(
|
1163
1170
|
s(:masgn,
|
@@ -1174,7 +1181,7 @@ class TestParser < Minitest::Test
|
|
1174
1181
|
s(:lvar, :bar)),
|
1175
1182
|
%q{a, *, c = bar},
|
1176
1183
|
%q{},
|
1177
|
-
|
1184
|
+
SINCE_1_9)
|
1178
1185
|
|
1179
1186
|
assert_parses(
|
1180
1187
|
s(:masgn,
|
@@ -1190,7 +1197,7 @@ class TestParser < Minitest::Test
|
|
1190
1197
|
s(:lvar, :bar)),
|
1191
1198
|
%q{*b, c = bar},
|
1192
1199
|
%q{},
|
1193
|
-
|
1200
|
+
SINCE_1_9)
|
1194
1201
|
|
1195
1202
|
assert_parses(
|
1196
1203
|
s(:masgn,
|
@@ -1207,7 +1214,7 @@ class TestParser < Minitest::Test
|
|
1207
1214
|
s(:lvar, :bar)),
|
1208
1215
|
%q{*, c, d = bar},
|
1209
1216
|
%q{},
|
1210
|
-
|
1217
|
+
SINCE_1_9)
|
1211
1218
|
end
|
1212
1219
|
|
1213
1220
|
def test_masgn_nested
|
@@ -1393,7 +1400,7 @@ class TestParser < Minitest::Test
|
|
1393
1400
|
s(:int, 1)),
|
1394
1401
|
%q{::A += 1},
|
1395
1402
|
%q{},
|
1396
|
-
|
1403
|
+
SINCE_2_0)
|
1397
1404
|
|
1398
1405
|
assert_parses(
|
1399
1406
|
s(:op_asgn,
|
@@ -1401,7 +1408,7 @@ class TestParser < Minitest::Test
|
|
1401
1408
|
s(:int, 1)),
|
1402
1409
|
%q{B::A += 1},
|
1403
1410
|
%q{},
|
1404
|
-
|
1411
|
+
SINCE_2_0)
|
1405
1412
|
|
1406
1413
|
assert_parses(
|
1407
1414
|
s(:def, :x, s(:args),
|
@@ -1410,7 +1417,7 @@ class TestParser < Minitest::Test
|
|
1410
1417
|
s(:int, 1))),
|
1411
1418
|
%q{def x; self::A ||= 1; end},
|
1412
1419
|
%q{},
|
1413
|
-
|
1420
|
+
SINCE_2_0)
|
1414
1421
|
|
1415
1422
|
assert_parses(
|
1416
1423
|
s(:def, :x, s(:args),
|
@@ -1419,7 +1426,7 @@ class TestParser < Minitest::Test
|
|
1419
1426
|
s(:int, 1))),
|
1420
1427
|
%q{def x; ::A ||= 1; end},
|
1421
1428
|
%q{},
|
1422
|
-
|
1429
|
+
SINCE_2_0)
|
1423
1430
|
end
|
1424
1431
|
|
1425
1432
|
def test_const_op_asgn_invalid
|
@@ -1493,13 +1500,19 @@ class TestParser < Minitest::Test
|
|
1493
1500
|
s(:send, nil, :m, s(:lvar, :foo))),
|
1494
1501
|
%q{foo.A += m foo})
|
1495
1502
|
|
1503
|
+
assert_diagnoses(
|
1504
|
+
[:error, :const_reassignment],
|
1505
|
+
%q{foo::A += m foo},
|
1506
|
+
%q{ ~~ location},
|
1507
|
+
%w(1.9 mac))
|
1508
|
+
|
1496
1509
|
assert_parses(
|
1497
1510
|
s(:op_asgn,
|
1498
|
-
s(:
|
1511
|
+
s(:casgn, s(:lvar, :foo), :A), :+,
|
1499
1512
|
s(:send, nil, :m, s(:lvar, :foo))),
|
1500
1513
|
%q{foo::A += m foo},
|
1501
1514
|
%q{},
|
1502
|
-
|
1515
|
+
SINCE_2_0)
|
1503
1516
|
end
|
1504
1517
|
|
1505
1518
|
def test_op_asgn_index
|
@@ -1680,7 +1693,7 @@ class TestParser < Minitest::Test
|
|
1680
1693
|
nil),
|
1681
1694
|
%q{class Foo end},
|
1682
1695
|
%q{},
|
1683
|
-
|
1696
|
+
SINCE_2_3)
|
1684
1697
|
end
|
1685
1698
|
|
1686
1699
|
def test_class_super
|
@@ -1704,7 +1717,7 @@ class TestParser < Minitest::Test
|
|
1704
1717
|
nil),
|
1705
1718
|
%q{class Foo < a:b; end},
|
1706
1719
|
%q{},
|
1707
|
-
|
1720
|
+
SINCE_2_0)
|
1708
1721
|
end
|
1709
1722
|
|
1710
1723
|
def test_class_invalid
|
@@ -1940,7 +1953,7 @@ class TestParser < Minitest::Test
|
|
1940
1953
|
%q{def f(foo:); end},
|
1941
1954
|
%q{ ~~~ name (args.kwarg)
|
1942
1955
|
| ~~~~ expression (args.kwarg)},
|
1943
|
-
|
1956
|
+
SINCE_2_1)
|
1944
1957
|
end
|
1945
1958
|
|
1946
1959
|
def test_kwoptarg
|
@@ -1951,7 +1964,7 @@ class TestParser < Minitest::Test
|
|
1951
1964
|
%q{def f(foo: 1); end},
|
1952
1965
|
%q{ ~~~ name (args.kwoptarg)
|
1953
1966
|
| ~~~~~~ expression (args.kwoptarg)},
|
1954
|
-
|
1967
|
+
SINCE_2_0)
|
1955
1968
|
end
|
1956
1969
|
|
1957
1970
|
def test_kwrestarg_named
|
@@ -1962,7 +1975,7 @@ class TestParser < Minitest::Test
|
|
1962
1975
|
%q{def f(**foo); end},
|
1963
1976
|
%q{ ~~~ name (args.kwrestarg)
|
1964
1977
|
| ~~~~~ expression (args.kwrestarg)},
|
1965
|
-
|
1978
|
+
SINCE_2_0)
|
1966
1979
|
end
|
1967
1980
|
|
1968
1981
|
def test_kwrestarg_unnamed
|
@@ -1972,7 +1985,7 @@ class TestParser < Minitest::Test
|
|
1972
1985
|
nil),
|
1973
1986
|
%q{def f(**); end},
|
1974
1987
|
%q{ ~~ expression (args.kwrestarg)},
|
1975
|
-
|
1988
|
+
SINCE_2_0)
|
1976
1989
|
end
|
1977
1990
|
|
1978
1991
|
def test_blockarg
|
@@ -2017,7 +2030,7 @@ class TestParser < Minitest::Test
|
|
2017
2030
|
s(:lvar, :var)),
|
2018
2031
|
%q{def f(var = defined?(var)) var end},
|
2019
2032
|
%q{},
|
2020
|
-
|
2033
|
+
SINCE_2_1)
|
2021
2034
|
|
2022
2035
|
assert_parses(
|
2023
2036
|
s(:def, :f,
|
@@ -2025,7 +2038,7 @@ class TestParser < Minitest::Test
|
|
2025
2038
|
s(:lvar, :var)),
|
2026
2039
|
%q{def f(var: defined?(var)) var end},
|
2027
2040
|
%q{},
|
2028
|
-
|
2041
|
+
SINCE_2_1)
|
2029
2042
|
|
2030
2043
|
assert_parses(
|
2031
2044
|
s(:block,
|
@@ -2034,7 +2047,7 @@ class TestParser < Minitest::Test
|
|
2034
2047
|
s(:lvar, :a)),
|
2035
2048
|
%q{lambda{|;a|a}},
|
2036
2049
|
%q{},
|
2037
|
-
|
2050
|
+
SINCE_1_9)
|
2038
2051
|
end
|
2039
2052
|
|
2040
2053
|
def assert_parses_args(ast, code, versions=ALL_VERSIONS)
|
@@ -2064,7 +2077,7 @@ class TestParser < Minitest::Test
|
|
2064
2077
|
s(:arg, :p),
|
2065
2078
|
s(:blockarg, :b)),
|
2066
2079
|
%q{a, o=1, *r, p, &b},
|
2067
|
-
|
2080
|
+
SINCE_1_9)
|
2068
2081
|
|
2069
2082
|
# f_arg tCOMMA f_optarg opt_f_block_arg
|
2070
2083
|
assert_parses_args(
|
@@ -2082,7 +2095,7 @@ class TestParser < Minitest::Test
|
|
2082
2095
|
s(:arg, :p),
|
2083
2096
|
s(:blockarg, :b)),
|
2084
2097
|
%q{a, o=1, p, &b},
|
2085
|
-
|
2098
|
+
SINCE_1_9)
|
2086
2099
|
|
2087
2100
|
# f_arg tCOMMA f_rest_arg opt_f_block_arg
|
2088
2101
|
assert_parses_args(
|
@@ -2100,7 +2113,7 @@ class TestParser < Minitest::Test
|
|
2100
2113
|
s(:arg, :p),
|
2101
2114
|
s(:blockarg, :b)),
|
2102
2115
|
%q{a, *r, p, &b},
|
2103
|
-
|
2116
|
+
SINCE_1_9)
|
2104
2117
|
|
2105
2118
|
# f_arg opt_f_block_arg
|
2106
2119
|
assert_parses_args(
|
@@ -2125,7 +2138,7 @@ class TestParser < Minitest::Test
|
|
2125
2138
|
s(:arg, :p),
|
2126
2139
|
s(:blockarg, :b)),
|
2127
2140
|
%q{o=1, *r, p, &b},
|
2128
|
-
|
2141
|
+
SINCE_1_9)
|
2129
2142
|
|
2130
2143
|
# f_optarg opt_f_block_arg
|
2131
2144
|
assert_parses_args(
|
@@ -2141,7 +2154,7 @@ class TestParser < Minitest::Test
|
|
2141
2154
|
s(:arg, :p),
|
2142
2155
|
s(:blockarg, :b)),
|
2143
2156
|
%q{o=1, p, &b},
|
2144
|
-
|
2157
|
+
SINCE_1_9)
|
2145
2158
|
|
2146
2159
|
# f_rest_arg opt_f_block_arg
|
2147
2160
|
assert_parses_args(
|
@@ -2157,7 +2170,7 @@ class TestParser < Minitest::Test
|
|
2157
2170
|
s(:arg, :p),
|
2158
2171
|
s(:blockarg, :b)),
|
2159
2172
|
%q{*r, p, &b},
|
2160
|
-
|
2173
|
+
SINCE_1_9)
|
2161
2174
|
|
2162
2175
|
# f_block_arg
|
2163
2176
|
assert_parses_args(
|
@@ -2180,7 +2193,7 @@ class TestParser < Minitest::Test
|
|
2180
2193
|
s(:kwrestarg, :baz),
|
2181
2194
|
s(:blockarg, :b)),
|
2182
2195
|
%q{(foo: 1, bar: 2, **baz, &b)},
|
2183
|
-
|
2196
|
+
SINCE_2_0)
|
2184
2197
|
|
2185
2198
|
# f_kwarg opt_f_block_arg
|
2186
2199
|
assert_parses_args(
|
@@ -2188,7 +2201,7 @@ class TestParser < Minitest::Test
|
|
2188
2201
|
s(:kwoptarg, :foo, s(:int, 1)),
|
2189
2202
|
s(:blockarg, :b)),
|
2190
2203
|
%q{(foo: 1, &b)},
|
2191
|
-
|
2204
|
+
SINCE_2_0)
|
2192
2205
|
|
2193
2206
|
# f_kwrest opt_f_block_arg
|
2194
2207
|
assert_parses_args(
|
@@ -2196,14 +2209,14 @@ class TestParser < Minitest::Test
|
|
2196
2209
|
s(:kwrestarg, :baz),
|
2197
2210
|
s(:blockarg, :b)),
|
2198
2211
|
%q{**baz, &b},
|
2199
|
-
|
2212
|
+
SINCE_2_0)
|
2200
2213
|
|
2201
2214
|
assert_parses_args(
|
2202
2215
|
s(:args,
|
2203
2216
|
s(:restarg),
|
2204
2217
|
s(:kwrestarg)),
|
2205
2218
|
%q{*, **},
|
2206
|
-
|
2219
|
+
SINCE_2_0)
|
2207
2220
|
end
|
2208
2221
|
|
2209
2222
|
def test_kwarg_no_paren
|
@@ -2211,16 +2224,16 @@ class TestParser < Minitest::Test
|
|
2211
2224
|
s(:args,
|
2212
2225
|
s(:kwarg, :foo)),
|
2213
2226
|
%Q{foo:\n},
|
2214
|
-
|
2227
|
+
SINCE_2_1)
|
2215
2228
|
|
2216
2229
|
assert_parses_args(
|
2217
2230
|
s(:args,
|
2218
2231
|
s(:kwoptarg, :foo, s(:int, -1))),
|
2219
2232
|
%Q{foo: -1\n},
|
2220
|
-
|
2233
|
+
SINCE_2_1)
|
2221
2234
|
end
|
2222
2235
|
|
2223
|
-
def assert_parses_margs(ast, code, versions=
|
2236
|
+
def assert_parses_margs(ast, code, versions=SINCE_1_9)
|
2224
2237
|
assert_parses_args(
|
2225
2238
|
s(:args, ast),
|
2226
2239
|
%Q{(#{code})},
|
@@ -2319,12 +2332,12 @@ class TestParser < Minitest::Test
|
|
2319
2332
|
assert_parses_blockargs(
|
2320
2333
|
s(:args, s(:shadowarg, :a)),
|
2321
2334
|
%q{|;a|},
|
2322
|
-
|
2335
|
+
SINCE_1_9)
|
2323
2336
|
|
2324
2337
|
assert_parses_blockargs(
|
2325
2338
|
s(:args, s(:shadowarg, :a)),
|
2326
2339
|
%Q{|;\na\n|},
|
2327
|
-
|
2340
|
+
SINCE_2_0)
|
2328
2341
|
|
2329
2342
|
# tOROP
|
2330
2343
|
assert_parses_blockargs(
|
@@ -2336,9 +2349,15 @@ class TestParser < Minitest::Test
|
|
2336
2349
|
# block_par tCOMMA tAMPER lhs
|
2337
2350
|
# f_arg opt_f_block_arg
|
2338
2351
|
# f_arg tCOMMA
|
2352
|
+
assert_parses_blockargs(
|
2353
|
+
s(:args, s(:procarg0, :a)),
|
2354
|
+
%q{|a|},
|
2355
|
+
SINCE_1_9)
|
2356
|
+
|
2339
2357
|
assert_parses_blockargs(
|
2340
2358
|
s(:args, s(:arg, :a)),
|
2341
|
-
%q{|a|}
|
2359
|
+
%q{|a|},
|
2360
|
+
%w(1.8))
|
2342
2361
|
|
2343
2362
|
assert_parses_blockargs(
|
2344
2363
|
s(:args, s(:arg, :a), s(:arg, :c)),
|
@@ -2350,7 +2369,7 @@ class TestParser < Minitest::Test
|
|
2350
2369
|
%w(1.8))
|
2351
2370
|
|
2352
2371
|
assert_parses_blockargs(
|
2353
|
-
s(:args, s(:
|
2372
|
+
s(:args, s(:arg, :a)),
|
2354
2373
|
%q{|a,|}
|
2355
2374
|
)
|
2356
2375
|
|
@@ -2466,7 +2485,7 @@ class TestParser < Minitest::Test
|
|
2466
2485
|
s(:restarg, :r),
|
2467
2486
|
s(:blockarg, :b)),
|
2468
2487
|
%q{|a, o=1, o1=2, *r, &b|},
|
2469
|
-
|
2488
|
+
SINCE_1_9)
|
2470
2489
|
|
2471
2490
|
# f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
2472
2491
|
assert_parses_blockargs(
|
@@ -2477,7 +2496,7 @@ class TestParser < Minitest::Test
|
|
2477
2496
|
s(:arg, :p),
|
2478
2497
|
s(:blockarg, :b)),
|
2479
2498
|
%q{|a, o=1, *r, p, &b|},
|
2480
|
-
|
2499
|
+
SINCE_1_9)
|
2481
2500
|
|
2482
2501
|
# f_arg tCOMMA f_block_optarg opt_f_block_arg
|
2483
2502
|
assert_parses_blockargs(
|
@@ -2486,7 +2505,7 @@ class TestParser < Minitest::Test
|
|
2486
2505
|
s(:optarg, :o, s(:int, 1)),
|
2487
2506
|
s(:blockarg, :b)),
|
2488
2507
|
%q{|a, o=1, &b|},
|
2489
|
-
|
2508
|
+
SINCE_1_9)
|
2490
2509
|
|
2491
2510
|
# f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg
|
2492
2511
|
assert_parses_blockargs(
|
@@ -2496,7 +2515,7 @@ class TestParser < Minitest::Test
|
|
2496
2515
|
s(:arg, :p),
|
2497
2516
|
s(:blockarg, :b)),
|
2498
2517
|
%q{|a, o=1, p, &b|},
|
2499
|
-
|
2518
|
+
SINCE_1_9)
|
2500
2519
|
|
2501
2520
|
# f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
2502
2521
|
assert_parses_blockargs(
|
@@ -2506,7 +2525,7 @@ class TestParser < Minitest::Test
|
|
2506
2525
|
s(:arg, :p),
|
2507
2526
|
s(:blockarg, :b)),
|
2508
2527
|
%q{|a, *r, p, &b|},
|
2509
|
-
|
2528
|
+
SINCE_1_9)
|
2510
2529
|
|
2511
2530
|
# f_block_optarg tCOMMA f_rest_arg opt_f_block_arg
|
2512
2531
|
assert_parses_blockargs(
|
@@ -2515,7 +2534,7 @@ class TestParser < Minitest::Test
|
|
2515
2534
|
s(:restarg, :r),
|
2516
2535
|
s(:blockarg, :b)),
|
2517
2536
|
%q{|o=1, *r, &b|},
|
2518
|
-
|
2537
|
+
SINCE_1_9)
|
2519
2538
|
|
2520
2539
|
# f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg
|
2521
2540
|
assert_parses_blockargs(
|
@@ -2525,7 +2544,7 @@ class TestParser < Minitest::Test
|
|
2525
2544
|
s(:arg, :p),
|
2526
2545
|
s(:blockarg, :b)),
|
2527
2546
|
%q{|o=1, *r, p, &b|},
|
2528
|
-
|
2547
|
+
SINCE_1_9)
|
2529
2548
|
|
2530
2549
|
# f_block_optarg opt_f_block_arg
|
2531
2550
|
assert_parses_blockargs(
|
@@ -2533,7 +2552,7 @@ class TestParser < Minitest::Test
|
|
2533
2552
|
s(:optarg, :o, s(:int, 1)),
|
2534
2553
|
s(:blockarg, :b)),
|
2535
2554
|
%q{|o=1, &b|},
|
2536
|
-
|
2555
|
+
SINCE_1_9)
|
2537
2556
|
|
2538
2557
|
# f_block_optarg tCOMMA f_arg opt_f_block_arg
|
2539
2558
|
assert_parses_blockargs(
|
@@ -2542,7 +2561,7 @@ class TestParser < Minitest::Test
|
|
2542
2561
|
s(:arg, :p),
|
2543
2562
|
s(:blockarg, :b)),
|
2544
2563
|
%q{|o=1, p, &b|},
|
2545
|
-
|
2564
|
+
SINCE_1_9)
|
2546
2565
|
|
2547
2566
|
# f_rest_arg tCOMMA f_arg opt_f_block_arg
|
2548
2567
|
assert_parses_blockargs(
|
@@ -2551,7 +2570,26 @@ class TestParser < Minitest::Test
|
|
2551
2570
|
s(:arg, :p),
|
2552
2571
|
s(:blockarg, :b)),
|
2553
2572
|
%q{|*r, p, &b|},
|
2554
|
-
|
2573
|
+
SINCE_1_9)
|
2574
|
+
end
|
2575
|
+
|
2576
|
+
def test_multiple_args_with_trailing_comma
|
2577
|
+
assert_parses_blockargs(
|
2578
|
+
s(:args,
|
2579
|
+
s(:arg, :a),
|
2580
|
+
s(:arg, :b)),
|
2581
|
+
%q(|a, b,|)
|
2582
|
+
)
|
2583
|
+
end
|
2584
|
+
|
2585
|
+
def test_procarg0_legacy
|
2586
|
+
Parser::Builders::Default.emit_procarg0 = false
|
2587
|
+
assert_parses_blockargs(
|
2588
|
+
s(:args,
|
2589
|
+
s(:arg, :a)),
|
2590
|
+
%q{|a|}
|
2591
|
+
)
|
2592
|
+
Parser::Builders::Default.emit_procarg0 = true
|
2555
2593
|
end
|
2556
2594
|
|
2557
2595
|
def test_block_kwarg_combinations
|
@@ -2563,7 +2601,7 @@ class TestParser < Minitest::Test
|
|
2563
2601
|
s(:kwrestarg, :baz),
|
2564
2602
|
s(:blockarg, :b)),
|
2565
2603
|
%q{|foo: 1, bar: 2, **baz, &b|},
|
2566
|
-
|
2604
|
+
SINCE_2_0)
|
2567
2605
|
|
2568
2606
|
# f_block_kwarg opt_f_block_arg
|
2569
2607
|
assert_parses_blockargs(
|
@@ -2571,7 +2609,7 @@ class TestParser < Minitest::Test
|
|
2571
2609
|
s(:kwoptarg, :foo, s(:int, 1)),
|
2572
2610
|
s(:blockarg, :b)),
|
2573
2611
|
%q{|foo: 1, &b|},
|
2574
|
-
|
2612
|
+
SINCE_2_0)
|
2575
2613
|
|
2576
2614
|
# f_kwrest opt_f_block_arg
|
2577
2615
|
assert_parses_blockargs(
|
@@ -2579,7 +2617,7 @@ class TestParser < Minitest::Test
|
|
2579
2617
|
s(:kwrestarg, :baz),
|
2580
2618
|
s(:blockarg, :b)),
|
2581
2619
|
%q{|**baz, &b|},
|
2582
|
-
|
2620
|
+
SINCE_2_0)
|
2583
2621
|
end
|
2584
2622
|
|
2585
2623
|
def test_block_kwarg
|
@@ -2587,7 +2625,7 @@ class TestParser < Minitest::Test
|
|
2587
2625
|
s(:args,
|
2588
2626
|
s(:kwarg, :foo)),
|
2589
2627
|
%q{|foo:|},
|
2590
|
-
|
2628
|
+
SINCE_2_1)
|
2591
2629
|
end
|
2592
2630
|
|
2593
2631
|
def test_arg_invalid
|
@@ -2642,14 +2680,14 @@ class TestParser < Minitest::Test
|
|
2642
2680
|
%q{def foo(aa, (bb, aa)); end},
|
2643
2681
|
%q{ ^^ location
|
2644
2682
|
| ~~ highlights (0)},
|
2645
|
-
|
2683
|
+
SINCE_1_9)
|
2646
2684
|
|
2647
2685
|
assert_diagnoses(
|
2648
2686
|
[:error, :duplicate_argument],
|
2649
2687
|
%q{def foo(aa, *r, aa); end},
|
2650
2688
|
%q{ ^^ location
|
2651
2689
|
| ~~ highlights (0)},
|
2652
|
-
|
2690
|
+
SINCE_1_9)
|
2653
2691
|
|
2654
2692
|
|
2655
2693
|
assert_diagnoses(
|
@@ -2657,28 +2695,28 @@ class TestParser < Minitest::Test
|
|
2657
2695
|
%q{lambda do |aa; aa| end},
|
2658
2696
|
%q{ ^^ location
|
2659
2697
|
| ~~ highlights (0)},
|
2660
|
-
|
2698
|
+
SINCE_1_9)
|
2661
2699
|
|
2662
2700
|
assert_diagnoses(
|
2663
2701
|
[:error, :duplicate_argument],
|
2664
2702
|
%q{def foo(aa, aa: 1); end},
|
2665
2703
|
%q{ ^^ location
|
2666
2704
|
| ~~ highlights (0)},
|
2667
|
-
|
2705
|
+
SINCE_2_0)
|
2668
2706
|
|
2669
2707
|
assert_diagnoses(
|
2670
2708
|
[:error, :duplicate_argument],
|
2671
2709
|
%q{def foo(aa, **aa); end},
|
2672
2710
|
%q{ ^^ location
|
2673
2711
|
| ~~ highlights (0)},
|
2674
|
-
|
2712
|
+
SINCE_2_0)
|
2675
2713
|
|
2676
2714
|
assert_diagnoses(
|
2677
2715
|
[:error, :duplicate_argument],
|
2678
2716
|
%q{def foo(aa, aa:); end},
|
2679
2717
|
%q{ ^^ location
|
2680
2718
|
| ~~ highlights (0)},
|
2681
|
-
|
2719
|
+
SINCE_2_1)
|
2682
2720
|
end
|
2683
2721
|
|
2684
2722
|
def test_arg_duplicate_ignored
|
@@ -2694,7 +2732,7 @@ class TestParser < Minitest::Test
|
|
2694
2732
|
nil),
|
2695
2733
|
%q{def foo(_, _); end},
|
2696
2734
|
%q{},
|
2697
|
-
|
2735
|
+
SINCE_1_9)
|
2698
2736
|
|
2699
2737
|
assert_diagnoses(
|
2700
2738
|
[:error, :duplicate_argument],
|
@@ -2708,7 +2746,7 @@ class TestParser < Minitest::Test
|
|
2708
2746
|
nil),
|
2709
2747
|
%q{def foo(_a, _a); end},
|
2710
2748
|
%q{},
|
2711
|
-
|
2749
|
+
SINCE_2_0)
|
2712
2750
|
end
|
2713
2751
|
|
2714
2752
|
def test_arg_duplicate_proc
|
@@ -2724,7 +2762,7 @@ class TestParser < Minitest::Test
|
|
2724
2762
|
[:error, :duplicate_argument],
|
2725
2763
|
%q{proc{|a,a|}},
|
2726
2764
|
%q{},
|
2727
|
-
|
2765
|
+
SINCE_1_9)
|
2728
2766
|
end
|
2729
2767
|
|
2730
2768
|
def test_kwarg_invalid
|
@@ -2732,13 +2770,13 @@ class TestParser < Minitest::Test
|
|
2732
2770
|
[:error, :argument_const],
|
2733
2771
|
%q{def foo(Abc: 1); end},
|
2734
2772
|
%q{ ~~~~ location},
|
2735
|
-
|
2773
|
+
SINCE_2_0)
|
2736
2774
|
|
2737
2775
|
assert_diagnoses(
|
2738
2776
|
[:error, :argument_const],
|
2739
2777
|
%q{def foo(Abc:); end},
|
2740
2778
|
%q{ ~~~~ location},
|
2741
|
-
|
2779
|
+
SINCE_2_1)
|
2742
2780
|
end
|
2743
2781
|
|
2744
2782
|
def test_arg_label
|
@@ -2747,14 +2785,14 @@ class TestParser < Minitest::Test
|
|
2747
2785
|
s(:send, nil, :a, s(:sym, :b))),
|
2748
2786
|
%q{def foo() a:b end},
|
2749
2787
|
%q{},
|
2750
|
-
|
2788
|
+
SINCE_1_9)
|
2751
2789
|
|
2752
2790
|
assert_parses(
|
2753
2791
|
s(:def, :foo, s(:args),
|
2754
2792
|
s(:send, nil, :a, s(:sym, :b))),
|
2755
2793
|
%Q{def foo\n a:b end},
|
2756
2794
|
%q{},
|
2757
|
-
|
2795
|
+
SINCE_1_9)
|
2758
2796
|
|
2759
2797
|
assert_parses(
|
2760
2798
|
s(:block,
|
@@ -2764,7 +2802,7 @@ class TestParser < Minitest::Test
|
|
2764
2802
|
s(:sym, :b))),
|
2765
2803
|
%Q{f { || a:b }},
|
2766
2804
|
%q{},
|
2767
|
-
|
2805
|
+
SINCE_1_9)
|
2768
2806
|
end
|
2769
2807
|
|
2770
2808
|
#
|
@@ -2915,7 +2953,7 @@ class TestParser < Minitest::Test
|
|
2915
2953
|
[:warning, :ambiguous_prefix, { :prefix => '**' }],
|
2916
2954
|
%q{m **foo},
|
2917
2955
|
%q{ ^^ location},
|
2918
|
-
|
2956
|
+
SINCE_2_0)
|
2919
2957
|
end
|
2920
2958
|
|
2921
2959
|
def test_send_block_chain_cmd
|
@@ -2977,7 +3015,7 @@ class TestParser < Minitest::Test
|
|
2977
3015
|
s(:args), nil),
|
2978
3016
|
%q{meth 1 do end.fun bar do end},
|
2979
3017
|
%q{},
|
2980
|
-
|
3018
|
+
SINCE_2_0)
|
2981
3019
|
|
2982
3020
|
assert_parses(
|
2983
3021
|
s(:block,
|
@@ -2989,7 +3027,7 @@ class TestParser < Minitest::Test
|
|
2989
3027
|
s(:args), nil),
|
2990
3028
|
%q{meth 1 do end.fun(bar) {}},
|
2991
3029
|
%q{},
|
2992
|
-
|
3030
|
+
SINCE_2_0)
|
2993
3031
|
|
2994
3032
|
assert_parses(
|
2995
3033
|
s(:block,
|
@@ -3001,7 +3039,7 @@ class TestParser < Minitest::Test
|
|
3001
3039
|
s(:args), nil),
|
3002
3040
|
%q{meth 1 do end.fun {}},
|
3003
3041
|
%q{},
|
3004
|
-
|
3042
|
+
SINCE_2_0)
|
3005
3043
|
end
|
3006
3044
|
|
3007
3045
|
def test_send_paren_block_cmd
|
@@ -3098,7 +3136,7 @@ class TestParser < Minitest::Test
|
|
3098
3136
|
s(:send, s(:lvar, :foo), :'!=', s(:int, 1)),
|
3099
3137
|
%q{foo != 1},
|
3100
3138
|
%q{},
|
3101
|
-
|
3139
|
+
SINCE_1_9)
|
3102
3140
|
|
3103
3141
|
assert_parses(
|
3104
3142
|
s(:send, s(:lvar, :foo), :===, s(:int, 1)),
|
@@ -3118,7 +3156,7 @@ class TestParser < Minitest::Test
|
|
3118
3156
|
s(:send, s(:lvar, :foo), :'!~', s(:int, 1)),
|
3119
3157
|
%q{foo !~ 1},
|
3120
3158
|
%q{},
|
3121
|
-
|
3159
|
+
SINCE_1_9)
|
3122
3160
|
|
3123
3161
|
assert_parses(
|
3124
3162
|
s(:send, s(:lvar, :foo), :<<, s(:int, 1)),
|
@@ -3156,7 +3194,7 @@ class TestParser < Minitest::Test
|
|
3156
3194
|
s(:send, s(:lvar, :foo), :'!'),
|
3157
3195
|
%q{!foo},
|
3158
3196
|
%{},
|
3159
|
-
|
3197
|
+
SINCE_1_9)
|
3160
3198
|
end
|
3161
3199
|
|
3162
3200
|
def test_bang_cmd
|
@@ -3170,7 +3208,7 @@ class TestParser < Minitest::Test
|
|
3170
3208
|
s(:send, s(:send, nil, :m, s(:lvar, :foo)), :'!'),
|
3171
3209
|
%q{!m foo},
|
3172
3210
|
%{},
|
3173
|
-
|
3211
|
+
SINCE_1_9)
|
3174
3212
|
end
|
3175
3213
|
|
3176
3214
|
def test_not
|
@@ -3184,19 +3222,19 @@ class TestParser < Minitest::Test
|
|
3184
3222
|
s(:send, s(:lvar, :foo), :'!'),
|
3185
3223
|
%q{not foo},
|
3186
3224
|
%{},
|
3187
|
-
|
3225
|
+
SINCE_1_9)
|
3188
3226
|
|
3189
3227
|
assert_parses(
|
3190
3228
|
s(:send, s(:lvar, :foo), :'!'),
|
3191
3229
|
%q{not(foo)},
|
3192
3230
|
%q{~~~~~~~~ expression},
|
3193
|
-
|
3231
|
+
SINCE_1_9)
|
3194
3232
|
|
3195
3233
|
assert_parses(
|
3196
3234
|
s(:send, s(:begin), :'!'),
|
3197
3235
|
%q{not()},
|
3198
3236
|
%q{~~~~~ expression},
|
3199
|
-
|
3237
|
+
SINCE_1_9)
|
3200
3238
|
end
|
3201
3239
|
|
3202
3240
|
def test_not_cmd
|
@@ -3210,7 +3248,7 @@ class TestParser < Minitest::Test
|
|
3210
3248
|
s(:send, s(:send, nil, :m, s(:lvar, :foo)), :'!'),
|
3211
3249
|
%q{not m foo},
|
3212
3250
|
%{},
|
3213
|
-
|
3251
|
+
SINCE_1_9)
|
3214
3252
|
end
|
3215
3253
|
|
3216
3254
|
def test_pow_precedence
|
@@ -3292,7 +3330,7 @@ class TestParser < Minitest::Test
|
|
3292
3330
|
| ^ begin
|
3293
3331
|
| ^ end
|
3294
3332
|
|~~~~~ expression},
|
3295
|
-
|
3333
|
+
SINCE_1_9)
|
3296
3334
|
|
3297
3335
|
assert_parses(
|
3298
3336
|
s(:block, s(:lambda),
|
@@ -3303,7 +3341,7 @@ class TestParser < Minitest::Test
|
|
3303
3341
|
| ^ end
|
3304
3342
|
| ^ expression (args.restarg)
|
3305
3343
|
|~~~~~~~~ expression},
|
3306
|
-
|
3344
|
+
SINCE_1_9)
|
3307
3345
|
|
3308
3346
|
assert_parses(
|
3309
3347
|
s(:block, s(:lambda),
|
@@ -3313,7 +3351,7 @@ class TestParser < Minitest::Test
|
|
3313
3351
|
| ^^ begin
|
3314
3352
|
| ^^^ end
|
3315
3353
|
|~~~~~~~~~ expression},
|
3316
|
-
|
3354
|
+
SINCE_1_9)
|
3317
3355
|
end
|
3318
3356
|
|
3319
3357
|
def test_send_lambda_args
|
@@ -3329,7 +3367,7 @@ class TestParser < Minitest::Test
|
|
3329
3367
|
| ^ begin
|
3330
3368
|
| ^ end
|
3331
3369
|
|~~~~~~~~~ expression},
|
3332
|
-
|
3370
|
+
SINCE_1_9)
|
3333
3371
|
|
3334
3372
|
assert_parses(
|
3335
3373
|
s(:block, s(:lambda),
|
@@ -3338,7 +3376,7 @@ class TestParser < Minitest::Test
|
|
3338
3376
|
nil),
|
3339
3377
|
%q{-> (a) { }},
|
3340
3378
|
%q{},
|
3341
|
-
|
3379
|
+
SINCE_2_0)
|
3342
3380
|
end
|
3343
3381
|
|
3344
3382
|
def test_send_lambda_args_shadow
|
@@ -3351,7 +3389,7 @@ class TestParser < Minitest::Test
|
|
3351
3389
|
nil),
|
3352
3390
|
%q{->(a; foo, bar) { }},
|
3353
3391
|
%q{ ~~~ expression (args.shadowarg)},
|
3354
|
-
|
3392
|
+
SINCE_1_9)
|
3355
3393
|
end
|
3356
3394
|
|
3357
3395
|
def test_send_lambda_args_noparen
|
@@ -3362,7 +3400,7 @@ class TestParser < Minitest::Test
|
|
3362
3400
|
nil),
|
3363
3401
|
%q{-> a: 1 { }},
|
3364
3402
|
%q{},
|
3365
|
-
|
3403
|
+
SINCE_2_0)
|
3366
3404
|
|
3367
3405
|
assert_parses(
|
3368
3406
|
s(:block, s(:lambda),
|
@@ -3371,7 +3409,7 @@ class TestParser < Minitest::Test
|
|
3371
3409
|
nil),
|
3372
3410
|
%q{-> a: { }},
|
3373
3411
|
%q{},
|
3374
|
-
|
3412
|
+
SINCE_2_1)
|
3375
3413
|
end
|
3376
3414
|
|
3377
3415
|
def test_send_lambda_legacy
|
@@ -3384,7 +3422,7 @@ class TestParser < Minitest::Test
|
|
3384
3422
|
| ^ begin
|
3385
3423
|
| ^ end
|
3386
3424
|
|~~~~~ expression},
|
3387
|
-
|
3425
|
+
SINCE_1_9)
|
3388
3426
|
Parser::Builders::Default.emit_lambda = true
|
3389
3427
|
end
|
3390
3428
|
|
@@ -3397,7 +3435,7 @@ class TestParser < Minitest::Test
|
|
3397
3435
|
| ^ end
|
3398
3436
|
| ^ dot
|
3399
3437
|
|~~~~~~~ expression},
|
3400
|
-
|
3438
|
+
SINCE_1_9)
|
3401
3439
|
|
3402
3440
|
assert_parses(
|
3403
3441
|
s(:send, s(:lvar, :foo), :call,
|
@@ -3407,7 +3445,7 @@ class TestParser < Minitest::Test
|
|
3407
3445
|
| ^ end
|
3408
3446
|
| ^^ dot
|
3409
3447
|
|~~~~~~~~ expression},
|
3410
|
-
|
3448
|
+
SINCE_1_9)
|
3411
3449
|
end
|
3412
3450
|
|
3413
3451
|
def test_send_conditional
|
@@ -3415,7 +3453,7 @@ class TestParser < Minitest::Test
|
|
3415
3453
|
s(:csend, s(:send, nil, :a), :b),
|
3416
3454
|
%q{a&.b},
|
3417
3455
|
%q{ ^^ dot},
|
3418
|
-
|
3456
|
+
SINCE_2_3)
|
3419
3457
|
end
|
3420
3458
|
|
3421
3459
|
def test_send_attr_asgn_conditional
|
@@ -3423,7 +3461,7 @@ class TestParser < Minitest::Test
|
|
3423
3461
|
s(:csend, s(:send, nil, :a), :b=, s(:int, 1)),
|
3424
3462
|
%q{a&.b = 1},
|
3425
3463
|
%q{ ^^ dot},
|
3426
|
-
|
3464
|
+
SINCE_2_3)
|
3427
3465
|
end
|
3428
3466
|
|
3429
3467
|
def test_send_block_conditional
|
@@ -3434,7 +3472,7 @@ class TestParser < Minitest::Test
|
|
3434
3472
|
s(:args), nil),
|
3435
3473
|
%q{foo&.bar {}},
|
3436
3474
|
%q{},
|
3437
|
-
|
3475
|
+
SINCE_2_3)
|
3438
3476
|
end
|
3439
3477
|
|
3440
3478
|
def test_send_op_asgn_conditional
|
@@ -3442,7 +3480,7 @@ class TestParser < Minitest::Test
|
|
3442
3480
|
s(:and_asgn, s(:csend, s(:send, nil, :a), :b), s(:int, 1)),
|
3443
3481
|
%q{a&.b &&= 1},
|
3444
3482
|
%q{},
|
3445
|
-
|
3483
|
+
SINCE_2_3)
|
3446
3484
|
end
|
3447
3485
|
|
3448
3486
|
def test_lvar_injecting_match
|
@@ -3457,7 +3495,7 @@ class TestParser < Minitest::Test
|
|
3457
3495
|
%q{/(?<match>bar)/ =~ 'bar'; match},
|
3458
3496
|
%q{ ~~ selector (match_with_lvasgn)
|
3459
3497
|
|~~~~~~~~~~~~~~~~~~~~~~~~ expression (match_with_lvasgn)},
|
3460
|
-
|
3498
|
+
SINCE_1_9)
|
3461
3499
|
end
|
3462
3500
|
|
3463
3501
|
def test_non_lvar_injecting_match
|
@@ -3614,7 +3652,7 @@ class TestParser < Minitest::Test
|
|
3614
3652
|
s(:lvar, :bar)),
|
3615
3653
|
%q{foo[bar,]},
|
3616
3654
|
%q{},
|
3617
|
-
|
3655
|
+
SINCE_1_9)
|
3618
3656
|
end
|
3619
3657
|
|
3620
3658
|
def test_args_assocs
|
@@ -3655,7 +3693,7 @@ class TestParser < Minitest::Test
|
|
3655
3693
|
s(:hash, s(:pair, s(:sym, :baz), s(:int, 1)))),
|
3656
3694
|
%q{foo[:baz => 1,]},
|
3657
3695
|
%q{},
|
3658
|
-
|
3696
|
+
SINCE_1_9)
|
3659
3697
|
end
|
3660
3698
|
|
3661
3699
|
def test_args_args_assocs
|
@@ -3680,7 +3718,7 @@ class TestParser < Minitest::Test
|
|
3680
3718
|
s(:hash, s(:pair, s(:sym, :baz), s(:int, 1)))),
|
3681
3719
|
%q{foo[bar, :baz => 1,]},
|
3682
3720
|
%q{},
|
3683
|
-
|
3721
|
+
SINCE_1_9)
|
3684
3722
|
end
|
3685
3723
|
|
3686
3724
|
def test_args_args_assocs_star
|
@@ -3748,7 +3786,7 @@ class TestParser < Minitest::Test
|
|
3748
3786
|
s(:args), nil),
|
3749
3787
|
%q{foo.fun (1) {}},
|
3750
3788
|
%q{},
|
3751
|
-
|
3789
|
+
SINCE_1_9)
|
3752
3790
|
|
3753
3791
|
assert_parses(
|
3754
3792
|
s(:block,
|
@@ -3764,7 +3802,7 @@ class TestParser < Minitest::Test
|
|
3764
3802
|
s(:args), nil),
|
3765
3803
|
%q{foo::fun (1) {}},
|
3766
3804
|
%q{},
|
3767
|
-
|
3805
|
+
SINCE_1_9)
|
3768
3806
|
end
|
3769
3807
|
|
3770
3808
|
def test_space_args_hash_literal_then_block
|
@@ -3775,8 +3813,7 @@ class TestParser < Minitest::Test
|
|
3775
3813
|
s(:args),
|
3776
3814
|
s(:int, 1)),
|
3777
3815
|
%q{f 1, {1 => 2} {1}},
|
3778
|
-
%q{}
|
3779
|
-
ALL_VERSIONS)
|
3816
|
+
%q{})
|
3780
3817
|
end
|
3781
3818
|
|
3782
3819
|
def test_space_args_arg_call
|
@@ -4019,7 +4056,7 @@ class TestParser < Minitest::Test
|
|
4019
4056
|
s(:args), nil),
|
4020
4057
|
%q{fun () {}},
|
4021
4058
|
%q{ ~~ expression (send.begin)},
|
4022
|
-
|
4059
|
+
SINCE_2_0)
|
4023
4060
|
end
|
4024
4061
|
|
4025
4062
|
#
|
@@ -4204,7 +4241,7 @@ class TestParser < Minitest::Test
|
|
4204
4241
|
s(:const, nil, :T))),
|
4205
4242
|
%q{t=1;(foo)?t:T},
|
4206
4243
|
%q{},
|
4207
|
-
|
4244
|
+
SINCE_1_9)
|
4208
4245
|
end
|
4209
4246
|
|
4210
4247
|
def test_if_masgn
|
@@ -4221,7 +4258,7 @@ class TestParser < Minitest::Test
|
|
4221
4258
|
s(:begin, nil), nil, nil),
|
4222
4259
|
%q{if (a, b = foo); end},
|
4223
4260
|
%q{},
|
4224
|
-
|
4261
|
+
SINCE_2_4)
|
4225
4262
|
end
|
4226
4263
|
|
4227
4264
|
def test_if_mod_masgn
|
@@ -4548,7 +4585,7 @@ class TestParser < Minitest::Test
|
|
4548
4585
|
%q{break(foo)},
|
4549
4586
|
%q{~~~~~ keyword
|
4550
4587
|
|~~~~~~~~~~ expression},
|
4551
|
-
|
4588
|
+
SINCE_1_9)
|
4552
4589
|
|
4553
4590
|
assert_parses(
|
4554
4591
|
s(:break, s(:begin, s(:lvar, :foo))),
|
@@ -4568,7 +4605,7 @@ class TestParser < Minitest::Test
|
|
4568
4605
|
%q{break()},
|
4569
4606
|
%q{~~~~~ keyword
|
4570
4607
|
|~~~~~~~ expression},
|
4571
|
-
|
4608
|
+
SINCE_1_9)
|
4572
4609
|
|
4573
4610
|
assert_parses(
|
4574
4611
|
s(:break),
|
@@ -4595,7 +4632,7 @@ class TestParser < Minitest::Test
|
|
4595
4632
|
%q{return(foo)},
|
4596
4633
|
%q{~~~~~~ keyword
|
4597
4634
|
|~~~~~~~~~~~ expression},
|
4598
|
-
|
4635
|
+
SINCE_1_9)
|
4599
4636
|
|
4600
4637
|
assert_parses(
|
4601
4638
|
s(:return, s(:begin, s(:lvar, :foo))),
|
@@ -4615,7 +4652,7 @@ class TestParser < Minitest::Test
|
|
4615
4652
|
%q{return()},
|
4616
4653
|
%q{~~~~~~ keyword
|
4617
4654
|
|~~~~~~~~ expression},
|
4618
|
-
|
4655
|
+
SINCE_1_9)
|
4619
4656
|
|
4620
4657
|
assert_parses(
|
4621
4658
|
s(:return),
|
@@ -4642,7 +4679,7 @@ class TestParser < Minitest::Test
|
|
4642
4679
|
%q{next(foo)},
|
4643
4680
|
%q{~~~~ keyword
|
4644
4681
|
|~~~~~~~~~ expression},
|
4645
|
-
|
4682
|
+
SINCE_1_9)
|
4646
4683
|
|
4647
4684
|
assert_parses(
|
4648
4685
|
s(:next, s(:begin, s(:lvar, :foo))),
|
@@ -4662,7 +4699,7 @@ class TestParser < Minitest::Test
|
|
4662
4699
|
%q{next()},
|
4663
4700
|
%q{~~~~ keyword
|
4664
4701
|
|~~~~~~ expression},
|
4665
|
-
|
4702
|
+
SINCE_1_9)
|
4666
4703
|
|
4667
4704
|
assert_parses(
|
4668
4705
|
s(:next),
|
@@ -4720,6 +4757,13 @@ class TestParser < Minitest::Test
|
|
4720
4757
|
end
|
4721
4758
|
|
4722
4759
|
def test_rescue_else_useless
|
4760
|
+
assert_parses(
|
4761
|
+
s(:kwbegin,
|
4762
|
+
s(:begin,
|
4763
|
+
s(:int, 2))),
|
4764
|
+
%q{begin; else; 2; end},
|
4765
|
+
%q{ ~~~~ begin (begin)})
|
4766
|
+
|
4723
4767
|
assert_parses(
|
4724
4768
|
s(:kwbegin,
|
4725
4769
|
s(:int, 1),
|
@@ -4840,7 +4884,7 @@ class TestParser < Minitest::Test
|
|
4840
4884
|
| ~~~~~~~~~~ expression (rescue.resbody)
|
4841
4885
|
| ~~~~~~~~~~~~~~~ expression (rescue)
|
4842
4886
|
|~~~~~~~~~~~~~~~~~~~~~~ expression},
|
4843
|
-
|
4887
|
+
SINCE_1_9)
|
4844
4888
|
end
|
4845
4889
|
|
4846
4890
|
def test_resbody_list
|
@@ -4982,7 +5026,7 @@ class TestParser < Minitest::Test
|
|
4982
5026
|
s(:int, 1)))),
|
4983
5027
|
%q{p begin 1.times do 1 end end},
|
4984
5028
|
%{},
|
4985
|
-
|
5029
|
+
SINCE_2_0)
|
4986
5030
|
end
|
4987
5031
|
|
4988
5032
|
def test_bug_cmdarg
|
@@ -5007,7 +5051,7 @@ class TestParser < Minitest::Test
|
|
5007
5051
|
s(:pair, s(:sym, :do), s(:true)))),
|
5008
5052
|
%q{assert do: true},
|
5009
5053
|
%q{},
|
5010
|
-
|
5054
|
+
SINCE_1_9)
|
5011
5055
|
|
5012
5056
|
assert_parses(
|
5013
5057
|
s(:send, nil, :f,
|
@@ -5022,7 +5066,7 @@ class TestParser < Minitest::Test
|
|
5022
5066
|
s(:args), nil))))),
|
5023
5067
|
%q{f x: -> do meth do end end},
|
5024
5068
|
%q{},
|
5025
|
-
|
5069
|
+
SINCE_1_9)
|
5026
5070
|
end
|
5027
5071
|
|
5028
5072
|
def test_file_line_non_literals
|
@@ -5069,7 +5113,7 @@ class TestParser < Minitest::Test
|
|
5069
5113
|
s(:str, "")),
|
5070
5114
|
%q{/\xa8/n =~ ""}.force_encoding(Encoding::UTF_8),
|
5071
5115
|
%{},
|
5072
|
-
|
5116
|
+
SINCE_1_9)
|
5073
5117
|
end
|
5074
5118
|
end
|
5075
5119
|
|
@@ -5101,7 +5145,7 @@ class TestParser < Minitest::Test
|
|
5101
5145
|
[:error, :unicode_point_too_large],
|
5102
5146
|
%q{"\u{120 120000}"},
|
5103
5147
|
%q{ ~~~~~~ location},
|
5104
|
-
|
5148
|
+
SINCE_1_9)
|
5105
5149
|
end
|
5106
5150
|
|
5107
5151
|
def test_on_error
|
@@ -5224,7 +5268,7 @@ class TestParser < Minitest::Test
|
|
5224
5268
|
nil))),
|
5225
5269
|
%q{bar def foo; self.each do end end},
|
5226
5270
|
%q{},
|
5227
|
-
|
5271
|
+
SINCE_1_9)
|
5228
5272
|
end
|
5229
5273
|
|
5230
5274
|
def test_bug_do_block_in_cmdarg
|
@@ -5261,7 +5305,7 @@ class TestParser < Minitest::Test
|
|
5261
5305
|
s(:while, s(:send, s(:begin, s(:true)), :"!"), nil),
|
5262
5306
|
%q{while not (true) do end},
|
5263
5307
|
%q{},
|
5264
|
-
|
5308
|
+
SINCE_1_9)
|
5265
5309
|
end
|
5266
5310
|
|
5267
5311
|
def test_bug_rescue_empty_else
|
@@ -5322,14 +5366,14 @@ class TestParser < Minitest::Test
|
|
5322
5366
|
[:error, :invalid_encoding],
|
5323
5367
|
%q{?\xc3},
|
5324
5368
|
%q{^^^^^ location},
|
5325
|
-
|
5369
|
+
SINCE_1_9)
|
5326
5370
|
|
5327
5371
|
assert_parses(
|
5328
5372
|
s(:str, "проверка"),
|
5329
5373
|
%q{# coding:utf-8
|
5330
5374
|
"\xD0\xBF\xD1\x80\xD0\xBE\xD0\xB2\xD0\xB5\xD1\x80\xD0\xBA\xD0\xB0"},
|
5331
5375
|
%q{},
|
5332
|
-
|
5376
|
+
SINCE_1_9)
|
5333
5377
|
end
|
5334
5378
|
|
5335
5379
|
def test_ruby_bug_9669
|
@@ -5337,7 +5381,7 @@ class TestParser < Minitest::Test
|
|
5337
5381
|
s(:def, :a, s(:args, s(:kwarg, :b)), s(:return)),
|
5338
5382
|
%Q{def a b:\nreturn\nend},
|
5339
5383
|
%q{},
|
5340
|
-
|
5384
|
+
SINCE_2_1)
|
5341
5385
|
|
5342
5386
|
assert_parses(
|
5343
5387
|
s(:lvasgn, :o,
|
@@ -5345,7 +5389,7 @@ class TestParser < Minitest::Test
|
|
5345
5389
|
s(:pair, s(:sym, :a), s(:int, 1)))),
|
5346
5390
|
%Q{o = {\na:\n1\n}},
|
5347
5391
|
%q{},
|
5348
|
-
|
5392
|
+
SINCE_2_1)
|
5349
5393
|
end
|
5350
5394
|
|
5351
5395
|
def test_ruby_bug_10279
|
@@ -5355,10 +5399,25 @@ class TestParser < Minitest::Test
|
|
5355
5399
|
s(:if, s(:true), s(:int, 42), nil))),
|
5356
5400
|
%q{{a: if true then 42 end}},
|
5357
5401
|
%q{},
|
5358
|
-
|
5402
|
+
SINCE_2_1)
|
5359
5403
|
end
|
5360
5404
|
|
5361
5405
|
def test_ruby_bug_10653
|
5406
|
+
assert_parses(
|
5407
|
+
s(:if,
|
5408
|
+
s(:true),
|
5409
|
+
s(:block,
|
5410
|
+
s(:send,
|
5411
|
+
s(:int, 1), :tap),
|
5412
|
+
s(:args,
|
5413
|
+
s(:procarg0, :n)),
|
5414
|
+
s(:send, nil, :p,
|
5415
|
+
s(:lvar, :n))),
|
5416
|
+
s(:int, 0)),
|
5417
|
+
%q{true ? 1.tap do |n| p n end : 0},
|
5418
|
+
%q{},
|
5419
|
+
SINCE_1_9)
|
5420
|
+
|
5362
5421
|
assert_parses(
|
5363
5422
|
s(:if,
|
5364
5423
|
s(:true),
|
@@ -5372,7 +5431,7 @@ class TestParser < Minitest::Test
|
|
5372
5431
|
s(:int, 0)),
|
5373
5432
|
%q{true ? 1.tap do |n| p n end : 0},
|
5374
5433
|
%q{},
|
5375
|
-
|
5434
|
+
%w(1.8))
|
5376
5435
|
|
5377
5436
|
assert_parses(
|
5378
5437
|
s(:if,
|
@@ -5410,7 +5469,7 @@ class TestParser < Minitest::Test
|
|
5410
5469
|
s(:block, s(:send, nil, :a), s(:args), nil))),
|
5411
5470
|
%q{p ->() do a() do end end},
|
5412
5471
|
%q{},
|
5413
|
-
|
5472
|
+
SINCE_2_1) # no 1.9 backport
|
5414
5473
|
end
|
5415
5474
|
|
5416
5475
|
def test_ruby_bug_11380
|
@@ -5427,7 +5486,7 @@ class TestParser < Minitest::Test
|
|
5427
5486
|
nil),
|
5428
5487
|
%q{p -> { :hello }, a: 1 do end},
|
5429
5488
|
%q{},
|
5430
|
-
|
5489
|
+
SINCE_2_1) # no 1.9 backport
|
5431
5490
|
end
|
5432
5491
|
|
5433
5492
|
def test_ruby_bug_11989
|
@@ -5436,7 +5495,7 @@ class TestParser < Minitest::Test
|
|
5436
5495
|
s(:str, "x\n y\n")),
|
5437
5496
|
%Q{p <<~"E"\n x\\n y\nE},
|
5438
5497
|
%q{},
|
5439
|
-
|
5498
|
+
SINCE_2_3)
|
5440
5499
|
end
|
5441
5500
|
|
5442
5501
|
def test_ruby_bug_11990
|
@@ -5447,7 +5506,7 @@ class TestParser < Minitest::Test
|
|
5447
5506
|
s(:str, " y"))),
|
5448
5507
|
%Q{p <<~E " y"\n x\nE},
|
5449
5508
|
%q{},
|
5450
|
-
|
5509
|
+
SINCE_2_3)
|
5451
5510
|
end
|
5452
5511
|
|
5453
5512
|
def test_ruby_bug_12073
|
@@ -5462,7 +5521,7 @@ class TestParser < Minitest::Test
|
|
5462
5521
|
s(:int, 1))))),
|
5463
5522
|
%q{a = 1; a b: 1},
|
5464
5523
|
%q{},
|
5465
|
-
|
5524
|
+
SINCE_1_9)
|
5466
5525
|
|
5467
5526
|
assert_parses(
|
5468
5527
|
s(:def, :foo,
|
@@ -5474,7 +5533,187 @@ class TestParser < Minitest::Test
|
|
5474
5533
|
s(:str, ""))),
|
5475
5534
|
%q{def foo raise; raise A::B, ''; end},
|
5476
5535
|
%q{},
|
5477
|
-
|
5536
|
+
SINCE_1_9)
|
5537
|
+
end
|
5538
|
+
|
5539
|
+
def test_ruby_bug_12402
|
5540
|
+
assert_parses(
|
5541
|
+
s(:lvasgn, :foo,
|
5542
|
+
s(:rescue,
|
5543
|
+
s(:send, nil, :raise,
|
5544
|
+
s(:lvar, :bar)),
|
5545
|
+
s(:resbody, nil, nil,
|
5546
|
+
s(:nil)), nil)),
|
5547
|
+
%q{foo = raise(bar) rescue nil},
|
5548
|
+
%q{},
|
5549
|
+
SINCE_2_4)
|
5550
|
+
|
5551
|
+
assert_parses(
|
5552
|
+
s(:op_asgn,
|
5553
|
+
s(:lvasgn, :foo), :+,
|
5554
|
+
s(:rescue,
|
5555
|
+
s(:send, nil, :raise,
|
5556
|
+
s(:lvar, :bar)),
|
5557
|
+
s(:resbody, nil, nil,
|
5558
|
+
s(:nil)), nil)),
|
5559
|
+
%q{foo += raise(bar) rescue nil},
|
5560
|
+
%q{},
|
5561
|
+
SINCE_2_4)
|
5562
|
+
|
5563
|
+
assert_parses(
|
5564
|
+
s(:op_asgn,
|
5565
|
+
s(:send,
|
5566
|
+
s(:lvar, :foo), :[],
|
5567
|
+
s(:int, 0)), :+,
|
5568
|
+
s(:rescue,
|
5569
|
+
s(:send, nil, :raise,
|
5570
|
+
s(:lvar, :bar)),
|
5571
|
+
s(:resbody, nil, nil,
|
5572
|
+
s(:nil)), nil)),
|
5573
|
+
%q{foo[0] += raise(bar) rescue nil},
|
5574
|
+
%q{},
|
5575
|
+
SINCE_2_4)
|
5576
|
+
|
5577
|
+
assert_parses(
|
5578
|
+
s(:op_asgn,
|
5579
|
+
s(:send,
|
5580
|
+
s(:lvar, :foo), :m), :+,
|
5581
|
+
s(:rescue,
|
5582
|
+
s(:send, nil, :raise,
|
5583
|
+
s(:lvar, :bar)),
|
5584
|
+
s(:resbody, nil, nil,
|
5585
|
+
s(:nil)), nil)),
|
5586
|
+
%q{foo.m += raise(bar) rescue nil},
|
5587
|
+
%q{},
|
5588
|
+
SINCE_2_4)
|
5589
|
+
|
5590
|
+
assert_parses(
|
5591
|
+
s(:op_asgn,
|
5592
|
+
s(:send,
|
5593
|
+
s(:lvar, :foo), :m), :+,
|
5594
|
+
s(:rescue,
|
5595
|
+
s(:send, nil, :raise,
|
5596
|
+
s(:lvar, :bar)),
|
5597
|
+
s(:resbody, nil, nil,
|
5598
|
+
s(:nil)), nil)),
|
5599
|
+
%q{foo::m += raise(bar) rescue nil},
|
5600
|
+
%q{},
|
5601
|
+
SINCE_2_4)
|
5602
|
+
|
5603
|
+
assert_parses(
|
5604
|
+
s(:op_asgn,
|
5605
|
+
s(:send,
|
5606
|
+
s(:lvar, :foo), :C), :+,
|
5607
|
+
s(:rescue,
|
5608
|
+
s(:send, nil, :raise,
|
5609
|
+
s(:lvar, :bar)),
|
5610
|
+
s(:resbody, nil, nil,
|
5611
|
+
s(:nil)), nil)),
|
5612
|
+
%q{foo.C += raise(bar) rescue nil},
|
5613
|
+
%q{},
|
5614
|
+
SINCE_2_4)
|
5615
|
+
|
5616
|
+
assert_parses(
|
5617
|
+
s(:or_asgn,
|
5618
|
+
s(:casgn,
|
5619
|
+
s(:lvar, :foo), :C),
|
5620
|
+
s(:rescue,
|
5621
|
+
s(:send, nil, :raise,
|
5622
|
+
s(:lvar, :bar)),
|
5623
|
+
s(:resbody, nil, nil,
|
5624
|
+
s(:nil)), nil)),
|
5625
|
+
%q{foo::C ||= raise(bar) rescue nil},
|
5626
|
+
%q{},
|
5627
|
+
SINCE_2_4)
|
5628
|
+
|
5629
|
+
assert_parses(
|
5630
|
+
s(:lvasgn, :foo,
|
5631
|
+
s(:rescue,
|
5632
|
+
s(:send, nil, :raise,
|
5633
|
+
s(:lvar, :bar)),
|
5634
|
+
s(:resbody, nil, nil,
|
5635
|
+
s(:nil)), nil)),
|
5636
|
+
%q{foo = raise bar rescue nil},
|
5637
|
+
%q{},
|
5638
|
+
SINCE_2_4)
|
5639
|
+
|
5640
|
+
assert_parses(
|
5641
|
+
s(:op_asgn,
|
5642
|
+
s(:lvasgn, :foo), :+,
|
5643
|
+
s(:rescue,
|
5644
|
+
s(:send, nil, :raise,
|
5645
|
+
s(:lvar, :bar)),
|
5646
|
+
s(:resbody, nil, nil,
|
5647
|
+
s(:nil)), nil)),
|
5648
|
+
%q{foo += raise bar rescue nil},
|
5649
|
+
%q{},
|
5650
|
+
SINCE_2_4)
|
5651
|
+
|
5652
|
+
assert_parses(
|
5653
|
+
s(:op_asgn,
|
5654
|
+
s(:send,
|
5655
|
+
s(:lvar, :foo), :[],
|
5656
|
+
s(:int, 0)), :+,
|
5657
|
+
s(:rescue,
|
5658
|
+
s(:send, nil, :raise,
|
5659
|
+
s(:lvar, :bar)),
|
5660
|
+
s(:resbody, nil, nil,
|
5661
|
+
s(:nil)), nil)),
|
5662
|
+
%q{foo[0] += raise bar rescue nil},
|
5663
|
+
%q{},
|
5664
|
+
SINCE_2_4)
|
5665
|
+
|
5666
|
+
assert_parses(
|
5667
|
+
s(:op_asgn,
|
5668
|
+
s(:send,
|
5669
|
+
s(:lvar, :foo), :m), :+,
|
5670
|
+
s(:rescue,
|
5671
|
+
s(:send, nil, :raise,
|
5672
|
+
s(:lvar, :bar)),
|
5673
|
+
s(:resbody, nil, nil,
|
5674
|
+
s(:nil)), nil)),
|
5675
|
+
%q{foo.m += raise bar rescue nil},
|
5676
|
+
%q{},
|
5677
|
+
SINCE_2_4)
|
5678
|
+
|
5679
|
+
assert_parses(
|
5680
|
+
s(:op_asgn,
|
5681
|
+
s(:send,
|
5682
|
+
s(:lvar, :foo), :m), :+,
|
5683
|
+
s(:rescue,
|
5684
|
+
s(:send, nil, :raise,
|
5685
|
+
s(:lvar, :bar)),
|
5686
|
+
s(:resbody, nil, nil,
|
5687
|
+
s(:nil)), nil)),
|
5688
|
+
%q{foo::m += raise bar rescue nil},
|
5689
|
+
%q{},
|
5690
|
+
SINCE_2_4)
|
5691
|
+
|
5692
|
+
assert_parses(
|
5693
|
+
s(:op_asgn,
|
5694
|
+
s(:send,
|
5695
|
+
s(:lvar, :foo), :C), :+,
|
5696
|
+
s(:rescue,
|
5697
|
+
s(:send, nil, :raise,
|
5698
|
+
s(:lvar, :bar)),
|
5699
|
+
s(:resbody, nil, nil,
|
5700
|
+
s(:nil)), nil)),
|
5701
|
+
%q{foo.C += raise bar rescue nil},
|
5702
|
+
%q{},
|
5703
|
+
SINCE_2_4)
|
5704
|
+
|
5705
|
+
assert_parses(
|
5706
|
+
s(:or_asgn,
|
5707
|
+
s(:casgn,
|
5708
|
+
s(:lvar, :foo), :C),
|
5709
|
+
s(:rescue,
|
5710
|
+
s(:send, nil, :raise,
|
5711
|
+
s(:lvar, :bar)),
|
5712
|
+
s(:resbody, nil, nil,
|
5713
|
+
s(:nil)), nil)),
|
5714
|
+
%q{foo::C ||= raise bar rescue nil},
|
5715
|
+
%q{},
|
5716
|
+
SINCE_2_4)
|
5478
5717
|
end
|
5479
5718
|
|
5480
5719
|
def test_ruby_bug_12686
|
@@ -5487,7 +5726,7 @@ class TestParser < Minitest::Test
|
|
5487
5726
|
s(:nil)), nil))),
|
5488
5727
|
%q{f (g rescue nil)},
|
5489
5728
|
%q{},
|
5490
|
-
|
5729
|
+
SINCE_2_4)
|
5491
5730
|
|
5492
5731
|
assert_diagnoses(
|
5493
5732
|
[:error, :unexpected_token, {:token => 'kRESCUE_MOD'}],
|
@@ -5504,17 +5743,29 @@ class TestParser < Minitest::Test
|
|
5504
5743
|
s(:str, "#")),
|
5505
5744
|
%q{[/()\\1/, ?#]},
|
5506
5745
|
%q{},
|
5507
|
-
|
5746
|
+
SINCE_1_9)
|
5508
5747
|
end
|
5509
5748
|
|
5510
5749
|
def test_parser_bug_272
|
5750
|
+
assert_parses(
|
5751
|
+
s(:block,
|
5752
|
+
s(:send, nil, :a,
|
5753
|
+
s(:ivar, :@b)),
|
5754
|
+
s(:args,
|
5755
|
+
s(:procarg0, :c)), nil),
|
5756
|
+
%q{a @b do |c|;end},
|
5757
|
+
%q{},
|
5758
|
+
SINCE_1_9)
|
5759
|
+
|
5511
5760
|
assert_parses(
|
5512
5761
|
s(:block,
|
5513
5762
|
s(:send, nil, :a,
|
5514
5763
|
s(:ivar, :@b)),
|
5515
5764
|
s(:args,
|
5516
5765
|
s(:arg, :c)), nil),
|
5517
|
-
%q{a @b do |c|;end}
|
5766
|
+
%q{a @b do |c|;end},
|
5767
|
+
%q{},
|
5768
|
+
%w(1.8))
|
5518
5769
|
end
|
5519
5770
|
|
5520
5771
|
def test_bug_lambda_leakage
|
@@ -5527,7 +5778,7 @@ class TestParser < Minitest::Test
|
|
5527
5778
|
s(:send, nil, :scope)),
|
5528
5779
|
%q{->(scope) {}; scope},
|
5529
5780
|
%q{},
|
5530
|
-
|
5781
|
+
SINCE_1_9)
|
5531
5782
|
end
|
5532
5783
|
|
5533
5784
|
def test_bug_regex_verification
|