@@ -909,14 +909,9 @@ impl<'forest, C: Context + 'forest, CO: ContextOps<C> + 'forest> SolveState<'for
909
909
// we might have to build on it (see the
910
910
// Delayed Trivial Self Cycle, Variant 3
911
911
// example).
912
- let ( _, _, _, table_goal) = self
913
- . context
914
- . instantiate_ucanonical_goal ( & self . forest . tables [ table] . table_goal ) ;
915
912
916
913
let answer = self . forest . answer ( table, answer_index) ;
917
- if let Some ( strand) =
918
- self . create_refinement_strand ( table, answer, table_goal)
919
- {
914
+ if let Some ( strand) = self . create_refinement_strand ( table, answer) {
920
915
self . forest . tables [ table] . enqueue_strand ( strand) ;
921
916
}
922
917
@@ -964,7 +959,6 @@ impl<'forest, C: Context + 'forest, CO: ContextOps<C> + 'forest> SolveState<'for
964
959
& self ,
965
960
table : TableIndex ,
966
961
answer : & Answer < C > ,
967
- table_goal : C :: Goal ,
968
962
) -> Option < CanonicalStrand < C > > {
969
963
// If there are no delayed subgoals, then there is no need for
970
964
// a refinement strand.
@@ -977,16 +971,8 @@ impl<'forest, C: Context + 'forest, CO: ContextOps<C> + 'forest> SolveState<'for
977
971
. context
978
972
. instantiate_answer_subst ( num_universes, & answer. subst ) ;
979
973
980
- // FIXME: it would be nice if these delayed subgoals didn't get added to the answer
981
- // at all. However, we can't compare the delayed subgoals with the table goal until
982
- // we call `canonicalize_answer_subst` in `pursue_answer`. However, at this point,
983
- // it's a bit late since `pursue_answer` doesn't know about the table goal. This could
984
- // be refactored a bit.
985
- let filtered_delayed_subgoals = delayed_subgoals
974
+ let delayed_subgoals = delayed_subgoals
986
975
. into_iter ( )
987
- . filter ( |delayed_subgoal| {
988
- * C :: goal_from_goal_in_environment ( delayed_subgoal) != table_goal
989
- } )
990
976
. map ( Literal :: Positive )
991
977
. collect ( ) ;
992
978
@@ -996,7 +982,7 @@ impl<'forest, C: Context + 'forest, CO: ContextOps<C> + 'forest> SolveState<'for
996
982
subst,
997
983
ambiguous : answer. ambiguous ,
998
984
constraints,
999
- subgoals : filtered_delayed_subgoals ,
985
+ subgoals : delayed_subgoals ,
1000
986
delayed_subgoals : Vec :: new ( ) ,
1001
987
answer_time : TimeStamp :: default ( ) ,
1002
988
floundered_subgoals : Vec :: new ( ) ,
@@ -1328,11 +1314,23 @@ impl<'forest, C: Context + 'forest, CO: ContextOps<C> + 'forest> SolveState<'for
1328
1314
return None ;
1329
1315
}
1330
1316
1317
+ let table_goal = & self . forest . tables [ table] . table_goal ;
1318
+
1319
+ //FIXME: Avoid double canonicalization
1320
+ let filtered_delayed_subgoals = delayed_subgoals
1321
+ . into_iter ( )
1322
+ . filter ( |delayed_subgoal| {
1323
+ let ( canonicalized, _) =
1324
+ infer. fully_canonicalize_goal ( self . context . interner ( ) , delayed_subgoal) ;
1325
+ * table_goal != canonicalized
1326
+ } )
1327
+ . collect ( ) ;
1328
+
1331
1329
let subst = infer. canonicalize_answer_subst (
1332
1330
self . context . interner ( ) ,
1333
1331
subst,
1334
1332
constraints,
1335
- delayed_subgoals ,
1333
+ filtered_delayed_subgoals ,
1336
1334
) ;
1337
1335
debug ! ( "answer: table={:?}, subst={:?}" , table, subst) ;
1338
1336
0 commit comments