static_graph/resolver/
rir.rs1use std::sync::Arc;
2
3use crate::{
4 codegen::ty::{Adt, CodegenTy},
5 symbol::{DefId, Ident, TagId},
6};
7
8#[derive(Debug, PartialEq, Eq, Clone)]
9pub struct Graph {
10 pub name: Ident,
11 pub entry_node: DefId,
12}
13
14#[derive(Debug, PartialEq, Eq, Clone)]
15pub struct Node {
16 pub name: Ident,
17 pub to_nodes: Vec<DefId>,
18 pub fields: Vec<Arc<Field>>,
19}
20
21#[derive(Debug, PartialEq, Eq, Clone)]
22pub struct Field {
23 pub name: Ident,
24 pub ty: Type,
25 pub tag_id: TagId,
26}
27
28#[derive(Debug, PartialEq, Eq, Clone)]
29pub struct Path {
30 pub segments: Arc<[Ident]>,
31}
32
33#[derive(Debug, PartialEq, Eq, Clone)]
34pub enum Type {
35 String,
36 Void,
37 U8,
38 Bool,
39 Bytes,
40 I8,
41 I16,
42 I32,
43 I64,
44 F64,
45 Vec(Arc<Type>),
46 Set(Arc<Type>),
47 Map(Arc<Type>, Arc<Type>),
48 ArcSwap(Arc<Type>),
49 Path(Path),
50}
51
52impl Type {
53 pub fn to_codegen_ty(&self) -> CodegenTy {
54 match self {
55 Type::String => CodegenTy::String,
56 Type::Void => CodegenTy::Void,
57 Type::U8 => CodegenTy::U8,
58 Type::Bool => CodegenTy::Bool,
59 Type::Bytes => CodegenTy::Bytes,
60 Type::I8 => CodegenTy::I8,
61 Type::I16 => CodegenTy::I16,
62 Type::I32 => CodegenTy::I32,
63 Type::I64 => CodegenTy::I64,
64 Type::F64 => CodegenTy::F64,
65 Type::Vec(ty) => CodegenTy::Vec(Arc::from(ty.to_codegen_ty())),
66 Type::Set(ty) => CodegenTy::Set(Arc::from(ty.to_codegen_ty())),
67 Type::Map(k, v) => {
68 CodegenTy::Map(Arc::from(k.to_codegen_ty()), Arc::from(v.to_codegen_ty()))
69 }
70 Type::ArcSwap(ty) => CodegenTy::ArcSwap(Arc::from(ty.to_codegen_ty())),
71 Type::Path(p) => CodegenTy::Adt(Adt {
72 segments: p.segments.clone(),
73 }),
74 }
75 }
76}