use crate::*; use semantic::*; use std::collections::HashMap; pub struct Environment { pub scopes: Vec, } impl Environment { pub fn get_integer(&self, name: &str) -> Result { for scope in self.scopes.iter().rev() { if let Ok(value) = scope.get_integer(name, &self) { return Ok(value); } } return Err(()); } pub fn get_block(&self, name: &str) -> Result { for scope in self.scopes.iter().rev() { if let Ok(value) = scope.get_block(name, &self) { return Ok(value); } } return Err(()); } } pub struct Scope { pub definitions: HashMap, } impl Scope { pub fn get_integer(&self, _name: &str, _environment: &Environment) -> Result { todo!() // use semantic::IntegerDefinition as IntDef; // if let Some(Definition { variant, ..}) = self.definitions.get(name) { // if let IntegerDefinition::Integer(integer) = definition { // match integer { // IntDef::Literal(value) => return Ok(*value), // IntDef::ConstantExpression(expr) => match expr.evaluate(environment) { // Ok(_) | Err(_) => todo!(), // }, // }; // } // } // return Err(()); } pub fn get_block(&self, _name: &str, _environment: &Environment) -> Result { todo!() } }