lemonlang 0.0.3

an experimental, modern, purely safe, programming language.
use rustc_hash::FxHashMap;

use crate::ir::{self};
#[derive(Debug, Clone)]

pub struct Frame {
	pub locals: FxHashMap<String, ir::IrBasicValue>,
	pub blocks: Vec<ir::IrBlock>,
	pub fn_name: String,
	pub stack: Vec<ir::IrBasicValue>,
	pub index: usize,
}

impl Frame {
	pub fn new(fn_name: &str) -> Self {
		Self {
			locals: FxHashMap::default(),
			blocks: Vec::new(),
			stack: Vec::new(),
			index: 0,
			fn_name: fn_name.to_string(),
		}
	}

	pub fn push(&mut self, value: ir::IrBasicValue) {
		self.stack.push(value);
	}
	pub fn pop(&mut self) -> ir::IrBasicValue {
		self.stack.pop().unwrap()
	}
	pub fn get(&self, name: &str) -> Option<ir::IrBasicValue> {
		self.locals.get(name).cloned()
	}
	pub fn set(&mut self, name: &str, value: ir::IrBasicValue) {
		self.locals.insert(name.to_string(), value);
	}
}