Skip to content

Commit c5f62f2

Browse files
address review: full tsx not always needed
1 parent 00646f4 commit c5f62f2

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

compiler/rustc_metadata/src/creader.rs

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ use rustc_middle::bug;
2222
use rustc_middle::ty::data_structures::IndexSet;
2323
use rustc_middle::ty::{TyCtxt, TyCtxtFeed};
2424
use rustc_proc_macro::bridge::client::ProcMacro;
25+
use rustc_session::Session;
2526
use rustc_session::config::{
26-
CrateType, ExtendedTargetModifierInfo, ExternLocation, OptionsTargetModifiers, TargetModifier,
27+
CrateType, ExtendedTargetModifierInfo, ExternLocation, Externs, OptionsTargetModifiers,
28+
TargetModifier,
2729
};
2830
use rustc_session::cstore::{CrateDepKind, CrateSource, ExternCrate, ExternCrateSource};
2931
use rustc_session::lint::{self, BuiltinLintDiag};
@@ -480,7 +482,7 @@ impl CStore {
480482

481483
fn existing_match(
482484
&self,
483-
tcx: TyCtxt<'_>,
485+
externs: &Externs,
484486
name: Symbol,
485487
hash: Option<Svh>,
486488
kind: PathKind,
@@ -510,7 +512,7 @@ impl CStore {
510512
// `source` stores paths which are normalized which may be different
511513
// from the strings on the command line.
512514
let source = self.get_crate_data(cnum).cdata.source();
513-
if let Some(entry) = tcx.sess.opts.externs.get(name.as_str()) {
515+
if let Some(entry) = externs.get(name.as_str()) {
514516
// Only use `--extern crate_name=path` here, not `--extern crate_name`.
515517
if let Some(mut files) = entry.files() {
516518
if files.any(|l| {
@@ -561,9 +563,9 @@ impl CStore {
561563
/// Sometimes the directly dependent crate is not specified by `--extern`, in this case,
562564
/// `private-dep` is none during loading. This is equivalent to the scenario where the
563565
/// command parameter is set to `public-dependency`
564-
fn is_private_dep<'tcx>(
566+
fn is_private_dep(
565567
&self,
566-
tcx: TyCtxt<'tcx>,
568+
externs: &Externs,
567569
name: Symbol,
568570
private_dep: Option<bool>,
569571
origin: CrateOrigin<'_>,
@@ -572,7 +574,7 @@ impl CStore {
572574
return true;
573575
}
574576

575-
let extern_private = tcx.sess.opts.externs.get(name.as_str()).map(|e| e.is_private_dep);
577+
let extern_private = externs.get(name.as_str()).map(|e| e.is_private_dep);
576578
match (extern_private, private_dep) {
577579
// Explicit non-private via `--extern`, explicit non-private from metadata, or
578580
// unspecified with default to public.
@@ -598,7 +600,7 @@ impl CStore {
598600
let Library { source, metadata } = lib;
599601
let crate_root = metadata.get_root();
600602
let host_hash = host_lib.as_ref().map(|lib| lib.metadata.get_root().hash());
601-
let private_dep = self.is_private_dep(tcx, name, private_dep, origin);
603+
let private_dep = self.is_private_dep(&tcx.sess.opts.externs, name, private_dep, origin);
602604

603605
// Claim this crate number and cache it
604606
let feed = self.intern_stable_crate_id(tcx, &crate_root)?;
@@ -641,7 +643,7 @@ impl CStore {
641643
None => (&source, &crate_root),
642644
};
643645
let dlsym_dylib = dlsym_source.dylib.as_ref().expect("no dylib for a proc-macro crate");
644-
Some(self.dlsym_proc_macros(tcx, &dlsym_dylib.0, dlsym_root.stable_crate_id())?)
646+
Some(self.dlsym_proc_macros(tcx.sess, &dlsym_dylib.0, dlsym_root.stable_crate_id())?)
645647
} else {
646648
None
647649
};
@@ -665,24 +667,24 @@ impl CStore {
665667
Ok(cnum)
666668
}
667669

668-
fn load_proc_macro<'b, 'tcx>(
670+
fn load_proc_macro<'a, 'b>(
669671
&self,
670-
tcx: TyCtxt<'tcx>,
672+
sess: &'a Session,
671673
locator: &mut CrateLocator<'b>,
672674
crate_rejections: &mut CrateRejections,
673675
path_kind: PathKind,
674676
host_hash: Option<Svh>,
675677
) -> Result<Option<(LoadResult, Option<Library>)>, CrateError>
676678
where
677-
'tcx: 'b,
679+
'a: 'b,
678680
{
679-
if tcx.sess.opts.unstable_opts.dual_proc_macros {
681+
if sess.opts.unstable_opts.dual_proc_macros {
680682
// Use a new crate locator and crate rejections so trying to load a proc macro doesn't
681683
// affect the error message we emit
682684
let mut proc_macro_locator = locator.clone();
683685

684686
// Try to load a proc macro
685-
proc_macro_locator.for_target_proc_macro(tcx.sess, path_kind);
687+
proc_macro_locator.for_target_proc_macro(sess, path_kind);
686688

687689
// Load the proc macro crate for the target
688690
let target_result =
@@ -699,7 +701,7 @@ impl CStore {
699701
*crate_rejections = CrateRejections::default();
700702

701703
// Load the proc macro crate for the host
702-
locator.for_proc_macro(tcx.sess, path_kind);
704+
locator.for_proc_macro(sess, path_kind);
703705

704706
locator.hash = host_hash;
705707

@@ -720,7 +722,7 @@ impl CStore {
720722
let mut proc_macro_locator = locator.clone();
721723

722724
// Load the proc macro crate for the host
723-
proc_macro_locator.for_proc_macro(tcx.sess, path_kind);
725+
proc_macro_locator.for_proc_macro(sess, path_kind);
724726

725727
let Some(host_result) =
726728
self.load(&mut proc_macro_locator, &mut CrateRejections::default())?
@@ -782,7 +784,9 @@ impl CStore {
782784
let path_kind = if dep.is_some() { PathKind::Dependency } else { PathKind::Crate };
783785
let private_dep = origin.private_dep();
784786

785-
let result = if let Some(cnum) = self.existing_match(tcx, name, hash, path_kind) {
787+
let result = if let Some(cnum) =
788+
self.existing_match(&tcx.sess.opts.externs, name, hash, path_kind)
789+
{
786790
(LoadResult::Previous(cnum), None)
787791
} else {
788792
info!("falling back to a load");
@@ -805,7 +809,7 @@ impl CStore {
805809
info!("falling back to loading proc_macro");
806810
dep_kind = CrateDepKind::MacrosOnly;
807811
match self.load_proc_macro(
808-
tcx,
812+
tcx.sess,
809813
&mut locator,
810814
&mut crate_rejections,
811815
path_kind,
@@ -825,7 +829,8 @@ impl CStore {
825829
// not specified by `--extern` on command line parameters, it may be
826830
// `private-dependency` when `register_crate` is called for the first time. Then it must be updated to
827831
// `public-dependency` here.
828-
let private_dep = self.is_private_dep(tcx, name, private_dep, origin);
832+
let private_dep =
833+
self.is_private_dep(&tcx.sess.opts.externs, name, private_dep, origin);
829834
let data = self.get_crate_data_mut(cnum);
830835
if data.is_proc_macro_crate() {
831836
dep_kind = CrateDepKind::MacrosOnly;
@@ -924,13 +929,13 @@ impl CStore {
924929
Ok(crate_num_map)
925930
}
926931

927-
fn dlsym_proc_macros<'tcx>(
932+
fn dlsym_proc_macros(
928933
&self,
929-
tcx: TyCtxt<'tcx>,
934+
sess: &Session,
930935
path: &Path,
931936
stable_crate_id: StableCrateId,
932937
) -> Result<&'static [ProcMacro], CrateError> {
933-
let sym_name = tcx.sess.generate_proc_macro_decls_symbol(stable_crate_id);
938+
let sym_name = sess.generate_proc_macro_decls_symbol(stable_crate_id);
934939
debug!("trying to dlsym proc_macros {} for symbol `{}`", path.display(), sym_name);
935940

936941
unsafe {

0 commit comments

Comments
 (0)