flux_middle/
cstore.rs

1use std::rc::Rc;
2
3use rustc_hir::def_id::CrateNum;
4use rustc_span::def_id::DefId;
5
6use crate::{def_id::FluxDefId, queries::QueryResult, rty};
7
8pub type OptResult<T> = Option<QueryResult<T>>;
9
10pub trait CrateStore {
11    fn fn_sig(&self, def_id: DefId) -> OptResult<rty::EarlyBinder<rty::PolyFnSig>>;
12    fn adt_def(&self, def_id: DefId) -> OptResult<rty::AdtDef>;
13    fn adt_sort_def(&self, def_id: DefId) -> OptResult<rty::AdtSortDef>;
14    fn generics_of(&self, def_id: DefId) -> OptResult<rty::Generics>;
15    fn refinement_generics_of(
16        &self,
17        def_id: DefId,
18    ) -> OptResult<rty::EarlyBinder<rty::RefinementGenerics>>;
19    fn item_bounds(&self, def_id: DefId) -> OptResult<rty::EarlyBinder<rty::Clauses>>;
20    fn predicates_of(&self, def_id: DefId) -> OptResult<rty::EarlyBinder<rty::GenericPredicates>>;
21    fn assoc_refinements_of(&self, def_id: DefId) -> OptResult<rty::AssocRefinements>;
22    fn constant_info(&self, def_id: DefId) -> OptResult<rty::ConstantInfo>;
23    fn assoc_refinements_def(&self, key: FluxDefId) -> OptResult<rty::EarlyBinder<rty::Lambda>>;
24    fn default_assoc_refinements_def(
25        &self,
26        key: FluxDefId,
27    ) -> OptResult<Option<rty::EarlyBinder<rty::Lambda>>>;
28    fn sort_of_assoc_reft(&self, key: FluxDefId) -> OptResult<rty::EarlyBinder<rty::FuncSort>>;
29    fn variants(
30        &self,
31        def_id: DefId,
32    ) -> OptResult<rty::Opaqueness<rty::EarlyBinder<rty::PolyVariants>>>;
33    fn type_of(&self, def_id: DefId) -> OptResult<rty::EarlyBinder<rty::TyOrCtor>>;
34    fn normalized_defns(&self, krate: CrateNum) -> Rc<rty::NormalizedDefns>;
35    fn func_sort(&self, def_id: FluxDefId) -> Option<rty::PolyFuncSort>;
36}
37
38pub type CrateStoreDyn = dyn CrateStore;