@@ -64,7 +64,7 @@ use syntax::attr::{attr_metas, contains_name, attrs_contains_name};
64
64
use syntax:: parse:: token:: ident_interner;
65
65
use syntax:: parse:: token:: special_idents;
66
66
use syntax:: print:: pprust:: path_to_str;
67
- use syntax:: codemap:: { span, dummy_sp} ;
67
+ use syntax:: codemap:: { span, dummy_sp, BytePos } ;
68
68
use syntax:: visit:: { default_visitor, mk_vt, Visitor , visit_block} ;
69
69
use syntax:: visit:: { visit_crate, visit_expr, visit_expr_opt} ;
70
70
use syntax:: visit:: { visit_foreign_item, visit_item} ;
@@ -2482,6 +2482,16 @@ pub impl Resolver {
2482
2482
TypeNS ,
2483
2483
name_search_type) {
2484
2484
Failed => {
2485
+ let segment_name = self . session . str_of ( name) ;
2486
+ let module_name = self . module_to_str ( search_module) ;
2487
+ if module_name == ~"???" {
2488
+ self . session . span_err ( span { lo : span. lo , hi : span. lo +
2489
+ BytePos ( str:: len ( * segment_name) ) , expn_info :
2490
+ span. expn_info } , fmt ! ( "unresolved import. perhaps \
2491
+ you forgot an 'extern mod %s'?",
2492
+ * segment_name) ) ;
2493
+ return Failed ;
2494
+ }
2485
2495
self . session . span_err ( span, ~"unresolved name") ;
2486
2496
return Failed ;
2487
2497
}
0 commit comments