MCPcopy Create free account
hub / github.com/CodeSentryAI/lockbud / intersect

Function intersect

src/analysis/postdom/mod.rs:188–215  ·  view source on GitHub ↗
(
    post_order_rank: &IndexVec<Node, usize>,
    immediate_post_dominators: &IndexVec<Node, ExtNode<Node>>,
    end_nodes: &[Node],
    mut node1: Node,
    mut node2: Node,
)

Source from the content-addressed store, hash-verified

186}
187
188fn intersect<Node: Idx>(
189 post_order_rank: &IndexVec<Node, usize>,
190 immediate_post_dominators: &IndexVec<Node, ExtNode<Node>>,
191 end_nodes: &[Node],
192 mut node1: Node,
193 mut node2: Node,
194) -> ExtNode<Node> {
195 while node1 != node2 {
196 if end_nodes.contains(&node1) && end_nodes.contains(&node2) {
197 return ExtNode::Fake;
198 }
199 while post_order_rank[node1] < post_order_rank[node2] {
200 match immediate_post_dominators[node1] {
201 ExtNode::Real(Some(n)) => node1 = n,
202 ExtNode::Real(None) | ExtNode::Fake => break,
203 };
204 }
205
206 while post_order_rank[node2] < post_order_rank[node1] {
207 match immediate_post_dominators[node2] {
208 ExtNode::Real(Some(n)) => node2 = n,
209 ExtNode::Real(None) | ExtNode::Fake => break,
210 };
211 }
212 }
213
214 ExtNode::Real(Some(node1))
215}
216
217#[derive(Clone, Copy, Debug, PartialEq, Eq)]
218pub enum ExtNode<N: Idx> {

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected