diff options
author | David Li <li.davidm96@gmail.com> | 2017-11-26 19:59:00 -0500 |
---|---|---|
committer | David Li <li.davidm96@gmail.com> | 2017-11-26 19:59:00 -0500 |
commit | 01daee374a299646c595dd245c8e4a4990769002 (patch) | |
tree | d4f749c94afbed1143613977958b3216653f4393 /src/semantic/translate.rs | |
parent | b007bc6f9dcbef41c3710cc8ce63b04504a14244 (diff) |
Translate variable bindings
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)) + } + } + } } |