[−][src]Module rustc_middle::dep_graph::dep_node

This module defines the DepNode type which the compiler uses to represent nodes in the dependency graph.

A DepNode consists of a DepKind (which specifies the kind of thing it represents, like a piece of HIR, MIR, etc) and a Fingerprint, a 128-bit hash value the exact meaning of which depends on the node's DepKind. Together, the kind and the fingerprint fully identify a dependency node, even across multiple compilation sessions. In other words, the value of the fingerprint does not depend on anything that is specific to a given compilation session, like an unpredictable interning key (e.g., NodeId, DefId, Symbol) or the numeric value of a pointer. The concept behind this could be compared to how git commit hashes uniquely identify a given commit and has a few advantages:

DepNode definition happens in the define_dep_nodes!() macro. This macro defines the DepKind enum and a corresponding DepConstructor enum. The DepConstructor enum links a DepKind to the parameters that are needed at runtime in order to construct a valid DepNode fingerprint.

Because the macro sees what parameters a given DepKind requires, it can "infer" some properties for each kind of DepNode:

The DepConstructor enum, together with DepNode::new(), ensures that only valid DepNode instances can be constructed. For example, the API does not allow for constructing parameterless DepNodes with anything other than a zeroed out fingerprint. More generally speaking, it relieves the user of the DepNode API of having to know how to compute the expected fingerprint for a given set of node parameters.

Modules

label_strs

Contains variant => str representations for constructing DepNode groups for tests.

Structs

DepConstructor

Enums

DepKind

Traits

DepContext
DepNodeExt
DepNodeParams

Type Definitions

DepNode