@@ -3,7 +3,7 @@ use std::sync::Arc;
3
3
4
4
use base_db:: CrateId ;
5
5
use chalk_ir:: cast:: Cast ;
6
- use chalk_solve:: Solver ;
6
+ use chalk_solve:: { logging_db :: LoggingRustIrDatabase , Solver } ;
7
7
use hir_def:: { lang_item:: LangItemTarget , TraitId } ;
8
8
9
9
use crate :: { db:: HirDatabase , DebruijnIndex , Substs } ;
@@ -166,23 +166,36 @@ fn solve(
166
166
}
167
167
remaining > 0
168
168
} ;
169
+
169
170
let mut solve = || {
170
- let solution = solver. solve_limited ( & context, goal, should_continue) ;
171
- log:: debug!( "solve({:?}) => {:?}" , goal, solution) ;
172
- solution
171
+ if is_chalk_print ( ) {
172
+ let logging_db = LoggingRustIrDatabase :: new ( context) ;
173
+ let solution = solver. solve_limited ( & logging_db, goal, should_continue) ;
174
+ log:: debug!( "chalk program:\n {}" , logging_db) ;
175
+ solution
176
+ } else {
177
+ solver. solve_limited ( & context, goal, should_continue)
178
+ }
173
179
} ;
180
+
174
181
// don't set the TLS for Chalk unless Chalk debugging is active, to make
175
182
// extra sure we only use it for debugging
176
183
let solution =
177
184
if is_chalk_debug ( ) { chalk:: tls:: set_current_program ( db, solve) } else { solve ( ) } ;
178
185
186
+ log:: debug!( "solve({:?}) => {:?}" , goal, solution) ;
187
+
179
188
solution
180
189
}
181
190
182
191
fn is_chalk_debug ( ) -> bool {
183
192
std:: env:: var ( "CHALK_DEBUG" ) . is_ok ( )
184
193
}
185
194
195
+ fn is_chalk_print ( ) -> bool {
196
+ std:: env:: var ( "CHALK_PRINT" ) . is_ok ( )
197
+ }
198
+
186
199
fn solution_from_chalk (
187
200
db : & dyn HirDatabase ,
188
201
solution : chalk_solve:: Solution < Interner > ,
0 commit comments