@@ -44,7 +44,7 @@ use std::rc::Rc;
4444use std:: u32;
4545use syntax:: abi:: Abi ;
4646use syntax:: ast:: { self , NodeId , Name , CRATE_NODE_ID , CrateNum } ;
47- use syntax:: attr;
47+ use syntax:: attr:: { self , AttrMetaMethods , AttributeMethods } ;
4848use errors:: Handler ;
4949use syntax;
5050use syntax_pos:: BytePos ;
@@ -1431,31 +1431,28 @@ fn encode_item_index(rbml_w: &mut Encoder, index: IndexData) {
14311431}
14321432
14331433fn 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 ( ) ;
14361436 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) ;
14381438 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 ( ) ;
14521450 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) ;
14541452 for inner_item in items {
14551453 encode_meta_item ( rbml_w, & inner_item) ;
14561454 }
14571455 rbml_w. end_tag ( ) ;
1458- }
14591456 }
14601457}
14611458
@@ -1464,7 +1461,7 @@ fn encode_attributes(rbml_w: &mut Encoder, attrs: &[ast::Attribute]) {
14641461 for attr in attrs {
14651462 rbml_w. start_tag ( tag_attribute) ;
14661463 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 ( ) ) ;
14681465 rbml_w. end_tag ( ) ;
14691466 }
14701467 rbml_w. end_tag ( ) ;
0 commit comments