@@ -107,7 +107,8 @@ type env =
107
107
mod_map : hashmap < ast:: node_id , @indexed_mod > ,
108
108
ext_map : hashmap < def_id , [ ident ] > ,
109
109
ext_cache : ext_hash ,
110
- mutable used_imports: option:: t < [ ast:: node_id ] > ,
110
+ used_imports : { mutable track: bool ,
111
+ mutable data: [ ast:: node_id ] } ,
111
112
mutable reported: [ { ident: str , sc : scope } ] ,
112
113
mutable currently_resolving: node_id ,
113
114
sess : session } ;
@@ -129,15 +130,14 @@ fn resolve_crate(sess: session, amap: ast_map::map, crate: @ast::crate) ->
129
130
mod_map: new_int_hash :: < @indexed_mod > ( ) ,
130
131
ext_map: new_def_hash :: < [ ident ] > ( ) ,
131
132
ext_cache: new_ext_hash ( ) ,
132
- mutable used_imports : none ,
133
+ used_imports : { mutable track : false , mutable data : [ ] } ,
133
134
mutable reported: [ ] ,
134
135
mutable currently_resolving: -1 ,
135
136
sess: sess} ;
136
137
map_crate ( e, crate ) ;
137
138
resolve_imports ( * e) ;
138
139
check_for_collisions ( e, * crate ) ;
139
140
check_bad_exports ( e) ;
140
- e. used_imports = some ( [ ] ) ;
141
141
resolve_names ( e, crate ) ;
142
142
check_unused_imports ( e) ;
143
143
ret { def_map : e. def_map , ext_map : e. ext_map } ;
@@ -238,6 +238,7 @@ fn map_crate(e: @env, c: @ast::crate) {
238
238
}
239
239
240
240
fn resolve_imports ( e : env ) {
241
+ e. used_imports . track = true ;
241
242
e. imports . values { |v|
242
243
alt v {
243
244
todo( node_id, name, path, span, scopes) {
@@ -246,15 +247,15 @@ fn resolve_imports(e: env) {
246
247
resolved ( _, _, _, _, _) { }
247
248
}
248
249
} ;
250
+ e. used_imports . track = false ;
249
251
e. sess . abort_if_errors ( ) ;
250
252
}
251
253
252
254
fn check_unused_imports ( e : @env ) {
253
- let used = option:: get ( e. used_imports ) ;
254
255
e. imports . items { |k, v|
255
256
alt v {
256
257
resolved( val, ty, md, name, sp) {
257
- if !vec:: member ( k, used ) {
258
+ if !vec:: member ( k, e . used_imports . data ) {
258
259
e. sess . span_warn ( sp, "unused import " + name) ;
259
260
}
260
261
}
@@ -264,6 +265,7 @@ fn check_unused_imports(e: @env) {
264
265
}
265
266
266
267
fn resolve_names ( e : @env , c : @ast:: crate ) {
268
+ e. used_imports . track = true ;
267
269
let v =
268
270
@{ visit_native_item: visit_native_item_with_scope,
269
271
visit_item: visit_item_with_scope,
@@ -277,6 +279,7 @@ fn resolve_names(e: @env, c: @ast::crate) {
277
279
visit_fn: bind visit_fn_with_scope ( e, _, _, _, _, _, _, _)
278
280
with * visit:: default_visitor ( ) } ;
279
281
visit:: visit_crate ( * c, cons ( scope_crate, @nil) , visit:: mk_vt ( v) ) ;
282
+ e. used_imports . track = false ;
280
283
e. sess . abort_if_errors ( ) ;
281
284
282
285
fn walk_expr ( e : @env , exp : @ast:: expr , sc : scopes , v : vt < scopes > ) {
@@ -950,12 +953,8 @@ fn lookup_import(e: env, defid: def_id, ns: namespace) -> option::t<def> {
950
953
ret none;
951
954
}
952
955
resolved ( val, typ, md, _, _) {
953
- alt e. used_imports {
954
- none. { }
955
- some ( lst_) {
956
- let lst = lst_ + [ defid. node ] ;
957
- e. used_imports = option:: some ( lst) ;
958
- }
956
+ if e. used_imports . track {
957
+ e. used_imports . data += [ defid. node ] ;
959
958
}
960
959
ret alt ns { ns_value. { val } ns_type. { typ } ns_module. { md } } ;
961
960
}
0 commit comments