@@ -56,7 +56,7 @@ use std::env;
5656use std:: fs:: File ;
5757use std:: io:: Write ;
5858use syntax:: ast;
59- use syntax:: attr:: AttrMetaMethods ;
59+ use syntax:: attr:: { AttrNestedMetaItemMethods , AttrMetaMethods } ;
6060use syntax:: parse:: token:: InternedString ;
6161use syntax_pos:: Span ;
6262
@@ -116,31 +116,40 @@ impl<'a, 'tcx> IfThisChanged<'a, 'tcx> {
116116 for attr in self . tcx . get_attrs ( def_id) . iter ( ) {
117117 if attr. check_name ( IF_THIS_CHANGED ) {
118118 let mut id = None ;
119- for meta_item in attr. meta_item_list ( ) . unwrap_or_default ( ) {
120- if meta_item. is_word ( ) && id. is_none ( ) {
121- id = Some ( meta_item. name ( ) . clone ( ) ) ;
122- } else {
123- // FIXME better-encapsulate meta_item (don't directly access `node`)
124- span_bug ! ( meta_item. span( ) , "unexpected meta-item {:?}" , meta_item. node)
119+ for list_item in attr. meta_item_list ( ) . unwrap_or_default ( ) {
120+ match list_item. word ( ) {
121+ Some ( word) if id. is_none ( ) => {
122+ id = Some ( word. name ( ) . clone ( ) )
123+ } ,
124+ _ => {
125+ // FIXME better-encapsulate meta_item (don't directly access `node`)
126+ span_bug ! ( list_item. span( ) , "unexpected list-item {:?}" , list_item. node)
127+ }
125128 }
126129 }
130+
127131 let id = id. unwrap_or ( InternedString :: new ( ID ) ) ;
128132 self . if_this_changed . entry ( id)
129133 . or_insert ( FnvHashSet ( ) )
130134 . insert ( ( attr. span , def_id, DepNode :: Hir ( def_id) ) ) ;
131135 } else if attr. check_name ( THEN_THIS_WOULD_NEED ) {
132136 let mut dep_node_interned = None ;
133137 let mut id = None ;
134- for meta_item in attr. meta_item_list ( ) . unwrap_or_default ( ) {
135- if meta_item. is_word ( ) && dep_node_interned. is_none ( ) {
136- dep_node_interned = Some ( meta_item. name ( ) . clone ( ) ) ;
137- } else if meta_item. is_word ( ) && id. is_none ( ) {
138- id = Some ( meta_item. name ( ) . clone ( ) ) ;
139- } else {
140- // FIXME better-encapsulate meta_item (don't directly access `node`)
141- span_bug ! ( meta_item. span( ) , "unexpected meta-item {:?}" , meta_item. node)
138+ for list_item in attr. meta_item_list ( ) . unwrap_or_default ( ) {
139+ match list_item. word ( ) {
140+ Some ( word) if dep_node_interned. is_none ( ) => {
141+ dep_node_interned = Some ( word. name ( ) . clone ( ) ) ;
142+ } ,
143+ Some ( word) if id. is_none ( ) => {
144+ id = Some ( word. name ( ) . clone ( ) )
145+ } ,
146+ _ => {
147+ // FIXME better-encapsulate meta_item (don't directly access `node`)
148+ span_bug ! ( list_item. span( ) , "unexpected meta-item {:?}" , list_item. node)
149+ }
142150 }
143151 }
152+
144153 let dep_node = match dep_node_interned {
145154 Some ( ref n) => {
146155 match DepNode :: from_label_string ( & n[ ..] , def_id) {
0 commit comments