From c49bcc78144b0a7f3b2180219d593566e63a95c5 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Sat, 5 Mar 2022 17:59:28 +0800 Subject: [PATCH] Add type variable table to InferenceTableSnapshot --- crates/hir_ty/src/infer/unify.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/hir_ty/src/infer/unify.rs b/crates/hir_ty/src/infer/unify.rs index 21b48b9d80..8a6c34b493 100644 --- a/crates/hir_ty/src/infer/unify.rs +++ b/crates/hir_ty/src/infer/unify.rs @@ -140,7 +140,8 @@ pub(crate) struct InferenceTable<'a> { pub(crate) struct InferenceTableSnapshot { var_table_snapshot: chalk_solve::infer::InferenceSnapshot, - // FIXME: snapshot type_variable_table, pending_obligations? + // FIXME: snapshot pending_obligations? + type_variable_table_snapshot: Vec, } impl<'a> InferenceTable<'a> { @@ -356,12 +357,14 @@ impl<'a> InferenceTable<'a> { } pub(crate) fn snapshot(&mut self) -> InferenceTableSnapshot { - let snapshot = self.var_unification_table.snapshot(); - InferenceTableSnapshot { var_table_snapshot: snapshot } + let var_table_snapshot = self.var_unification_table.snapshot(); + let type_variable_table_snapshot = self.type_variable_table.clone(); + InferenceTableSnapshot { var_table_snapshot, type_variable_table_snapshot } } pub(crate) fn rollback_to(&mut self, snapshot: InferenceTableSnapshot) { self.var_unification_table.rollback_to(snapshot.var_table_snapshot); + self.type_variable_table = snapshot.type_variable_table_snapshot; } /// Checks an obligation without registering it. Useful mostly to check