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 util;
|
||||
pub mod vm;
|
||||
pub mod ir;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user