use crate::*;

#[derive(Clone, PartialEq, Eq, Debug)]
pub enum FrameState {
  Running,
  Suspended,
  Completed,
}

#[derive(Clone)]
pub struct Frame {
  plan: Plan,
  ip: usize,               // next instruction
  locals: SymbolTableRef,  // for subroutine variables
  out: Option<Value>,      // optional coroutine return
  state: FrameState,       // Running, Suspended, Completed
}

#[derive(Clone)]
pub struct Stack {
  frames: Vec<Frame>,
}