@@ -225,33 +225,7 @@ impl LowerProgram for Program {
225
225
}
226
226
}
227
227
228
- // Construct the set of *clauses*; these are sort of a compiled form
229
- // of the data above that always has the form:
230
- //
231
- // forall P0...Pn. Something :- Conditions
232
- let mut program_clauses = vec ! [ ] ;
233
-
234
- for struct_datum in struct_data. values ( ) {
235
- program_clauses. extend ( struct_datum. to_program_clauses ( ) ) ;
236
- }
237
-
238
- for trait_datum in trait_data. values ( ) {
239
- program_clauses. extend ( trait_datum. to_program_clauses ( ) ) ;
240
- }
241
-
242
- for ( & id, associated_ty_datum) in & associated_ty_data {
243
- program_clauses. extend ( associated_ty_datum. to_program_clauses ( id) ) ;
244
- }
245
-
246
- for impl_datum in impl_data. values ( ) {
247
- program_clauses. push ( impl_datum. to_program_clause ( ) ) ;
248
-
249
- for atv in & impl_datum. binders . value . associated_ty_values {
250
- program_clauses. extend ( atv. to_program_clauses ( impl_datum) ) ;
251
- }
252
- }
253
-
254
- Ok ( ir:: Program { type_ids, type_kinds, trait_data, impl_data, associated_ty_data, program_clauses } )
228
+ Ok ( ir:: Program { type_ids, type_kinds, struct_data, trait_data, impl_data, associated_ty_data, } )
255
229
}
256
230
}
257
231
@@ -882,6 +856,34 @@ impl LowerQuantifiedGoal for Goal {
882
856
}
883
857
}
884
858
859
+ impl ir:: Program {
860
+ pub fn environment ( & self ) -> ir:: ProgramEnvironment {
861
+ // Construct the set of *clauses*; these are sort of a compiled form
862
+ // of the data above that always has the form:
863
+ //
864
+ // forall P0...Pn. Something :- Conditions
865
+ let mut program_clauses = vec ! [ ] ;
866
+
867
+ program_clauses. extend ( self . struct_data . values ( ) . flat_map ( |d| d. to_program_clauses ( ) ) ) ;
868
+ program_clauses. extend ( self . trait_data . values ( ) . flat_map ( |d| d. to_program_clauses ( ) ) ) ;
869
+ program_clauses. extend ( self . associated_ty_data . iter ( ) . flat_map ( |( & id, d) | {
870
+ d. to_program_clauses ( id)
871
+ } ) ) ;
872
+
873
+ for datum in self . impl_data . values ( ) {
874
+ program_clauses. push ( datum. to_program_clause ( ) ) ;
875
+ program_clauses. extend ( datum. binders . value . associated_ty_values . iter ( ) . flat_map ( |atv| {
876
+ atv. to_program_clauses ( datum)
877
+ } ) ) ;
878
+ }
879
+
880
+ let trait_data = self . trait_data . clone ( ) ;
881
+ let associated_ty_data = self . associated_ty_data . clone ( ) ;
882
+
883
+ ir:: ProgramEnvironment { trait_data, associated_ty_data, program_clauses }
884
+ }
885
+ }
886
+
885
887
impl ir:: ImplDatum {
886
888
/// Given `impl<T: Clone> Clone for Vec<T>`, generate:
887
889
///
0 commit comments