@@ -44,7 +44,7 @@ use std::rc::Rc;
44
44
use std:: u32;
45
45
use syntax:: abi:: Abi ;
46
46
use syntax:: ast:: { self , NodeId , Name , CRATE_NODE_ID , CrateNum } ;
47
- use syntax:: attr;
47
+ use syntax:: attr:: { self , AttrMetaMethods , AttributeMethods } ;
48
48
use errors:: Handler ;
49
49
use syntax;
50
50
use syntax_pos:: BytePos ;
@@ -1431,31 +1431,28 @@ fn encode_item_index(rbml_w: &mut Encoder, index: IndexData) {
1431
1431
}
1432
1432
1433
1433
fn encode_meta_item ( rbml_w : & mut Encoder , mi : & ast:: MetaItem ) {
1434
- match mi. node {
1435
- ast :: MetaItemKind :: Word ( ref name) => {
1434
+ if mi. is_word ( ) {
1435
+ let name = mi . name ( ) ;
1436
1436
rbml_w. start_tag ( tag_meta_item_word) ;
1437
- rbml_w. wr_tagged_str ( tag_meta_item_name, name) ;
1437
+ rbml_w. wr_tagged_str ( tag_meta_item_name, & name) ;
1438
1438
rbml_w. end_tag ( ) ;
1439
- }
1440
- ast:: MetaItemKind :: NameValue ( ref name, ref value) => {
1441
- match value. node {
1442
- ast:: LitKind :: Str ( ref value, _) => {
1443
- rbml_w. start_tag ( tag_meta_item_name_value) ;
1444
- rbml_w. wr_tagged_str ( tag_meta_item_name, name) ;
1445
- rbml_w. wr_tagged_str ( tag_meta_item_value, value) ;
1446
- rbml_w. end_tag ( ) ;
1447
- }
1448
- _ => { /* FIXME (#623): encode other variants */ }
1449
- }
1450
- }
1451
- ast:: MetaItemKind :: List ( ref name, ref items) => {
1439
+ } else if mi. is_value_str ( ) {
1440
+ let name = mi. name ( ) ;
1441
+ /* FIXME (#623): support other literal kinds */
1442
+ let value = mi. value_str ( ) . unwrap ( ) ;
1443
+ rbml_w. start_tag ( tag_meta_item_name_value) ;
1444
+ rbml_w. wr_tagged_str ( tag_meta_item_name, & name) ;
1445
+ rbml_w. wr_tagged_str ( tag_meta_item_value, & value) ;
1446
+ rbml_w. end_tag ( ) ;
1447
+ } else { // it must be a list
1448
+ let name = mi. name ( ) ;
1449
+ let items = mi. meta_item_list ( ) . unwrap ( ) ;
1452
1450
rbml_w. start_tag ( tag_meta_item_list) ;
1453
- rbml_w. wr_tagged_str ( tag_meta_item_name, name) ;
1451
+ rbml_w. wr_tagged_str ( tag_meta_item_name, & name) ;
1454
1452
for inner_item in items {
1455
1453
encode_meta_item ( rbml_w, & inner_item) ;
1456
1454
}
1457
1455
rbml_w. end_tag ( ) ;
1458
- }
1459
1456
}
1460
1457
}
1461
1458
@@ -1464,7 +1461,7 @@ fn encode_attributes(rbml_w: &mut Encoder, attrs: &[ast::Attribute]) {
1464
1461
for attr in attrs {
1465
1462
rbml_w. start_tag ( tag_attribute) ;
1466
1463
rbml_w. wr_tagged_u8 ( tag_attribute_is_sugared_doc, attr. node . is_sugared_doc as u8 ) ;
1467
- encode_meta_item ( rbml_w, & attr. node . value ) ;
1464
+ encode_meta_item ( rbml_w, attr. meta ( ) ) ;
1468
1465
rbml_w. end_tag ( ) ;
1469
1466
}
1470
1467
rbml_w. end_tag ( ) ;
0 commit comments