Structs§
- A
DefId
identifies a particular definition, by combining a crate index and a def index. - A DefIndex is an index into the hir-map for a crate, identifying a particular definition. It should really be considered an interned shorthand for a particular DefPath.
- A
DefPathHash
is a fixed-size representation of aDefPath
that is stable across crate and compilation session boundaries. It consists of two separate 64-bit hashes. The first uniquely identifies the crate thisDefPathHash
originates from (see StableCrateId), and the second uniquely identifies the correspondingDefPath
within that crate. Together they form a unique identifier within an entire crate graph. - A
LocalDefId
is equivalent to aDefId
withkrate == LOCAL_CRATE
. Since we encode this information in the type, we can ensure at compile time that noDefId
s from upstream crates get thrown into the mix. There are quite a few cases where we know that onlyDefId
s from the local crate are expected; aDefId
from a different crate would signify a bug somewhere. This is whenLocalDefId
comes in handy. - A
StableCrateId
is a 64-bit hash of a crate name, together with all-Cmetadata
arguments, and some other data. It is toCrateNum
whatDefPathHash
is toDefId
. It is stable across compilation sessions.
Constants§
- The crate root is always assigned index 0 by the AST Map code, thanks to
NodeCollector::new
. - Item definitions in the currently-compiled crate would have the
CrateNum
LOCAL_CRATE
in theirDefId
.