ruby_parser 3.0.0.a9 → 3.0.0.a10

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of ruby_parser might be problematic. Click here for more details.

@@ -109,17 +109,23 @@ module TestRubyParserShared
109
109
  end
110
110
 
111
111
  def test_wtf_7
112
- assert_parse "a.b (1) {c}", s(:iter,
113
- s(:call, s(:call, nil, :a), :b, s(:lit, 1)),
114
- nil,
115
- s(:call, nil, :c))
112
+ rb = "a.b (1) {c}"
113
+ pt = s(:iter,
114
+ s(:call, s(:call, nil, :a), :b, s(:lit, 1)),
115
+ s(:args),
116
+ s(:call, nil, :c))
117
+
118
+ assert_parse rb, pt
116
119
  end
117
120
 
118
121
  def test_wtf_8
119
- assert_parse "a::b (1) {c}", s(:iter,
120
- s(:call, s(:call, nil, :a), :b, s(:lit, 1)),
121
- nil,
122
- s(:call, nil, :c))
122
+ rb = "a::b (1) {c}"
123
+ pt = s(:iter,
124
+ s(:call, s(:call, nil, :a), :b, s(:lit, 1)),
125
+ s(:args),
126
+ s(:call, nil, :c))
127
+
128
+ assert_parse rb, pt
123
129
  end
124
130
 
125
131
  def test_attrasgn_array_lhs
@@ -198,7 +204,7 @@ module TestRubyParserShared
198
204
  rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend"
199
205
  pt = s(:iter,
200
206
  s(:call, nil, :a),
201
- nil,
207
+ s(:args),
202
208
  s(:block,
203
209
  s(:lasgn, :v, s(:nil)),
204
210
  s(:rescue,
@@ -253,7 +259,7 @@ module TestRubyParserShared
253
259
  s(:call, nil, :a, s(:lit, 1)),
254
260
  s(:iter,
255
261
  s(:call, s(:call, nil, :a), :b),
256
- s(:lasgn, :c)))
262
+ s(:args, :c)))
257
263
 
258
264
  assert_parse rb, pt
259
265
  end
@@ -585,7 +591,7 @@ module TestRubyParserShared
585
591
 
586
592
  pt = s(:iter,
587
593
  s(:call, nil, :f),
588
- s(:masgn, s(:array, s(:lasgn, :x), s(:lasgn, :y))),
594
+ s(:args, :x, :y),
589
595
  s(:call, s(:lvar, :x), :+, s(:lvar, :y)))
590
596
 
591
597
  assert_parse_line rb, pt, 1
@@ -624,7 +630,7 @@ module TestRubyParserShared
624
630
 
625
631
  pt = s(:iter,
626
632
  s(:call, nil, :f, s(:call, nil, :a)),
627
- s(:masgn, s(:array, s(:lasgn, :x), s(:lasgn, :y))),
633
+ s(:args, :x, :y),
628
634
  s(:call, s(:lvar, :x), :+, s(:lvar, :y)))
629
635
 
630
636
  assert_parse_line rb, pt, 1
@@ -639,7 +645,7 @@ module TestRubyParserShared
639
645
 
640
646
  pt = s(:iter,
641
647
  s(:call, nil, :f, s(:call, nil, :a)),
642
- s(:masgn, s(:array, s(:lasgn, :x), s(:lasgn, :y))),
648
+ s(:args, :x, :y),
643
649
  s(:call, s(:lvar, :x), :+, s(:lvar, :y)))
644
650
 
645
651
  assert_parse_line rb, pt, 1
@@ -701,15 +707,6 @@ module TestRubyParserShared
701
707
  assert_parse rb, pt
702
708
  end
703
709
 
704
- def test_bug_args
705
- rb = "f { |(a, b)| d }"
706
- pt = s(:iter, s(:call, nil, :f),
707
- s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b))),
708
- s(:call, nil, :d))
709
-
710
- assert_parse rb, pt
711
- end
712
-
713
710
  def test_bug_cond_pct
714
711
  rb = "case; when %r%blahblah%; end"
715
712
  pt = s(:case, nil, s(:when, s(:array, s(:lit, /blahblah/)), nil), nil)
@@ -717,49 +714,33 @@ module TestRubyParserShared
717
714
  assert_parse rb, pt
718
715
  end
719
716
 
720
- # according to 2.3.1 parser:
717
+ # according to 2.3.1 parser -- added: ON 1.8 only:
721
718
  # rp.process("f { |(a,b),c| }") == rp.process("f { |((a,b),c)| }")
722
719
 
723
- # def test_bug_args_masgn
724
- # rb = "f { |(a, b), c| }"
725
- # pt = s(:iter,
726
- # s(:call, nil, :f),
727
- # s(:masgn,
728
- # s(:array,
729
- # s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b))),
730
- # s(:lasgn, :c))))
731
- #
732
- # assert_parse rb, pt.dup
733
- # end
720
+ # ruby18 -e "p lambda { |(a,b)| }.arity" # => 2
721
+ # ruby19 -e "p lambda { |(a,b)| }.arity" # => 1
722
+ # ruby18 -e "p lambda { |(a,b),c| }.arity" # => 2
723
+ # ruby19 -e "p lambda { |(a,b),c| }.arity" # => 2
724
+ # ruby18 -e "p lambda { |((a,b),c)| }.arity" # => 2
725
+ # ruby19 -e "p lambda { |((a,b),c)| }.arity" # => 1
734
726
 
735
- def test_bug_args_masgn_outer_parens
736
- rb = "f { |((a, b), c)| }"
737
- pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn
727
+ def test_bug_args_masgn
728
+ rb = "f { |(a, b), c| }"
729
+ pt = s(:iter,
738
730
  s(:call, nil, :f),
739
- s(:masgn,
740
- s(:array,
741
- s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b))),
742
- s(:lasgn, :c))))
731
+ s(:args, s(:masgn, :a, :b), :c))
743
732
 
744
733
  assert_parse rb, pt.dup
745
734
  end
746
735
 
747
- # TODO:
748
- # def test_bug_args_masgn2
749
- # rb = "f { |((a, b), c), d| }"
750
- # pt = s(:iter,
751
- # s(:call, nil, :f),
752
- # s(:masgn,
753
- # s(:array,
754
- # s(:masgn,
755
- # s(:array,
756
- # s(:masgn,
757
- # s(:array, s(:lasgn, :a), s(:lasgn, :b))),
758
- # s(:lasgn, :c))),
759
- # s(:lasgn, :d))))
760
- #
761
- # assert_parse rb, pt
762
- # end
736
+ def test_bug_args_masgn2
737
+ rb = "f { |((a, b), c), d| }"
738
+ pt = s(:iter,
739
+ s(:call, nil, :f),
740
+ s(:args, s(:masgn, s(:masgn, :a, :b), :c), :d))
741
+
742
+ assert_parse rb, pt
743
+ end
763
744
 
764
745
  def ruby18
765
746
  Ruby18Parser === self.processor
@@ -800,10 +781,7 @@ module TestRubyParserShared
800
781
  rb = "f { |a, (b, c)| }"
801
782
  pt = s(:iter,
802
783
  s(:call, nil, :f),
803
- s(:masgn,
804
- s(:array,
805
- s(:lasgn, :a),
806
- s(:masgn, s(:array, s(:lasgn, :b), s(:lasgn, :c))))))
784
+ s(:args, :a, s(:masgn, :b, :c)))
807
785
 
808
786
  assert_parse rb, pt
809
787
  end
@@ -862,14 +840,7 @@ module TestRubyParserShared
862
840
  end
863
841
 
864
842
  def test_magic_encoding_comment
865
- rb = <<-EOM.gsub(/^ /, '')
866
- # encoding: utf-8
867
- class ExampleUTF8ClassNameVarietà
868
- def self.è
869
- così = :però
870
- end
871
- end
872
- EOM
843
+ rb = "# encoding: utf-8\nclass ExampleUTF8ClassNameVarietà; def self.è; così = :però; end\nend\n"
873
844
 
874
845
  rb.force_encoding "ASCII-8BIT" if rb.respond_to? :force_encoding
875
846
 
@@ -887,6 +858,20 @@ module TestRubyParserShared
887
858
  assert_parse rb, pt
888
859
  end
889
860
  end
861
+
862
+ def test_iter_args_1
863
+ rb = "f { |a,b| }"
864
+ pt = s(:iter, s(:call, nil, :f), s(:args, :a, :b))
865
+
866
+ assert_parse rb, pt
867
+ end
868
+
869
+ def test_iter_args_3
870
+ rb = "f { |a, (b, c), d| }"
871
+ pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :c), :d))
872
+
873
+ assert_parse rb, pt
874
+ end
890
875
  end
891
876
 
892
877
  class TestRubyParser < MiniTest::Unit::TestCase
@@ -1061,6 +1046,33 @@ class TestRuby18Parser < RubyParserTestCase
1061
1046
  def test_double_block_error_16
1062
1047
  assert_syntax_error "m::a (1, &b) do end", BLOCK_DUP_MSG
1063
1048
  end
1049
+
1050
+ # In 1.8, block args with an outer set of parens are superfluous.
1051
+ # In 1.9, outer set of parens are NOT... they are an explicit extra masgn.
1052
+
1053
+ def test_iter_args_2_18
1054
+ rb = "f { |(a, b)| }"
1055
+ pt = s(:iter, s(:call, nil, :f), s(:args, :a, :b))
1056
+
1057
+ assert_parse rb, pt
1058
+ end
1059
+
1060
+ def test_bug_args__18
1061
+ rb = "f { |(a, b)| }"
1062
+ pt = s(:iter, s(:call, nil, :f),
1063
+ s(:args, :a, :b))
1064
+
1065
+ assert_parse rb, pt
1066
+ end
1067
+
1068
+ def test_bug_args_masgn_outer_parens__18
1069
+ rb = "f { |((a, b), c)| }"
1070
+ pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn
1071
+ s(:call, nil, :f),
1072
+ s(:args, s(:masgn, :a, :b), :c))
1073
+
1074
+ assert_parse rb, pt.dup
1075
+ end
1064
1076
  end
1065
1077
 
1066
1078
  class TestRuby19Parser < RubyParserTestCase
@@ -1155,7 +1167,11 @@ class TestRuby19Parser < RubyParserTestCase
1155
1167
 
1156
1168
  def test_encoding
1157
1169
  rb = '__ENCODING__'
1158
- pt = s(:str, "Unsupported!")
1170
+ pt = if defined? Encoding then
1171
+ s(:const, Encoding::UTF_8)
1172
+ else
1173
+ s(:str, "Unsupported!")
1174
+ end
1159
1175
 
1160
1176
  assert_parse rb, pt
1161
1177
  end
@@ -1286,7 +1302,7 @@ class TestRuby19Parser < RubyParserTestCase
1286
1302
  rb = "a { |b = 1| }"
1287
1303
  pt = s(:iter,
1288
1304
  s(:call, nil, :a),
1289
- s(:args, :b, s(:block, s(:lasgn, :b, s(:lit, 1)))))
1305
+ s(:args, s(:lasgn, :b, s(:lit, 1))))
1290
1306
 
1291
1307
  assert_parse rb, pt
1292
1308
  end
@@ -1303,7 +1319,7 @@ class TestRuby19Parser < RubyParserTestCase
1303
1319
  s(:lit, :a),
1304
1320
  s(:iter,
1305
1321
  s(:call, nil, :lambda),
1306
- nil,
1322
+ s(:args),
1307
1323
  s(:if, s(:call, nil, :b), s(:call, nil, :c), s(:call, nil, :d))),
1308
1324
 
1309
1325
  s(:lit, :e),
@@ -1319,34 +1335,31 @@ class TestRuby19Parser < RubyParserTestCase
1319
1335
  # assert_parse rb, pt
1320
1336
  # end
1321
1337
 
1322
- # HACK: need to figure out the desired structure and get this working
1323
- # def test_wtf
1324
- # # lambda -> f_larglist lambda_body
1325
- # # f_larglist -> f_args opt_bv_decl
1326
- # # opt_bv_decl
1327
- # # bv_decls
1328
- # # bvar
1329
- #
1330
- # rb = "->(a, b=nil) { p [a, b] }"
1331
- # pt = s(:iter,
1332
- # s(:call, nil, :lambda),
1333
- # s(:args, :a, :b,
1334
- # s(:block, s(:lasgn, :b, s(:nil)))),
1335
- # s(:call, nil, :p, s(:array, s(:lvar, :a), s(:lvar, :b))))
1336
- #
1337
- # assert_parse rb, pt
1338
- #
1339
- # rb = "->(a; b) { p [a, b] }"
1340
- #
1341
- # assert_parse rb, pt
1342
- # end
1338
+ def test_wtf
1339
+ # lambda -> f_larglist lambda_body
1340
+ # f_larglist -> f_args opt_bv_decl
1341
+ # opt_bv_decl
1342
+ # bv_decls
1343
+ # bvar
1344
+
1345
+ rb = "->(a, b=nil) { p [a, b] }"
1346
+ pt = s(:iter,
1347
+ s(:call, nil, :lambda),
1348
+ s(:args, :a, s(:lasgn, :b, s(:nil))),
1349
+ s(:call, nil, :p, s(:array, s(:lvar, :a), s(:lvar, :b))))
1350
+
1351
+ assert_parse rb, pt
1352
+
1353
+ # rb = "->(a; b) { p [a, b] }"
1354
+ #
1355
+ # assert_parse rb, pt
1356
+ end
1343
1357
 
1344
1358
  def test_block_args_opt1
1345
1359
  rb = "f { |a, b = 42| [a, b] }"
1346
1360
  pt = s(:iter,
1347
1361
  s(:call, nil, :f),
1348
- s(:args, :a, :b,
1349
- s(:block, s(:lasgn, :b, s(:lit, 42)))),
1362
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42))),
1350
1363
  s(:array, s(:lvar, :a), s(:lvar, :b)))
1351
1364
 
1352
1365
  assert_parse rb, pt
@@ -1356,8 +1369,7 @@ class TestRuby19Parser < RubyParserTestCase
1356
1369
  rb = "f { |a, b = 42, c = 24| [a, b, c] }"
1357
1370
  pt = s(:iter,
1358
1371
  s(:call, nil, :f),
1359
- s(:args, :a, :b, :c,
1360
- s(:block, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24)))),
1372
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24))),
1361
1373
  s(:array, s(:lvar, :a), s(:lvar, :b), s(:lvar, :c)))
1362
1374
 
1363
1375
  assert_parse rb, pt
@@ -1367,8 +1379,7 @@ class TestRuby19Parser < RubyParserTestCase
1367
1379
  rb = "f { |a, b = 42, c = 24, &d| [a, b, c, d] }"
1368
1380
  pt = s(:iter,
1369
1381
  s(:call, nil, :f),
1370
- s(:args, :a, :b, :c, :"&d",
1371
- s(:block, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24)))),
1382
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24)), :"&d"),
1372
1383
  s(:array, s(:lvar, :a), s(:lvar, :b), s(:lvar, :c), s(:lvar, :d)))
1373
1384
 
1374
1385
  assert_parse rb, pt
@@ -1400,13 +1411,7 @@ class TestRuby19Parser < RubyParserTestCase
1400
1411
  rb = "f { |a, (b, *c)| }"
1401
1412
  pt = s(:iter,
1402
1413
  s(:call, nil, :f),
1403
- s(:masgn,
1404
- s(:array,
1405
- s(:lasgn, :a),
1406
- s(:masgn,
1407
- s(:array,
1408
- s(:lasgn, :b),
1409
- s(:splat, :c)))))) # TODO: omg this is so horrible
1414
+ s(:args, :a, s(:masgn, :b, :"*c")))
1410
1415
 
1411
1416
  assert_parse rb, pt
1412
1417
  end
@@ -1438,4 +1443,203 @@ class TestRuby19Parser < RubyParserTestCase
1438
1443
  #
1439
1444
  # assert_parse rb, pt
1440
1445
  # end
1446
+
1447
+ def test_iter_args_4
1448
+ rb = "f { |a, *b, c| }"
1449
+ pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"*b", :c))
1450
+
1451
+ assert_parse rb, pt
1452
+ end
1453
+
1454
+ def test_iter_args_5
1455
+ rb = "f { |a, &b| }"
1456
+ pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"&b"))
1457
+
1458
+ assert_parse rb, pt
1459
+ end
1460
+
1461
+ def test_iter_args_6
1462
+ rb = "f { |a, b=42, c| }"
1463
+ pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :c))
1464
+
1465
+ assert_parse rb, pt
1466
+ end
1467
+
1468
+ # In 1.8, block args with an outer set of parens are superfluous.
1469
+ # In 1.9, outer set of parens are NOT... they are an explicit extra masgn.
1470
+
1471
+ def test_iter_args_2__19
1472
+ rb = "f { |(a, b)| }"
1473
+ pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b)))
1474
+
1475
+ assert_parse rb, pt
1476
+ end
1477
+
1478
+ def test_bug_args__19
1479
+ rb = "f { |(a, b)| d }"
1480
+ pt = s(:iter, s(:call, nil, :f),
1481
+ s(:args, s(:masgn, :a, :b)),
1482
+ s(:call, nil, :d))
1483
+
1484
+ assert_parse rb, pt
1485
+ end
1486
+
1487
+ def test_bug_args_masgn_outer_parens__19
1488
+ rb = "f { |((k, v), i)| }"
1489
+ pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn
1490
+ s(:call, nil, :f),
1491
+ s(:args, s(:masgn, s(:masgn, :k, :v), :i)))
1492
+
1493
+ assert_parse rb, pt.dup
1494
+ end
1495
+
1496
+ def test_iter_args_7_1
1497
+ rb = "f { |a = 42, *b| }"
1498
+ pt = s(:iter, s(:call, nil, :f),
1499
+ s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b"))
1500
+
1501
+ assert_parse rb, pt
1502
+ end
1503
+
1504
+ def test_iter_args_7_2
1505
+ rb = "f { |a = 42, *b, &c| }"
1506
+ pt = s(:iter, s(:call, nil, :f),
1507
+ s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :"&c"))
1508
+
1509
+ assert_parse rb, pt
1510
+ end
1511
+
1512
+ def test_iter_args_8_1
1513
+ rb = "f { |a = 42, *b, c| }"
1514
+ pt = s(:iter, s(:call, nil, :f),
1515
+ s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :c))
1516
+
1517
+ assert_parse rb, pt
1518
+ end
1519
+
1520
+ def test_iter_args_8_2
1521
+ rb = "f { |a = 42, *b, c, &d| }"
1522
+ pt = s(:iter, s(:call, nil, :f),
1523
+ s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :c, :"&d"))
1524
+
1525
+ assert_parse rb, pt
1526
+ end
1527
+
1528
+ def test_iter_args_9_1
1529
+ rb = "f { |a = 42, b| }"
1530
+ pt = s(:iter, s(:call, nil, :f),
1531
+ s(:args, s(:lasgn, :a, s(:lit, 42)), :b))
1532
+
1533
+ assert_parse rb, pt
1534
+ end
1535
+
1536
+ def test_iter_args_9_2
1537
+ rb = "f { |a = 42, b, &c| }"
1538
+ pt = s(:iter, s(:call, nil, :f),
1539
+ s(:args, s(:lasgn, :a, s(:lit, 42)), :b, :"&c"))
1540
+
1541
+ assert_parse rb, pt
1542
+ end
1543
+
1544
+ def test_iter_args_10_1
1545
+ rb = "f { |a, b = 42, *c| }"
1546
+ pt = s(:iter, s(:call, nil, :f),
1547
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c"))
1548
+
1549
+ assert_parse rb, pt
1550
+ end
1551
+
1552
+ def test_iter_args_10_2
1553
+ rb = "f { |a, b = 42, *c, &d| }"
1554
+ pt = s(:iter, s(:call, nil, :f),
1555
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :"&d"))
1556
+
1557
+ assert_parse rb, pt
1558
+ end
1559
+
1560
+ def test_iter_args_11_1
1561
+ rb = "f { |a, b = 42, *c, d| }"
1562
+ pt = s(:iter, s(:call, nil, :f),
1563
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :d))
1564
+
1565
+ assert_parse rb, pt
1566
+ end
1567
+
1568
+ def test_iter_args_11_2
1569
+ rb = "f { |a, b = 42, *c, d, &e| }"
1570
+ pt = s(:iter, s(:call, nil, :f),
1571
+ s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :d, :"&e"))
1572
+
1573
+ assert_parse rb, pt
1574
+ end
1575
+
1576
+ def test_kill_me_6
1577
+ # | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list
1578
+ rb = "f { |a, (b, *c, d)| }"
1579
+ pt = s(:iter,
1580
+ s(:call, nil, :f),
1581
+ s(:args, :a, s(:masgn, :b, :"*c", :d)))
1582
+
1583
+ assert_parse rb, pt
1584
+ end
1585
+
1586
+ def test_kill_me_7
1587
+ # | f_marg_list tCOMMA tSTAR
1588
+ rb = "f { |a, (b, *)| }"
1589
+ pt = s(:iter,
1590
+ s(:call, nil, :f),
1591
+ s(:args, :a, s(:masgn, :b, :*)))
1592
+
1593
+ assert_parse rb, pt
1594
+ end
1595
+
1596
+ def test_kill_me_8
1597
+ # | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list
1598
+ rb = "f { |a, (b, *, c)| }"
1599
+ pt = s(:iter,
1600
+ s(:call, nil, :f),
1601
+ s(:args, :a, s(:masgn, :b, :*, :c)))
1602
+
1603
+ assert_parse rb, pt
1604
+ end
1605
+
1606
+ def test_kill_me_9
1607
+ # | tSTAR f_norm_arg
1608
+ rb = "f { |a, (*b)| }"
1609
+ pt = s(:iter,
1610
+ s(:call, nil, :f),
1611
+ s(:args, :a, s(:masgn, :"*b")))
1612
+
1613
+ assert_parse rb, pt
1614
+ end
1615
+
1616
+ def test_kill_me_10
1617
+ # | tSTAR f_norm_arg tCOMMA f_marg_list
1618
+ rb = "f { |a, (*b, c)| }"
1619
+ pt = s(:iter,
1620
+ s(:call, nil, :f),
1621
+ s(:args, :a, s(:masgn, :"*b", :c)))
1622
+
1623
+ assert_parse rb, pt
1624
+ end
1625
+
1626
+ def test_kill_me_11
1627
+ # | tSTAR
1628
+ rb = "f { |a, (*)| }"
1629
+ pt = s(:iter,
1630
+ s(:call, nil, :f),
1631
+ s(:args, :a, s(:masgn, :*)))
1632
+
1633
+ assert_parse rb, pt
1634
+ end
1635
+
1636
+ def test_kill_me_12
1637
+ # | tSTAR tCOMMA f_marg_list
1638
+ rb = "f { |a, (*, b)| }"
1639
+ pt = s(:iter,
1640
+ s(:call, nil, :f),
1641
+ s(:args, :a, s(:masgn, :*, :b)))
1642
+
1643
+ assert_parse rb, pt
1644
+ end
1441
1645
  end