# Struct rustc_metadata::rmeta::decoder::CrateMetadata

source ·

    pub(crate) struct CrateMetadata {Show 20 fields
        blob: MetadataBlob,
        root: CrateRoot,
        trait_impls: FxHashMap<(u32, DefIndex), LazyArray<(DefIndex, Option<SimplifiedType>)>>,
        incoherent_impls: FxHashMap<SimplifiedType, LazyArray<DefIndex>>,
        raw_proc_macros: Option<&'static [ProcMacro]>,
        source_map_import_info: Lock<Vec<Option<ImportedSourceFile>>>,
        def_path_hash_map: DefPathHashMapRef<'static>,
        expn_hash_map: OnceLock<UnhashMap<ExpnHash, ExpnIndex>>,
        alloc_decoding_state: AllocDecodingState,
        def_key_cache: Lock<FxHashMap<DefIndex, DefKey>>,
        cnum: CrateNum,
        cnum_map: IndexVec<CrateNum, CrateNum>,
        dependencies: Vec<CrateNum>,
        dep_kind: CrateDepKind,
        source: Lrc<CrateSource>,
        private_dep: bool,
        host_hash: Option<Svh>,
        used: bool,
        hygiene_context: HygieneDecodeContext,
        extern_crate: Option<ExternCrate>,
    }

## Fields§

§`blob: MetadataBlob`

The primary crate data - binary metadata blob.

§`root: CrateRoot`

Data about the top-level items in a crate, as well as various crate-level metadata.

§`trait_impls: FxHashMap<(u32, DefIndex), LazyArray<(DefIndex, Option<SimplifiedType>)>>`

Trait impl data. FIXME: Used only from queries and can use query cache, so pre-decoding can probably be avoided.

§`incoherent_impls: FxHashMap<SimplifiedType, LazyArray<DefIndex>>`

Inherent impls which do not follow the normal coherence rules.

These can be introduced using either `#![rustc_coherence_is_core]` or `#[rustc_allow_incoherent_impl]`.

§`raw_proc_macros: Option<&'static [ProcMacro]>`

Proc macro descriptions for this crate, if it’s a proc macro crate.

§`source_map_import_info: Lock<Vec<Option<ImportedSourceFile>>>`

Source maps for code from the crate.

§`def_path_hash_map: DefPathHashMapRef<'static>`

For every definition in this crate, maps its `DefPathHash` to its `DefIndex`.

§`expn_hash_map: OnceLock<UnhashMap<ExpnHash, ExpnIndex>>`

Likewise for ExpnHash.

§`alloc_decoding_state: AllocDecodingState`

Used for decoding interpret::AllocIds in a cached & thread-safe manner.

§`def_key_cache: Lock<FxHashMap<DefIndex, DefKey>>`

Caches decoded `DefKey`s.

§`cnum: CrateNum`

ID of this crate, from the current compilation session’s point of view.

§`cnum_map: IndexVec<CrateNum, CrateNum>`

Maps crate IDs as they are were seen from this crate’s compilation sessions into IDs as they are seen from the current compilation session.

§`dependencies: Vec<CrateNum>`

Same ID set as `cnum_map` plus maybe some injected crates like panic runtime.

§`dep_kind: CrateDepKind`

How to link (or not link) this crate to the currently compiled crate.

§`source: Lrc<CrateSource>`

Filesystem location of this crate.

§`private_dep: bool`

Whether or not this crate should be consider a private dependency. Used by the ‘exported_private_dependencies’ lint, and for determining whether to emit suggestions that reference this crate.

§`host_hash: Option<Svh>`

The hash for the host proc macro. Used to support `-Z dual-proc-macro`.

§`used: bool`

The crate was used non-speculatively.

§`hygiene_context: HygieneDecodeContext`

Additional data used for decoding `HygieneData` (e.g. `SyntaxContext` and `ExpnId`). Note that we store a `HygieneDecodeContext` for each `CrateMetadata`. This is because `SyntaxContext` ids are not globally unique, so we need to track which ids we’ve decoded on a per-crate basis.

§`extern_crate: Option<ExternCrate>`

Information about the `extern crate` item or path that caused this crate to be loaded. If this is `None`, then the crate was injected (e.g., by the allocator).

## Implementations§

source§

### impl CrateMetadata

source

#### pub(crate) fn new( sess: &Session, cstore: &CStore, blob: MetadataBlob, root: CrateRoot, raw_proc_macros: Option<&'static [ProcMacro]>, cnum: CrateNum, cnum_map: IndexVec<CrateNum, CrateNum>, dep_kind: CrateDepKind, source: CrateSource, private_dep: bool, host_hash: Option<Svh>, ) -> CrateMetadata

source

#### pub(crate) fn dependencies(&self) -> impl Iterator<Item = CrateNum> + '_

source

#### pub(crate) fn add_dependency(&mut self, cnum: CrateNum)

source

#### pub(crate) fn update_extern_crate( &mut self, new_extern_crate: ExternCrate, ) -> bool

source

#### pub(crate) fn source(&self) -> &CrateSource

source

#### pub(crate) fn dep_kind(&self) -> CrateDepKind

source

#### pub(crate) fn set_dep_kind(&mut self, dep_kind: CrateDepKind)

source

#### pub(crate) fn update_and_private_dep(&mut self, private_dep: bool)

source

#### pub(crate) fn used(&self) -> bool

source

#### pub(crate) fn required_panic_strategy(&self) -> Option<PanicStrategy>

source

#### pub(crate) fn needs_panic_runtime(&self) -> bool

source

#### pub(crate) fn is_panic_runtime(&self) -> bool

source

#### pub(crate) fn is_profiler_runtime(&self) -> bool

source

#### pub(crate) fn needs_allocator(&self) -> bool

source

#### pub(crate) fn has_global_allocator(&self) -> bool

source

#### pub(crate) fn has_alloc_error_handler(&self) -> bool

source

#### pub(crate) fn has_default_lib_allocator(&self) -> bool

source

#### pub(crate) fn is_proc_macro_crate(&self) -> bool

source

#### pub(crate) fn name(&self) -> Symbol

source

#### pub(crate) fn hash(&self) -> Svh

source

#### fn num_def_ids(&self) -> usize

source

#### fn local_def_id(&self, index: DefIndex) -> DefId

source

#### fn reverse_translate_def_id(&self, did: DefId) -> Option<DefId>

## Auto Trait Implementations§

§

### impl DynSend for CrateMetadata

§

### impl DynSync for CrateMetadata

§

### impl !Freeze for CrateMetadata

§

### impl !RefUnwindSafe for CrateMetadata

§

### impl !Send for CrateMetadata

§

### impl !Sync for CrateMetadata

§

### impl Unpin for CrateMetadata

§

### impl !UnwindSafe for CrateMetadata

## Blanket Implementations§

source§

### impl<T> Aligned for T

source§

#### const ALIGN: Alignment = _

Alignment of `Self`.
source§

### impl<T> Any for T
where T: 'static + ?Sized,

source§

#### fn type_id(&self) -> TypeId

Gets the `TypeId` of `self`. Read more
source§

### impl<T> Borrow<T> for T
where T: ?Sized,

source§

#### fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

### impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

#### fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

### impl<T, R> CollectAndApply<T, R> for T

source§

#### fn collect_and_apply<I, F>(iter: I, f: F) -> R
where I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to `f(&iter.collect::<Vec<_>>())`.

§

#### type Output = R

source§

### impl<T> Filterable for T

source§

#### fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

### impl<T> From<T> for T

source§

#### fn from(t: T) -> T

Returns the argument unchanged.

source§

### impl<T> Instrument for T

source§

#### fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided `Span`, returning an `Instrumented` wrapper. Read more
source§

#### fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current `Span`, returning an `Instrumented` wrapper. Read more
source§

### impl<T, U> Into<U> for T
where U: From<T>,

source§

#### fn into(self) -> U

Calls `U::from(self)`.

That is, this conversion is whatever the implementation of `From<T> for U` chooses to do.

source§

### impl<T> IntoEither for T

source§

#### fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts `self` into a `Left` variant of `Either<Self, Self>` if `into_left` is `true`. Converts `self` into a `Right` variant of `Either<Self, Self>` otherwise. Read more
source§

#### fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts `self` into a `Left` variant of `Either<Self, Self>` if `into_left(&self)` returns `true`. Converts `self` into a `Right` variant of `Either<Self, Self>` otherwise. Read more
source§

### impl<P> IntoQueryParam<P> for P

source§

#### fn into_query_param(self) -> P

source§

### impl<T> MaybeResult<T> for T

§

#### type Error = !

source§

#### fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

#### fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

### impl<T> Pointable for T

source§

#### const ALIGN: usize = _

The alignment of pointer.
§

#### type Init = T

The type for initializers.
source§

#### unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

#### unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

#### unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

#### unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

### impl<T> Same for T

§

#### type Output = T

Should always be `Self`
source§

### impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

#### type Error = Infallible

The type returned in the event of a conversion error.
source§

#### fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

### impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

#### type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

#### fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

### impl<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

#### fn upcast(self, interner: I) -> U

source§

### impl<I, T> UpcastFrom<I, T> for T

source§

#### fn upcast_from(from: T, _tcx: I) -> T

source§

### impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

#### fn vzip(self) -> V

source§

### impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

#### default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

### impl<T> WithSubscriber for T

source§

#### fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided `Subscriber` to this type, returning a `WithDispatch` wrapper. Read more
source§

#### fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default `Subscriber` to this type, returning a `WithDispatch` wrapper. Read more
source§

### impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

### impl<T> ErasedDestructor for T
where T: 'static,

## 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: 2784 bytes