use crate::records::annotation_types_at_location::AnnotationTypesAtLocation;
use crate::records::dcr_logger::DcrLogger;
use crate::records::expr_types_at_location::ExprTypesAtLocation;
use crate::type_aliases::module_ptr_module::ModulePtr;
impl DcrLogger {
pub fn capture_generation_module(&mut self, module: ModulePtr) {
let module_ref = &*module;
self.generation_log
.expr_type_locations
.reserve(module_ref.ast_types.size());
for (expr, ty) in module_ref.ast_types.iter() {
let expr = *expr;
let mut tys = ExprTypesAtLocation {
location: unsafe { (*expr).base.location },
ty: *ty,
expected_ty: None,
};
if let Some(expected_ty) = module_ref.ast_expected_types.find(&expr) {
tys.expected_ty = Some(*expected_ty);
}
self.generation_log.expr_type_locations.push(tys);
}
self.generation_log
.annotation_type_locations
.reserve(module_ref.ast_resolved_types.size());
for (annot, ty) in module_ref.ast_resolved_types.iter() {
let annot = *annot;
let tys = AnnotationTypesAtLocation {
location: unsafe { (*annot).base.location },
resolved_ty: *ty,
};
self.generation_log.annotation_type_locations.push(tys);
}
}
}