aboutsummaryrefslogtreecommitdiff
path: root/src/checker_signature.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/checker_signature.rs')
-rw-r--r--src/checker_signature.rs23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/checker_signature.rs b/src/checker_signature.rs
index ab54fd1..9d0bffe 100644
--- a/src/checker_signature.rs
+++ b/src/checker_signature.rs
@@ -107,7 +107,7 @@ impl CheckerState {
}
}
- #[instrument(skip(self), level = "debug", fields(%instance, ?signature))]
+ #[instrument(skip(self), level = "debug", fields(%instance, signature=%signature.map(|s| s.to_string()).unwrap_or_default()) )]
pub fn check_instance(
&self,
instance: &Instance,
@@ -140,10 +140,24 @@ impl CheckerState {
claimed: signature.clone(),
});
};
+ println!("{self}");
let element = self.check_element(element, set)?;
Ok(Instance::ElementCoerce(element))
} else {
// todo!("how do we handle check_element without a set?");
+ println!("THISISATTODO");
+ // quick hack:
+ let element = if let Element::Var(v) = element {
+ let lookup = self.lookup_element(&v)?;
+ if let ElementValue::Concrete(ref x) = lookup.value {
+ x.clone()
+ } else {
+ element.clone()
+ }
+ } else {
+ element.clone()
+ };
+
Ok(Instance::ElementCoerce(element.clone()))
}
}
@@ -491,6 +505,7 @@ impl CheckerState {
claimed: signature.clone(),
});
}
+
let mut ctx = self.clone();
let inst_params = zip(inst_params, sig_params)
.map(
@@ -519,6 +534,12 @@ impl CheckerState {
Element::Var(set_n.clone()).into(),
set_s.clone(),
)?;
+ // TODO should this be unconditional?
+ ctx.add_element(
+ set_n.clone(),
+ ElementValue::Hypothetical,
+ set_s.clone()
+ )?;
Ok(Param {
name: set_n.clone(),
set: set_s,