parser 2.3.1.4 → 2.3.2.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
- 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
|