From 4c6fd6e670264b01a84ee76e99e28d6be7789f1a Mon Sep 17 00:00:00 2001 From: David Li Date: Tue, 7 Nov 2017 16:50:39 -0500 Subject: Add stub of frame module --- src/semantic/frame.rs | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/semantic/frame.rs (limited to 'src/semantic/frame.rs') diff --git a/src/semantic/frame.rs b/src/semantic/frame.rs new file mode 100644 index 0000000..ddfc330 --- /dev/null +++ b/src/semantic/frame.rs @@ -0,0 +1,44 @@ +use super::temp; + +pub enum Location { + InFrame { + offset: usize, + }, + Register(temp::TempName), +} + +pub enum Escape { + No, + Yes, +} + +pub trait Frame { + fn new(name: temp::TempLabel, formals: Vec) -> Self; + fn name(&self) -> temp::TempLabel; + fn formals(&self) -> &[Location]; + fn alloc_local(&mut self, escapes: Escape) -> Location; +} + +pub struct Amd64Frame { + name: temp::TempLabel, +} + +impl Frame for Amd64Frame { + fn new(name: temp::TempLabel, formals: Vec) -> Self { + Amd64Frame { + name, + } + } + + fn name(&self) -> temp::TempLabel { + self.name + } + + fn formals(&self) -> &[Location] { + unimplemented!(); + } + + fn alloc_local(&mut self, escapes: Escape) -> Location { + unimplemented!(); + } +} -- cgit v1.2.3