Struct rustc_metadata::creader::CrateMetadataRef
source · pub(crate) struct CrateMetadataRef<'a> {
pub cdata: &'a CrateMetadata,
pub cstore: &'a CStore,
}
Expand description
A reference to CrateMetadata
that can also give access to whole crate store when necessary.
Fields
cdata: &'a CrateMetadata
cstore: &'a CStore
Implementations
sourceimpl<'a, 'tcx> CrateMetadataRef<'a>
impl<'a, 'tcx> CrateMetadataRef<'a>
fn raw_proc_macro(self, id: DefIndex) -> &'a ProcMacro
fn opt_item_name(self, item_index: DefIndex) -> Option<Symbol>
fn item_name(self, item_index: DefIndex) -> Symbol
fn opt_item_ident(self, item_index: DefIndex, sess: &Session) -> Option<Ident>
fn item_ident(self, item_index: DefIndex, sess: &Session) -> Ident
pub(super) fn map_encoded_cnum_to_current(self, cnum: CrateNum) -> CrateNum
fn def_kind(self, item_id: DefIndex) -> DefKind
fn get_span(self, index: DefIndex, sess: &Session) -> Span
fn load_proc_macro(self, id: DefIndex, sess: &Session) -> SyntaxExtension
fn get_variant(
self,
kind: &DefKind,
index: DefIndex,
parent_did: DefId
) -> VariantDef
fn get_adt_def(self, item_id: DefIndex, tcx: TyCtxt<'tcx>) -> AdtDef<'tcx>
fn get_generics(self, item_id: DefIndex, sess: &Session) -> Generics
fn get_visibility(self, id: DefIndex) -> Visibility<DefId>
fn get_trait_item_def_id(self, id: DefIndex) -> Option<DefId>
fn get_expn_that_defined(self, id: DefIndex, sess: &Session) -> ExpnId
fn get_debugger_visualizers(self) -> Vec<DebuggerVisualizerFile>
sourcefn get_lib_features(self, tcx: TyCtxt<'tcx>) -> &'tcx [(Symbol, Option<Symbol>)]
fn get_lib_features(self, tcx: TyCtxt<'tcx>) -> &'tcx [(Symbol, Option<Symbol>)]
Iterates over all the stability attributes in the given crate.
sourcefn get_stability_implications(
self,
tcx: TyCtxt<'tcx>
) -> &'tcx [(Symbol, Symbol)]
fn get_stability_implications(
self,
tcx: TyCtxt<'tcx>
) -> &'tcx [(Symbol, Symbol)]
Iterates over the stability implications in the given crate (when a #[unstable]
attribute
has an implied_by
meta item, then the mapping from the implied feature to the actual
feature is a stability implication).
sourcefn get_lang_items(self, tcx: TyCtxt<'tcx>) -> &'tcx [(DefId, usize)]
fn get_lang_items(self, tcx: TyCtxt<'tcx>) -> &'tcx [(DefId, usize)]
Iterates over the language items in the given crate.
sourcefn get_diagnostic_items(self) -> DiagnosticItems
fn get_diagnostic_items(self) -> DiagnosticItems
Iterates over the diagnostic items in the given crate.
sourcefn for_each_module_child(
self,
id: DefIndex,
callback: impl FnMut(ModChild),
sess: &Session
)
fn for_each_module_child(
self,
id: DefIndex,
callback: impl FnMut(ModChild),
sess: &Session
)
Iterates over all named children of the given module,
including both proper items and reexports.
Module here is understood in name resolution sense - it can be a mod
item,
or a crate root, or an enum, or a trait.
fn is_ctfe_mir_available(self, id: DefIndex) -> bool
fn is_item_mir_available(self, id: DefIndex) -> bool
fn module_expansion(self, id: DefIndex, sess: &Session) -> ExpnId
fn get_fn_has_self_parameter(self, id: DefIndex, sess: &'a Session) -> bool
fn get_associated_item_def_ids(
self,
id: DefIndex,
sess: &'a Session
) -> impl Iterator<Item = DefId> + 'a
fn get_associated_item(self, id: DefIndex, sess: &'a Session) -> AssocItem
fn get_ctor_def_id_and_kind(self, node_id: DefIndex) -> Option<(DefId, CtorKind)>
fn get_item_attrs(
self,
id: DefIndex,
sess: &'a Session
) -> impl Iterator<Item = Attribute> + 'a
fn get_struct_field_names(
self,
id: DefIndex,
sess: &'a Session
) -> impl Iterator<Item = Spanned<Symbol>> + 'a
fn get_struct_field_visibilities(
self,
id: DefIndex
) -> impl Iterator<Item = Visibility<DefId>> + 'a
fn get_inherent_implementations_for_type(
self,
tcx: TyCtxt<'tcx>,
id: DefIndex
) -> &'tcx [DefId]
sourcefn get_inherent_impls(self) -> impl Iterator<Item = (DefId, DefId)> + 'a
fn get_inherent_impls(self) -> impl Iterator<Item = (DefId, DefId)> + 'a
Decodes all inherent impls in the crate (for rustdoc).
sourcefn get_traits(self) -> impl Iterator<Item = DefId> + 'a
fn get_traits(self) -> impl Iterator<Item = DefId> + 'a
Decodes all traits in the crate (for rustdoc and rustc diagnostics).
sourcefn get_trait_impls(
self
) -> impl Iterator<Item = (DefId, DefId, Option<SimplifiedType>)> + 'a
fn get_trait_impls(
self
) -> impl Iterator<Item = (DefId, DefId, Option<SimplifiedType>)> + 'a
Decodes all trait impls in the crate (for rustdoc).
fn get_all_incoherent_impls(self) -> impl Iterator<Item = DefId> + 'a
fn get_incoherent_impls(
self,
tcx: TyCtxt<'tcx>,
simp: SimplifiedType
) -> &'tcx [DefId]
fn get_implementations_of_trait(
self,
tcx: TyCtxt<'tcx>,
trait_def_id: DefId
) -> &'tcx [(DefId, Option<SimplifiedType>)]
fn get_native_libraries(
self,
sess: &'a Session
) -> impl Iterator<Item = NativeLib> + 'a
fn get_proc_macro_quoted_span(self, index: usize, sess: &Session) -> Span
fn get_foreign_modules(
self,
sess: &'a Session
) -> impl Iterator<Item = ForeignModule> + '_
fn get_dylib_dependency_formats(
self,
tcx: TyCtxt<'tcx>
) -> &'tcx [(CrateNum, LinkagePreference)]
fn get_missing_lang_items(self, tcx: TyCtxt<'tcx>) -> &'tcx [LangItem]
fn exported_symbols(
self,
tcx: TyCtxt<'tcx>
) -> &'tcx [(ExportedSymbol<'tcx>, SymbolExportInfo)]
fn get_macro(self, id: DefIndex, sess: &Session) -> MacroDef
fn is_foreign_item(self, id: DefIndex) -> bool
fn def_key(self, index: DefIndex) -> DefKey
fn def_path(self, id: DefIndex) -> DefPath
fn def_path_hash_unlocked(
self,
index: DefIndex,
def_path_hashes: &mut FxHashMap<DefIndex, DefPathHash>
) -> DefPathHash
fn def_path_hash(self, index: DefIndex) -> DefPathHash
fn def_path_hash_to_def_index(self, hash: DefPathHash) -> DefIndex
fn expn_hash_to_expn_id(
self,
sess: &Session,
index_guess: u32,
hash: ExpnHash
) -> ExpnId
sourcefn imported_source_file(
self,
source_file_index: u32,
sess: &Session
) -> ImportedSourceFile
fn imported_source_file(
self,
source_file_index: u32,
sess: &Session
) -> ImportedSourceFile
Imports the source_map from an external crate into the source_map of the crate currently being compiled (the “local crate”).
The import algorithm works analogous to how AST items are inlined from an
external crate’s metadata:
For every SourceFile in the external source_map an ‘inline’ copy is created in the
local source_map. The correspondence relation between external and local
SourceFiles is recorded in the ImportedSourceFile
objects returned from this
function. When an item from an external crate is later inlined into this
crate, this correspondence information is used to translate the span
information of the inlined item so that it refers the correct positions in
the local source_map (see <decoder::DecodeContext as SpecializedDecoder<Span>>
).
The import algorithm in the function below will reuse SourceFiles already existing in the local source_map. For example, even if the SourceFile of some source file of libstd gets imported many times, there will only ever be one SourceFile object for the corresponding file in the local source_map.
Note that imported SourceFiles do not actually contain the source code of the file they represent, just information about length, line breaks, and multibyte characters. This information is enough to generate valid debuginfo for items inlined from other crates.
Proc macro crates don’t currently export spans, so this function does not have to work for them.
fn get_generator_diagnostic_data(
self,
tcx: TyCtxt<'tcx>,
id: DefIndex
) -> Option<GeneratorDiagnosticData<'tcx>>
fn get_may_have_doc_links(self, index: DefIndex) -> bool
fn get_is_intrinsic(self, index: DefIndex) -> bool
Methods from Deref<Target = CrateMetadata>
pub(crate) fn dependencies(&self) -> LockGuard<'_, Vec<CrateNum>>
pub(crate) fn add_dependency(&self, cnum: CrateNum)
pub(crate) fn update_extern_crate(&self, new_extern_crate: ExternCrate) -> bool
pub(crate) fn source(&self) -> &CrateSource
pub(crate) fn dep_kind(&self) -> CrateDepKind
pub(crate) fn update_dep_kind(
&self,
f: impl FnOnce(CrateDepKind) -> CrateDepKind
)
pub(crate) fn required_panic_strategy(&self) -> Option<PanicStrategy>
pub(crate) fn needs_panic_runtime(&self) -> bool
pub(crate) fn is_panic_runtime(&self) -> bool
pub(crate) fn is_profiler_runtime(&self) -> bool
pub(crate) fn needs_allocator(&self) -> bool
pub(crate) fn has_global_allocator(&self) -> bool
pub(crate) fn has_default_lib_allocator(&self) -> bool
pub(crate) fn is_proc_macro_crate(&self) -> bool
pub(crate) fn name(&self) -> Symbol
pub(crate) fn stable_crate_id(&self) -> StableCrateId
pub(crate) fn hash(&self) -> Svh
fn num_def_ids(&self) -> usize
fn local_def_id(&self, index: DefIndex) -> DefId
fn reverse_translate_def_id(&self, did: DefId) -> Option<DefId>
Trait Implementations
sourceimpl<'a> Clone for CrateMetadataRef<'a>
impl<'a> Clone for CrateMetadataRef<'a>
sourcefn clone(&self) -> CrateMetadataRef<'a>
fn clone(&self) -> CrateMetadataRef<'a>
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresourceimpl Deref for CrateMetadataRef<'_>
impl Deref for CrateMetadataRef<'_>
type Target = CrateMetadata
type Target = CrateMetadata
sourceimpl<'a, 'tcx> Metadata<'a, 'tcx> for CrateMetadataRef<'a>
impl<'a, 'tcx> Metadata<'a, 'tcx> for CrateMetadataRef<'a>
impl<'a> Copy for CrateMetadataRef<'a>
Auto Trait Implementations
impl<'a> !RefUnwindSafe for CrateMetadataRef<'a>
impl<'a> !Send for CrateMetadataRef<'a>
impl<'a> !Sync for CrateMetadataRef<'a>
impl<'a> Unpin for CrateMetadataRef<'a>
impl<'a> !UnwindSafe for CrateMetadataRef<'a>
Blanket Implementations
sourceimpl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
impl<'tcx, T> ArenaAllocatable<'tcx, IsCopy> for Twhere
T: Copy,
fn allocate_on(self, arena: &'a Arena<'tcx>) -> &'a mut T
fn allocate_from_iter(
arena: &'a Arena<'tcx>,
iter: impl IntoIterator<Item = T>
) -> &'a mut [T]ⓘNotable traits for &[u8]impl Read for &[u8]impl Write for &mut [u8]
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 16 bytes