diff options
Diffstat (limited to 'src/semantic/translate.rs')
-rw-r--r-- | src/semantic/translate.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/semantic/translate.rs b/src/semantic/translate.rs index 57581a4..5e68f36 100644 --- a/src/semantic/translate.rs +++ b/src/semantic/translate.rs @@ -59,4 +59,18 @@ impl<F: frame::Frame> Translate<F> { _ => panic!("Can't make binop from Void"), } } + + pub fn alloc_local<'a>(&mut self, + level: &mut Level<'a, F>, + escapes: frame::Escape) -> Expression { + match level { + &mut Level::Top => { + panic!("Can't allocate in toplevel frame") + }, + &mut Level::Level { parent: _, ref mut frame, .. } => { + let access = frame.alloc_local(&mut self.temp, escapes); + Expression::Exp(frame.location_to_exp(access)) + } + } + } } |