Sketching out IR structs/enums.
This commit is contained in:
parent
9731bb38fe
commit
36e28ae4a9
199
src/ir/mod.rs
Normal file
199
src/ir/mod.rs
Normal file
@ -0,0 +1,199 @@
|
|||||||
|
pub enum DvmIr {
|
||||||
|
Struct(Box<DvmIrStruct>),
|
||||||
|
Function(DvmIrFunction),
|
||||||
|
Const(DvmIrConst),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrStruct {
|
||||||
|
name: String,
|
||||||
|
kind: Box<DvmIrKind>,
|
||||||
|
is_public: bool,
|
||||||
|
members: Vec<Box<DvmIrStructMember>>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrStructMember {
|
||||||
|
name: String,
|
||||||
|
kind: Box<DvmIrKind>,
|
||||||
|
is_public: bool,
|
||||||
|
is_mut: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrKind {
|
||||||
|
Primitive(Box<DvmIrPrimitiveKind>),
|
||||||
|
Struct(Box<DvmIrStructKind>),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrPrimitiveKind {
|
||||||
|
I8,
|
||||||
|
I16,
|
||||||
|
I32,
|
||||||
|
I64,
|
||||||
|
I128,
|
||||||
|
ISize,
|
||||||
|
U8,
|
||||||
|
U16,
|
||||||
|
U32,
|
||||||
|
U64,
|
||||||
|
U128,
|
||||||
|
USize,
|
||||||
|
Boolean,
|
||||||
|
Array(Box<DvmIrKind>),
|
||||||
|
String,
|
||||||
|
Closure(Box<DvmIrClosureKind>),
|
||||||
|
Ref(Box<DvmIrKind>),
|
||||||
|
Void,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrStructKind {
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrClosureKind {
|
||||||
|
captures_name: String,
|
||||||
|
parameters: Vec<Box<DvmIrKind>>,
|
||||||
|
return_type: Box<DvmIrKind>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrFunction {
|
||||||
|
name: String,
|
||||||
|
parameters: Vec<Box<DvmIrKind>>,
|
||||||
|
return_type: Box<DvmIrKind>,
|
||||||
|
statements: Vec<Box<DvmIrStatement>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrStatement {
|
||||||
|
Alloc(DvmIrAlloc),
|
||||||
|
Call(DvmIrCallStmt),
|
||||||
|
Ret(DvmIrRet),
|
||||||
|
Assign(DvmIrAssign),
|
||||||
|
MakeClosure(DvmIrMakeClosure),
|
||||||
|
Drop(DvmIrDrop),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrAllocable {
|
||||||
|
Struct(Box<DvmIrStructKind>),
|
||||||
|
Array(Box<DvmIrArrayKind>),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrArrayKind {
|
||||||
|
StaticSize(Box<DvmIrStaticArrayKind>),
|
||||||
|
DynamicSize(Box<DvmIrDynamicArrayKind>)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrStaticArrayKind {
|
||||||
|
inner_kind: Box<DvmIrKind>,
|
||||||
|
size: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrDynamicArrayKind {
|
||||||
|
inner_kind: Box<DvmIrKind>,
|
||||||
|
size_expr: Box<DvmIrExpr>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrAlloc {
|
||||||
|
declared_kind: Box<DvmIrAllocable>,
|
||||||
|
name: String,
|
||||||
|
kind_to_alloc: Box<DvmIrAllocable>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrConst {
|
||||||
|
String(DvmIrStringConst),
|
||||||
|
StringArray(DvmIrStringArrayConst),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrStringConst {
|
||||||
|
name: String,
|
||||||
|
value: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrStringArrayConst {
|
||||||
|
name: String,
|
||||||
|
value: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrExpr {
|
||||||
|
Call(Box<DvmIrCallExpr>),
|
||||||
|
Variable(Box<DvmIrVariable>),
|
||||||
|
ConstRef(Box<DvmIrConstRef>),
|
||||||
|
Literal(Box<DvmIrLiteral>)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrVariable {
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrConstRef {
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrLiteral {
|
||||||
|
I8(i8),
|
||||||
|
I16(i16),
|
||||||
|
I32(i32),
|
||||||
|
I64(i64),
|
||||||
|
I128(i128),
|
||||||
|
ISize(isize),
|
||||||
|
U8(u8),
|
||||||
|
U16(u16),
|
||||||
|
U32(u32),
|
||||||
|
U64(u64),
|
||||||
|
U128(u128),
|
||||||
|
USize(usize),
|
||||||
|
Boolean(bool),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrCallStmt {
|
||||||
|
declared_type: Box<DvmIrKind>,
|
||||||
|
name: String,
|
||||||
|
call_expr: Box<DvmIrCallExpr>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrCallExpr {
|
||||||
|
name: String,
|
||||||
|
arguments: Vec<Box<DvmIrExpr>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrAssign {
|
||||||
|
lhs: Box<DvmIrAssignLhs>,
|
||||||
|
rhs: Box<DvmIrExpr>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrAssignLhs {
|
||||||
|
base: Box<DvmIrVariable>,
|
||||||
|
suffixes: Vec<Box<DvmIrAssignLhsSuffix>>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrAssignLhsSuffix {
|
||||||
|
Index(DvmIrAssignLhsIndex),
|
||||||
|
Property(DvmIrAssignLhsProperty)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrAssignLhsIndex {
|
||||||
|
expr: Box<DvmIrExpr>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrAssignLhsProperty {
|
||||||
|
name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrRet {
|
||||||
|
value: Box<DvmIrReturnable>
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum DvmIrReturnable {
|
||||||
|
Variable(DvmIrVariable),
|
||||||
|
Literal(DvmIrLiteral)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrMakeClosure {
|
||||||
|
captures_kind: Option<Box<DvmIrStructKind>>,
|
||||||
|
parameters: Vec<Box<DvmIrKind>>,
|
||||||
|
return_type: Box<DvmIrKind>,
|
||||||
|
name: String,
|
||||||
|
fn_name: String,
|
||||||
|
captures_variable: Box<DvmIrVariable>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct DvmIrDrop {
|
||||||
|
variable: Box<DvmIrVariable>,
|
||||||
|
}
|
||||||
@ -11,3 +11,4 @@ pub mod parser;
|
|||||||
pub mod std_core;
|
pub mod std_core;
|
||||||
pub mod util;
|
pub mod util;
|
||||||
pub mod vm;
|
pub mod vm;
|
||||||
|
pub mod ir;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user