dada_ir_sym/check/
generics.rs1use dada_ir_ast::ast::{AstWhereClause, AstWhereClauseKind};
2
3use crate::ir::generics::{SymWhereClause, SymWhereClauseKind};
4
5use super::{CheckTyInEnv, env::Env};
6
7pub async fn symbolify_ast_where_clause<'db>(
8 env: &mut Env<'db>,
9 ast_where_clause: AstWhereClause<'db>,
10 output: &mut Vec<SymWhereClause<'db>>,
11) {
12 let db = env.db();
13 let subject = ast_where_clause.subject(db).check_in_env(env).await;
14 let mut push_kind =
15 |kind: SymWhereClauseKind| output.push(SymWhereClause::new(db, subject, kind));
16
17 for kind in ast_where_clause.kinds(db) {
18 match kind {
19 AstWhereClauseKind::Reference(_) => {
20 push_kind(SymWhereClauseKind::Shared);
21 push_kind(SymWhereClauseKind::Lent);
22 }
23 AstWhereClauseKind::Mutable(_) => {
24 push_kind(SymWhereClauseKind::Unique);
25 push_kind(SymWhereClauseKind::Lent);
26 }
27 AstWhereClauseKind::Shared(_) => {
28 push_kind(SymWhereClauseKind::Shared);
29 }
30 AstWhereClauseKind::Owned(_) => {
31 push_kind(SymWhereClauseKind::Owned);
32 }
33 AstWhereClauseKind::Lent(_) => {
34 push_kind(SymWhereClauseKind::Lent);
35 }
36 AstWhereClauseKind::Unique(_) => {
37 push_kind(SymWhereClauseKind::Unique);
38 }
39 }
40 }
41}