summaryrefslogtreecommitdiff
path: root/src/semantic
diff options
context:
space:
mode:
authorDavid Li <li.davidm96@gmail.com>2017-11-07 16:59:14 -0500
committerDavid Li <li.davidm96@gmail.com>2017-11-07 16:59:14 -0500
commit21ad9744c006d25d8d8ac3aa58d8ec4205893dc0 (patch)
tree375a774ec268c481837c06d87e2094534f5b3726 /src/semantic
parent4c6fd6e670264b01a84ee76e99e28d6be7789f1a (diff)
Add datatypes for IR
Diffstat (limited to 'src/semantic')
-rw-r--r--src/semantic/ir.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/semantic/ir.rs b/src/semantic/ir.rs
new file mode 100644
index 0000000..deeed96
--- /dev/null
+++ b/src/semantic/ir.rs
@@ -0,0 +1,23 @@
+use super::temp;
+
+pub enum Binop {
+ Plus,
+}
+
+pub enum Expression {
+ Const(u64),
+ Name(temp::TempLabel),
+ Temp(temp::TempName),
+ Binop(Binop, Box<Expression>, Box<Expression>),
+ Memory(Box<Expression>),
+ Call(Box<Expression>, Vec<Expression>),
+ Seq(Vec<Statement>, Box<Expression>),
+}
+
+pub enum Statement {
+ Exp(Expression),
+ MoveTemp(temp::TempName, Expression),
+ MoveMem(Expression, Expression),
+ Seq(Box<Statement>, Box<Statement>),
+ Label(temp::TempLabel),
+}