1use fission_ir::{CoreIR, NodeId};
2use std::collections::HashSet;
3
4#[derive(Debug, Default)]
5pub struct FrameDiff {
6 pub dirty_structural: HashSet<NodeId>,
7}
8
9pub fn diff_ir(prev: &CoreIR, next: &CoreIR) -> FrameDiff {
10 let mut diff = FrameDiff::default();
11
12 for (id, next_node) in &next.nodes {
13 if let Some(prev_node) = prev.nodes.get(id) {
14 if prev_node.hash != next_node.hash {
15 diff.dirty_structural.insert(*id);
16 }
17 } else {
18 diff.dirty_structural.insert(*id);
19 }
20 }
21
22 diff
23}