diff --git a/Cargo.lock b/Cargo.lock index b134b8e..53b22b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -79,6 +79,7 @@ name = "mist" version = "0.1.0" dependencies = [ "parser", + "semantic", "serde", "serde_json", ] @@ -154,6 +155,10 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "semantic" +version = "0.1.0" + [[package]] name = "serde" version = "1.0.228" diff --git a/Cargo.toml b/Cargo.toml index 9afc151..2a9e8f2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,3 +7,4 @@ edition = "2024" serde = { version = "1.0.228", features = ["serde_derive"] } serde_json = "1.0.149" parser = { path = "./parser" } +semantic = { path = "./semantic" } diff --git a/semantic/src/lib.rs b/semantic/src/lib.rs index b93cf3f..b4ef974 100644 --- a/semantic/src/lib.rs +++ b/semantic/src/lib.rs @@ -1,14 +1,3 @@ -pub fn add(left: u64, right: u64) -> u64 { - left + right -} +pub mod top_level; -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn it_works() { - let result = add(2, 2); - assert_eq!(result, 4); - } -} +pub struct Scope {} diff --git a/semantic/src/top_level.rs b/semantic/src/top_level.rs new file mode 100644 index 0000000..5de1c84 --- /dev/null +++ b/semantic/src/top_level.rs @@ -0,0 +1,18 @@ +use std::collections::HashMap; + +pub struct TypeSymbol { + export: bool, + name: String, +} + +pub struct FunctionSymbol { + export: bool, + name: String, + params: HashMap, +} + +pub struct StructSymbol { + export: bool, + name: String, + fields: HashMap, +}