luaur_analysis/methods/
subtyping_unifier_dispatch_constraints.rs1use crate::enums::unify_result::UnifyResult;
4use crate::records::constraint::Constraint;
5use crate::records::result::Result;
6use crate::records::subtyping_unifier::SubtypingUnifier;
7use crate::type_aliases::constraint_v::ConstraintV;
8use crate::type_aliases::upper_bounds::UpperBounds;
9use alloc::vec::Vec;
10
11impl SubtypingUnifier {
12 pub fn dispatch_constraints(
13 &self,
14 constraint: *const Constraint,
15 assumed_constraints: Vec<ConstraintV>,
16 ) -> Result {
17 let mut unifier_res = UnifyResult::Ok;
18 let mut outstanding_constraints: Vec<ConstraintV> = Vec::new();
21 outstanding_constraints.reserve(assumed_constraints.len());
22 let mut upper_bounds: UpperBounds = UpperBounds::new(core::ptr::null());
23 for cv in assumed_constraints {
24 let (unified, dispatched) =
25 self.dispatch_one_constraint(constraint, &cv, &mut upper_bounds);
26 unifier_res &= unified;
27 if !dispatched {
28 outstanding_constraints.push(cv);
29 }
30 }
31 Result {
32 unified: unifier_res,
33 outstanding_constraints,
34 upper_bound_contributors: upper_bounds,
35 }
36 }
37}