@@ -56,7 +56,7 @@ use std::env;
56
56
use std:: fs:: File ;
57
57
use std:: io:: Write ;
58
58
use syntax:: ast;
59
- use syntax:: attr:: AttrMetaMethods ;
59
+ use syntax:: attr:: { AttrNestedMetaItemMethods , AttrMetaMethods } ;
60
60
use syntax:: parse:: token:: InternedString ;
61
61
use syntax_pos:: Span ;
62
62
@@ -116,31 +116,40 @@ impl<'a, 'tcx> IfThisChanged<'a, 'tcx> {
116
116
for attr in self . tcx . get_attrs ( def_id) . iter ( ) {
117
117
if attr. check_name ( IF_THIS_CHANGED ) {
118
118
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
+ }
125
128
}
126
129
}
130
+
127
131
let id = id. unwrap_or ( InternedString :: new ( ID ) ) ;
128
132
self . if_this_changed . entry ( id)
129
133
. or_insert ( FnvHashSet ( ) )
130
134
. insert ( ( attr. span , def_id, DepNode :: Hir ( def_id) ) ) ;
131
135
} else if attr. check_name ( THEN_THIS_WOULD_NEED ) {
132
136
let mut dep_node_interned = None ;
133
137
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
+ }
142
150
}
143
151
}
152
+
144
153
let dep_node = match dep_node_interned {
145
154
Some ( ref n) => {
146
155
match DepNode :: from_label_string ( & n[ ..] , def_id) {
0 commit comments