mirror of
https://github.com/Noratrieb/crapderive.git
synced 2026-01-16 01:25:05 +01:00
compile some things
This commit is contained in:
parent
9253e6036c
commit
4037fadd51
4 changed files with 70 additions and 29 deletions
38
src/ir.rs
38
src/ir.rs
|
|
@ -40,6 +40,7 @@ pub enum Stmt {
|
|||
Mul { to: Place, value: Value },
|
||||
Div { to: Place, value: Value },
|
||||
Jmp { to: Location },
|
||||
Je { to: Location },
|
||||
Cmp { lhs: Value, rhs: Value },
|
||||
}
|
||||
|
||||
|
|
@ -64,11 +65,42 @@ impl CompileCtx {
|
|||
let to = self.compile_place(to)?;
|
||||
let stmt = Stmt::Mov { from, to };
|
||||
self.stmts.push(stmt);
|
||||
self.spans.push(p_stmt.span);
|
||||
}
|
||||
_ => todo!("other stmt"),
|
||||
StmtKind::Add { to, value } => {
|
||||
let to = self.compile_place(to)?;
|
||||
let value = self.compile_value(value)?;
|
||||
let stmt = Stmt::Add { to, value };
|
||||
self.stmts.push(stmt);
|
||||
}
|
||||
StmtKind::Sub { to, value } => {
|
||||
let to = self.compile_place(to)?;
|
||||
let value = self.compile_value(value)?;
|
||||
let stmt = Stmt::Sub { to, value };
|
||||
self.stmts.push(stmt);
|
||||
}
|
||||
StmtKind::Mul { to, value } => {
|
||||
let to = self.compile_place(to)?;
|
||||
let value = self.compile_value(value)?;
|
||||
let stmt = Stmt::Mul { to, value };
|
||||
self.stmts.push(stmt);
|
||||
}
|
||||
StmtKind::Div { to, value } => {
|
||||
let to = self.compile_place(to)?;
|
||||
let value = self.compile_value(value)?;
|
||||
let stmt = Stmt::Div { to, value };
|
||||
self.stmts.push(stmt);
|
||||
}
|
||||
StmtKind::Jmp { .. } => todo!("jmp"),
|
||||
StmtKind::Je { .. } => todo!("je"),
|
||||
StmtKind::Cmp { lhs, rhs } => {
|
||||
let lhs = self.compile_value(lhs)?;
|
||||
let rhs = self.compile_value(rhs)?;
|
||||
let stmt = Stmt::Cmp { lhs, rhs };
|
||||
self.stmts.push(stmt);
|
||||
}
|
||||
StmtKind::Label { .. } => {}
|
||||
}
|
||||
|
||||
self.spans.push(p_stmt.span);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue