[−][src]Struct rustc_query_system::dep_graph::graph::CurrentDepGraph
CurrentDepGraph stores the dependency graph for the current session.
It will be populated as we run queries or tasks.
The nodes in it are identified by an index (DepNodeIndex).
The data for each node is stored in its DepNodeData, found in the data field.
We never remove nodes from the graph: they are only added.
This struct uses two locks internally. The data and node_to_node_index fields are
locked separately. Operations that take a DepNodeIndex typically just access
the data field.
The only operation that must manipulate both locks is adding new nodes, in which case
we first acquire the node_to_node_index lock and then, once a new node is to be inserted,
acquire the lock on data.
Fields
data: Lock<IndexVec<DepNodeIndex, DepNodeData<K>>>node_to_node_index: Sharded<FxHashMap<DepNode<K>, DepNodeIndex>>forbidden_edge: Option<EdgeFilter>Used to trap when a specific edge is added to the graph.
This is used for debug purposes and is only active with debug_assertions.
anon_id_seed: FingerprintAnonymous DepNodes are nodes whose IDs we compute from the list of
their edges. This has the beneficial side-effect that multiple anonymous
nodes can be coalesced into one without changing the semantics of the
dependency graph. However, the merging of nodes can lead to a subtle
problem during red-green marking: The color of an anonymous node from
the current session might "shadow" the color of the node with the same
ID from the previous session. In order to side-step this problem, we make
sure that anonymous NodeIds allocated in different sessions don't overlap.
This is implemented by mixing a session-key into the ID fingerprint of
each anon node. The session-key is just a random number generated when
the DepGraph is created.
total_read_count: AtomicU64These are simple counters that are for profiling and
debugging and only active with debug_assertions.
total_duplicate_read_count: AtomicU64Implementations
impl<K: DepKind> CurrentDepGraph<K>[src]
pub(in dep_graph::graph) fn new(
prev_graph_node_count: usize
) -> CurrentDepGraph<K>[src]
prev_graph_node_count: usize
) -> CurrentDepGraph<K>
pub(in dep_graph::graph) fn complete_task(
&self,
node: DepNode<K>,
task_deps: TaskDeps<K>,
fingerprint: Fingerprint
) -> DepNodeIndex[src]
&self,
node: DepNode<K>,
task_deps: TaskDeps<K>,
fingerprint: Fingerprint
) -> DepNodeIndex
pub(in dep_graph::graph) fn complete_anon_task(
&self,
kind: K,
task_deps: TaskDeps<K>
) -> DepNodeIndex[src]
&self,
kind: K,
task_deps: TaskDeps<K>
) -> DepNodeIndex
pub(in dep_graph::graph) fn alloc_node(
&self,
dep_node: DepNode<K>,
edges: SmallVec<[DepNodeIndex; 8]>,
fingerprint: Fingerprint
) -> DepNodeIndex[src]
&self,
dep_node: DepNode<K>,
edges: SmallVec<[DepNodeIndex; 8]>,
fingerprint: Fingerprint
) -> DepNodeIndex
pub(in dep_graph::graph) fn intern_node(
&self,
dep_node: DepNode<K>,
edges: SmallVec<[DepNodeIndex; 8]>,
fingerprint: Fingerprint
) -> DepNodeIndex[src]
&self,
dep_node: DepNode<K>,
edges: SmallVec<[DepNodeIndex; 8]>,
fingerprint: Fingerprint
) -> DepNodeIndex
Auto Trait Implementations
impl<K> !RefUnwindSafe for CurrentDepGraph<K>
impl<K> Send for CurrentDepGraph<K> where
K: Send,
K: Send,
impl<K> !Sync for CurrentDepGraph<K>
impl<K> Unpin for CurrentDepGraph<K> where
K: Unpin,
K: Unpin,
impl<K> UnwindSafe for CurrentDepGraph<K> where
K: UnwindSafe,
K: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized, [src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized, [src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized, [src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T[src]
impl<T> From<T> for T[src]
impl<T, U> Into<U> for T where
U: From<T>, [src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>, [src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>, [src]
U: TryFrom<T>,