Unify on roots

This commit is contained in:
Ayaz Hafiz 2023-07-16 12:42:41 -05:00
parent 18e9f8f034
commit 5ea9bd19b2
No known key found for this signature in database
GPG Key ID: 0E2A37416A25EF58

View File

@ -90,17 +90,26 @@ impl<'a> Env<'a> {
self.fixed_variables.extend(vars);
}
#[cfg(debug_assertions)]
pub(crate) fn union(&mut self, left: Variable, right: Variable, desc: Descriptor) {
let left_root = self.subs.get_root_key_without_compacting(left);
let right_root = self.subs.get_root_key_without_compacting(right);
self.subs.union(left, right, desc);
debug_checkmate!(self.cm, cm => {
let new_root = self.subs.get_root_key_without_compacting(left);
cm.set_descriptor(self.subs, new_root, desc);
cm.unify(self.subs, left, new_root);
cm.unify(self.subs, right, new_root);
cm.unify(self.subs, left_root, new_root);
cm.unify(self.subs, right_root, new_root);
});
}
#[cfg(not(debug_assertions))]
pub(crate) fn union(&mut self, left: Variable, right: Variable, desc: Descriptor) {
self.subs.union(left, right, desc);
}
#[cfg(debug_assertions)]
pub(crate) fn debug_start_unification(
&mut self,
@ -109,7 +118,7 @@ impl<'a> Env<'a> {
mode: roc_solve_schema::UnificationMode,
) {
debug_checkmate!(self.cm, cm => {
cm.start_unification(self.subs, left, right);
cm.start_unification(self.subs, left, right, mode);
});
}