1use crate::environment::{Environment, ValueCell};
2
3#[derive(Debug, Clone)]
4pub struct Frame {
5 env: Environment,
6 return_value: Option<ValueCell>,
7}
8
9impl Frame {
10 pub fn new() -> Self {
11 Frame {
12 env: Environment::new(),
13 return_value: None,
14 }
15 }
16
17 pub fn from_env(env: Environment) -> Self {
18 Frame {
19 env,
20 return_value: None,
21 }
22 }
23
24 pub fn get_env(&self) -> &Environment {
25 &self.env
26 }
27
28 pub fn get_env_mut(&mut self) -> &mut Environment {
29 &mut self.env
30 }
31
32 pub fn set_return_value(&mut self, value: ValueCell) {
33 self.return_value = Some(value);
34 }
35
36 pub fn get_return_value(&self) -> Option<&ValueCell> {
37 self.return_value.as_ref()
38 }
39
40 pub fn clear_return_value(&mut self) {
41 self.return_value = None;
42 }
43}
44
45impl Default for Frame {
46 fn default() -> Self {
47 Self::new()
48 }
49}