use std::collections::HashMap;
use super::*;
use crate::reader::{Offset, Reader};
use crate::value::RefValue;
pub struct Runtime {
pub reader: Reader,
pub memo: HashMap<(usize, usize), (Offset, Result<Accept, Reject>)>, pub stack: Vec<Capture>,
pub debug: u8, }
impl Runtime {
pub fn new(reader: Reader) -> Self {
Self {
reader,
memo: HashMap::new(),
stack: Vec::new(),
debug: if let Ok(level) = std::env::var("TOKAY_DEBUG") {
level.parse::<u8>().unwrap_or_default()
} else {
0
},
}
}
pub fn load_stack(&mut self, stack: Vec<RefValue>) {
for item in stack {
self.stack.push(Capture::Value(item, None, 0));
}
}
pub fn save_stack(&mut self) -> Vec<RefValue> {
self.stack.drain(..).map(|item| item.get_value()).collect()
}
pub fn reset(&mut self) {
self.memo.clear();
self.stack.clear();
}
}