Skip to content

Commit 4e44437

Browse files
committed
rustc: Make resolve more forgiving of missing external crates
Rustdoc needs to be able to resolve locals without resolving externals
1 parent cec1679 commit 4e44437

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

src/comp/metadata/cstore.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export get_used_libraries;
2020
export add_used_link_args;
2121
export get_used_link_args;
2222
export add_use_stmt_cnum;
23-
export get_use_stmt_cnum;
23+
export find_use_stmt_cnum;
2424
export get_dep_hashes;
2525
export get_path;
2626

@@ -131,8 +131,9 @@ fn add_use_stmt_cnum(cstore: cstore, use_id: ast::node_id,
131131
p(cstore).use_crate_map.insert(use_id, cnum);
132132
}
133133

134-
fn get_use_stmt_cnum(cstore: cstore, use_id: ast::node_id) -> ast::crate_num {
135-
ret p(cstore).use_crate_map.get(use_id);
134+
fn find_use_stmt_cnum(cstore: cstore,
135+
use_id: ast::node_id) -> option<ast::crate_num> {
136+
p(cstore).use_crate_map.find(use_id)
136137
}
137138

138139
// returns hashes of crates directly used by this crate. Hashes are

src/comp/middle/resolve.rs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,9 +1285,17 @@ fn lookup_in_mod(e: env, m: def, sp: span, name: ident, ns: namespace,
12851285
}
12861286
}
12871287

1288-
fn found_view_item(e: env, id: node_id) -> def {
1289-
let cnum = cstore::get_use_stmt_cnum(e.cstore, id);
1290-
ret ast::def_mod({crate: cnum, node: ast::crate_node_id});
1288+
fn found_view_item(e: env, id: node_id) -> option<def> {
1289+
alt cstore::find_use_stmt_cnum(e.cstore, id) {
1290+
some(cnum) {
1291+
some(ast::def_mod({crate: cnum, node: ast::crate_node_id}))
1292+
}
1293+
none {
1294+
// This can happen if we didn't load external crate info.
1295+
// Rustdoc depends on this.
1296+
none
1297+
}
1298+
}
12911299
}
12921300

12931301
fn lookup_import(e: env, defid: def_id, ns: namespace) -> option<def> {
@@ -1418,7 +1426,7 @@ fn lookup_in_mie(e: env, mie: mod_index_entry, ns: namespace) ->
14181426
option<def> {
14191427
alt mie {
14201428
mie_view_item(_, id, _) {
1421-
if ns == ns_module { ret some(found_view_item(e, id)); }
1429+
if ns == ns_module { ret found_view_item(e, id); }
14221430
}
14231431
mie_import_ident(id, _) { ret lookup_import(e, local_def(id), ns); }
14241432
mie_item(item) { ret found_def_item(item, ns); }

0 commit comments

Comments
 (0)