diff --git a/semantic/src/lib.rs b/semantic/src/lib.rs index b4ef974..1e8d15e 100644 --- a/semantic/src/lib.rs +++ b/semantic/src/lib.rs @@ -1,3 +1,2 @@ +pub mod scope; pub mod top_level; - -pub struct Scope {} diff --git a/semantic/src/scope.rs b/semantic/src/scope.rs new file mode 100644 index 0000000..ea4398f --- /dev/null +++ b/semantic/src/scope.rs @@ -0,0 +1,21 @@ +use std::{ + collections::HashMap, + sync::{Arc, Mutex}, +}; + +use crate::top_level; + +pub enum Symbol { + Function(top_level::FunctionSymbol), + TypeSymbol(top_level::TypeSymbol), + StructSymbol(top_level::StructSymbol), +} + +pub struct Scope { + pub parent: Option>, + pub variables: Mutex>, +} + +impl Scope { + pub fn from_top_level() {} +} diff --git a/semantic/src/top_level.rs b/semantic/src/top_level.rs index 5de1c84..904ea45 100644 --- a/semantic/src/top_level.rs +++ b/semantic/src/top_level.rs @@ -1,18 +1,20 @@ use std::collections::HashMap; pub struct TypeSymbol { - export: bool, - name: String, + pub export: bool, + pub name: String, } pub struct FunctionSymbol { - export: bool, - name: String, - params: HashMap, + pub export: bool, + pub name: String, + pub params: HashMap, } pub struct StructSymbol { - export: bool, - name: String, - fields: HashMap, + pub export: bool, + pub name: String, + pub fields: HashMap, + pub methods: HashMap, } +