@@ -1533,90 +1533,114 @@ impure fn parse_item(parser p) -> @ast.item {
1533
1533
fail;
1534
1534
}
1535
1535
1536
- impure fn parse_meta_item ( parser p) {
1536
+ impure fn parse_meta_item ( parser p) -> @ast. meta_item {
1537
+ auto lo = p. get_span ( ) ;
1538
+ auto hi = lo;
1537
1539
auto ident = parse_ident ( p) ;
1538
1540
expect ( p, token. EQ ) ;
1539
1541
alt ( p. peek ( ) ) {
1540
1542
case ( token. LIT_STR ( ?s) ) {
1541
1543
p. bump ( ) ;
1544
+ ret @spanned ( lo, hi, rec ( name = ident, value = s) ) ;
1542
1545
}
1543
1546
case ( _) {
1544
1547
p. err ( "Metadata items must be string literals" ) ;
1545
1548
}
1546
1549
}
1550
+ fail;
1547
1551
}
1548
1552
1549
- impure fn parse_meta ( parser p) {
1553
+ impure fn parse_meta ( parser p) -> vec [ @ast . meta_item ] {
1550
1554
auto pf = parse_meta_item;
1551
- parse_seq[ ( ) ] ( token. LPAREN , token. RPAREN , some ( token. COMMA ) , pf, p) ;
1555
+ ret parse_seq[ @ast. meta_item ] ( token. LPAREN , token. RPAREN ,
1556
+ some ( token. COMMA ) , pf, p) . node ;
1552
1557
}
1553
1558
1554
- impure fn parse_optional_meta ( parser p) {
1559
+ impure fn parse_optional_meta ( parser p) -> vec[ @ast. meta_item ] {
1560
+ auto lo = p. get_span ( ) ;
1561
+ auto hi = lo;
1555
1562
alt ( p. peek ( ) ) {
1556
1563
case ( token. LPAREN ) {
1557
1564
ret parse_meta ( p) ;
1558
1565
}
1559
1566
case ( _) {
1560
- ret;
1567
+ let vec[ @ast. meta_item] v = vec ( ) ;
1568
+ ret v;
1561
1569
}
1562
1570
}
1563
1571
}
1564
1572
1565
- impure fn parse_rest_import_name ( parser p, ast . ident id) {
1573
+ impure fn parse_use ( parser p) -> @ast. use_node {
1574
+ auto lo = p. get_span ( ) ;
1575
+ auto hi = lo;
1576
+ expect ( p, token. USE ) ;
1577
+ auto ident = parse_ident ( p) ;
1578
+ auto metadata = parse_optional_meta ( p) ;
1579
+ expect ( p, token. SEMI ) ;
1580
+ ret @spanned ( lo, hi, rec ( name = ident, metadata = metadata) ) ;
1581
+ }
1582
+
1583
+ impure fn parse_rest_import_name ( parser p, ast . ident id) -> @ast. import_node {
1584
+ auto lo = p. get_span ( ) ;
1585
+ auto hi = lo;
1586
+ let vec[ ast. ident ] identifiers = vec ( ) ;
1587
+ identifiers += id;
1566
1588
while ( p. peek ( ) != token. SEMI ) {
1567
1589
expect ( p, token. DOT ) ;
1568
- parse_ident ( p) ;
1590
+ auto i = parse_ident ( p) ;
1591
+ identifiers += i;
1569
1592
}
1593
+ p. bump ( ) ;
1594
+ ret @spanned ( lo, hi, rec ( identifiers = identifiers) ) ;
1570
1595
}
1571
1596
1572
- impure fn parse_full_import_name ( parser p) {
1597
+ impure fn parse_full_import_name ( parser p) -> @ast . import_node {
1573
1598
alt ( p. peek ( ) ) {
1574
1599
case ( token. IDENT ( ?ident) ) {
1575
1600
p. bump ( ) ;
1576
- parse_rest_import_name ( p, ident) ;
1601
+ ret parse_rest_import_name ( p, ident) ;
1577
1602
}
1578
1603
case ( _) {
1579
1604
p. err ( "expecting an identifier" ) ;
1580
1605
}
1581
1606
}
1607
+ fail;
1582
1608
}
1583
1609
1584
- impure fn parse_import ( parser p) {
1610
+ impure fn parse_import ( parser p) -> @ast. import_node {
1611
+ expect ( p, token. IMPORT ) ;
1585
1612
alt ( p. peek ( ) ) {
1586
1613
case ( token. IDENT ( ?ident) ) {
1587
1614
p. bump ( ) ;
1588
1615
alt ( p. peek ( ) ) {
1589
1616
case ( token. EQ ) {
1590
1617
p. bump ( ) ;
1591
- parse_full_import_name ( p) ;
1618
+ ret parse_full_import_name ( p) ;
1592
1619
}
1593
1620
case ( _) {
1594
- parse_rest_import_name ( p, ident) ;
1621
+ ret parse_rest_import_name ( p, ident) ;
1595
1622
}
1596
1623
}
1597
1624
}
1598
1625
case ( _) {
1599
1626
p. err ( "expecting an identifier" ) ;
1600
1627
}
1601
1628
}
1629
+ fail;
1602
1630
}
1603
1631
1604
- impure fn parse_use_and_imports ( parser p) {
1632
+ impure fn parse_use_and_imports ( parser p) -> vec [ ast. use_or_import ] {
1633
+ let vec[ ast. use_or_import ] items = vec ( ) ;
1605
1634
while ( true ) {
1606
1635
alt ( p. peek ( ) ) {
1607
1636
case ( token. USE ) {
1608
- p. bump ( ) ;
1609
- auto ident = parse_ident ( p) ;
1610
- parse_optional_meta ( p) ;
1611
- expect ( p, token. SEMI ) ;
1637
+ items += vec ( ast. use_or_import_use ( parse_use ( p) ) ) ;
1612
1638
}
1613
1639
case ( token. IMPORT ) {
1614
- p. bump ( ) ;
1615
- parse_import ( p) ;
1616
- expect ( p, token. SEMI ) ;
1640
+ items += vec ( ast. use_or_import_import ( parse_import ( p) ) ) ;
1617
1641
}
1618
1642
case ( _) {
1619
- ret;
1643
+ ret items ;
1620
1644
}
1621
1645
}
1622
1646
}
0 commit comments