Skip to content

Commit 9552b9c

Browse files
committed
rustc_metadata: Refactor away ExternCrateInfo
1 parent 707d070 commit 9552b9c

File tree

1 file changed

+26
-54
lines changed

1 file changed

+26
-54
lines changed

src/librustc_metadata/creader.rs

+26-54
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,6 @@ fn dump_crates(cstore: &CStore) {
7171
});
7272
}
7373

74-
#[derive(Debug)]
75-
struct ExternCrateInfo {
76-
ident: Symbol,
77-
name: Symbol,
78-
id: ast::NodeId,
79-
dep_kind: DepKind,
80-
}
81-
8274
// Extra info about a crate loaded for plugins or exported macros.
8375
struct ExtensionCrate {
8476
metadata: PMDSource,
@@ -117,34 +109,6 @@ impl<'a> CrateLoader<'a> {
117109
}
118110
}
119111

120-
fn extract_crate_info(&self, i: &ast::Item) -> Option<ExternCrateInfo> {
121-
match i.node {
122-
ast::ItemKind::ExternCrate(ref path_opt) => {
123-
debug!("resolving extern crate stmt. ident: {} path_opt: {:?}",
124-
i.ident, path_opt);
125-
let name = match *path_opt {
126-
Some(name) => {
127-
validate_crate_name(Some(self.sess), &name.as_str(),
128-
Some(i.span));
129-
name
130-
}
131-
None => i.ident.name,
132-
};
133-
Some(ExternCrateInfo {
134-
ident: i.ident.name,
135-
name,
136-
id: i.id,
137-
dep_kind: if attr::contains_name(&i.attrs, "no_link") {
138-
DepKind::UnexportedMacrosOnly
139-
} else {
140-
DepKind::Explicit
141-
},
142-
})
143-
}
144-
_ => None
145-
}
146-
}
147-
148112
fn existing_match(&self, name: Symbol, hash: Option<&Svh>, kind: PathKind)
149113
-> Option<CrateNum> {
150114
let mut ret = None;
@@ -478,17 +442,17 @@ impl<'a> CrateLoader<'a> {
478442
})).collect()
479443
}
480444

481-
fn read_extension_crate(&mut self, span: Span, info: &ExternCrateInfo) -> ExtensionCrate {
482-
info!("read extension crate {} `extern crate {} as {}` dep_kind={:?}",
483-
info.id, info.name, info.ident, info.dep_kind);
445+
fn read_extension_crate(&mut self, span: Span, orig_name: Symbol, rename: Symbol)
446+
-> ExtensionCrate {
447+
info!("read extension crate `extern crate {} as {}`", orig_name, rename);
484448
let target_triple = &self.sess.opts.target_triple[..];
485449
let is_cross = target_triple != config::host_triple();
486450
let mut target_only = false;
487451
let mut locate_ctxt = locator::Context {
488452
sess: self.sess,
489453
span,
490-
ident: info.ident,
491-
crate_name: info.name,
454+
ident: orig_name,
455+
crate_name: rename,
492456
hash: None,
493457
filesearch: self.sess.host_filesearch(PathKind::Crate),
494458
target: &self.sess.host,
@@ -625,12 +589,8 @@ impl<'a> CrateLoader<'a> {
625589
span: Span,
626590
name: &str)
627591
-> Option<(PathBuf, CrateDisambiguator, DefIndex)> {
628-
let ekrate = self.read_extension_crate(span, &ExternCrateInfo {
629-
name: Symbol::intern(name),
630-
ident: Symbol::intern(name),
631-
id: ast::DUMMY_NODE_ID,
632-
dep_kind: DepKind::UnexportedMacrosOnly,
633-
});
592+
let name = Symbol::intern(name);
593+
let ekrate = self.read_extension_crate(span, name, name);
634594

635595
if ekrate.target_only {
636596
// Need to abort before syntax expansion.
@@ -1098,19 +1058,31 @@ impl<'a> middle::cstore::CrateLoader for CrateLoader<'a> {
10981058

10991059
fn process_item(&mut self, item: &ast::Item, definitions: &Definitions) {
11001060
match item.node {
1101-
ast::ItemKind::ExternCrate(_) => {
1102-
let info = self.extract_crate_info(item).unwrap();
1061+
ast::ItemKind::ExternCrate(rename) => {
1062+
debug!("resolving extern crate stmt. ident: {} rename: {:?}", item.ident, rename);
1063+
let rename = match rename {
1064+
Some(rename) => {
1065+
validate_crate_name(Some(self.sess), &rename.as_str(), Some(item.span));
1066+
rename
1067+
}
1068+
None => item.ident.name,
1069+
};
1070+
let dep_kind = if attr::contains_name(&item.attrs, "no_link") {
1071+
DepKind::UnexportedMacrosOnly
1072+
} else {
1073+
DepKind::Explicit
1074+
};
1075+
11031076
let (cnum, ..) = self.resolve_crate(
1104-
&None, info.ident, info.name, None, item.span, PathKind::Crate, info.dep_kind,
1077+
&None, item.ident.name, rename, None, item.span, PathKind::Crate, dep_kind,
11051078
);
11061079

11071080
let def_id = definitions.opt_local_def_id(item.id).unwrap();
1108-
let len = definitions.def_path(def_id.index).data.len();
1081+
let path_len = definitions.def_path(def_id.index).data.len();
11091082

1110-
let extern_crate =
1111-
ExternCrate { def_id: def_id, span: item.span, direct: true, path_len: len };
1083+
let extern_crate = ExternCrate { def_id, span: item.span, direct: true, path_len };
11121084
self.update_extern_crate(cnum, extern_crate, &mut FxHashSet());
1113-
self.cstore.add_extern_mod_stmt_cnum(info.id, cnum);
1085+
self.cstore.add_extern_mod_stmt_cnum(item.id, cnum);
11141086
}
11151087
_ => {}
11161088
}

0 commit comments

Comments
 (0)