@@ -454,14 +454,14 @@ fn resolve_import(e: env, defid: ast::def_id, name: ast::ident,
454
454
lookup_in_scope ( e, sc, sp, end_id, ns_type) ,
455
455
lookup_in_scope ( e, sc, sp, end_id, ns_module) ) ;
456
456
remove_if_unresolved ( e. imports , defid. node ) ;
457
- } else { // FIXME (issue #521)
457
+ } else {
458
458
let dcur =
459
459
alt lookup_in_scope ( e, sc, sp, ids[ 0 ] , ns_module) {
460
460
some ( dcur) { dcur }
461
461
none. {
462
462
unresolved_err ( e, sc, sp, ids[ 0 ] , ns_name ( ns_module) ) ;
463
463
remove_if_unresolved ( e. imports , defid. node ) ;
464
- ret ( )
464
+ ret;
465
465
}
466
466
} ;
467
467
let i = 1 u;
@@ -476,16 +476,15 @@ fn resolve_import(e: env, defid: ast::def_id, name: ast::ident,
476
476
remove_if_unresolved ( e. imports , defid. node ) ;
477
477
break ;
478
478
} else {
479
- dcur =
480
- alt lookup_in_mod ( e, dcur, sp, ids[ i] , ns_module, outside)
481
- {
482
- some ( dcur) { dcur }
483
- none. {
484
- unresolved_err ( e, sc, sp, ids[ i] , ns_name ( ns_module) ) ;
485
- remove_if_unresolved ( e. imports , defid. node ) ;
486
- ret ( ) // FIXME (issue #521)
487
- }
488
- } ;
479
+ dcur = alt lookup_in_mod ( e, dcur, sp, ids[ i] , ns_module,
480
+ outside) {
481
+ some ( dcur) { dcur }
482
+ none. {
483
+ unresolved_err ( e, sc, sp, ids[ i] , ns_name ( ns_module) ) ;
484
+ remove_if_unresolved ( e. imports , defid. node ) ;
485
+ ret;
486
+ }
487
+ } ;
489
488
i += 1 u;
490
489
}
491
490
}
@@ -523,27 +522,32 @@ fn ns_name(ns: namespace) -> str {
523
522
}
524
523
525
524
fn unresolved_err ( e : env , sc : scopes , sp : span , name : ident , kind : str ) {
526
- fn find_fn_or_mod_scope ( sc : scopes ) -> scope {
525
+ fn find_fn_or_mod_scope ( sc : scopes ) -> option :: t < scope > {
527
526
while true {
528
527
alt sc {
529
528
cons( cur, rest) {
530
529
alt cur {
531
530
scope_crate. | scope_fn ( _, _, _) |
532
531
scope_item ( @{ node: ast:: item_mod ( _) , _} ) {
533
- ret cur;
532
+ ret some ( cur) ;
534
533
}
535
534
_ { sc = * rest; }
536
535
}
537
536
}
537
+ _ { ret none; }
538
538
}
539
539
}
540
540
fail;
541
541
}
542
- let err_scope = find_fn_or_mod_scope ( sc) ;
543
- for rs: { ident: str , sc: scope} in e. reported {
544
- if str:: eq ( rs. ident , name) && err_scope == rs. sc { ret; }
542
+ alt find_fn_or_mod_scope ( sc) {
543
+ some ( err_scope) {
544
+ for rs: { ident: str , sc: scope} in e. reported {
545
+ if str:: eq ( rs. ident , name) && err_scope == rs. sc { ret; }
546
+ }
547
+ e. reported += [ { ident: name, sc: err_scope} ] ;
548
+ }
549
+ _ { }
545
550
}
546
- e. reported += [ { ident: name, sc: err_scope} ] ;
547
551
e. sess . span_err ( sp, mk_unresolved_msg ( name, kind) ) ;
548
552
}
549
553
0 commit comments