crosslang/tsm-lean/TsmLean/Compile/Compile.lean
Maximus Gorog bd2e14214d Add 'tsm-lean/' from commit '2e9061abead6f2daa464b39a79c17a949db30785'
git-subtree-dir: tsm-lean
git-subtree-mainline: 6592cd058d
git-subtree-split: 2e9061abea
2026-05-12 02:59:14 -06:00

27 lines
852 B
Text

import TsmLean.Compile.Source
import TsmLean.Core.Syntax
namespace TsmLean.Compile
open TsmLean.Core (Instr Code)
/-- Compile a source expression to TSM bytecode, with the output
placed at absolute address `offset` in the final assembled code.
Jumps (in `ifte`) reference absolute addresses. -/
def compile : (offset : Nat) → Source.Expr → Code
| _, .intLit n => #[.push n]
| _, .boolLit b => #[.pushB b]
| offset, .add e1 e2 =>
let c1 := compile offset e1
let c2 := compile (offset + c1.size) e2
c1 ++ c2 ++ #[.add]
| offset, .sub e1 e2 =>
let c1 := compile offset e1
let c2 := compile (offset + c1.size) e2
c1 ++ c2 ++ #[.sub]
| offset, .mul e1 e2 =>
let c1 := compile offset e1
let c2 := compile (offset + c1.size) e2
c1 ++ c2 ++ #[.mul]
end TsmLean.Compile