use crate::location::Location; use crate::typecheck::typedef::Type; use crate::top_level::DefinitionId; use rustpython_parser::ast::Expr; #[derive(Clone, PartialEq)] pub enum SymbolValue { I32(i32), I64(i64), Double(f64), Bool(bool), Tuple(Vec), // we should think about how to implement bytes later... // Bytes(&'a [u8]), } pub trait SymbolResolver { fn get_symbol_type(&self, str: &str) -> Option; fn parse_type_name(&self, expr: &Expr<()>) -> Option; fn get_identifier_def(&self, str: &str) -> DefinitionId; fn get_symbol_value(&self, str: &str) -> Option; fn get_symbol_location(&self, str: &str) -> Option; fn get_module_resolver(&self, module_name: &str) -> Option<&dyn SymbolResolver>; // NOTE: for getting imported modules' symbol resolver? // handle function call etc. }