diff --git a/semantic/src/scope.rs b/semantic/src/scope.rs index b395e5c..f4b70e7 100644 --- a/semantic/src/scope.rs +++ b/semantic/src/scope.rs @@ -2,6 +2,7 @@ use std::sync::Arc; use crate::top_level::TopLevelScope; +#[derive(Clone, Debug)] pub enum Scope { TopLevel(TopLevelScope), } diff --git a/semantic/src/top_level.rs b/semantic/src/top_level.rs index 1817dc7..a0caf07 100644 --- a/semantic/src/top_level.rs +++ b/semantic/src/top_level.rs @@ -4,13 +4,16 @@ use parser::ast::TopLevel; use parser::ast::{ParamList, TypeExpr}; +#[derive(Clone, Debug)] pub struct TypeSymbol(pub String); +#[derive(Clone, Debug)] pub struct VarSymbol { pub var_type: TypeSymbol, pub name: String, } +#[derive(Clone, Debug)] pub struct FunctionSymbol { pub export: bool, pub name: String, @@ -18,6 +21,7 @@ pub struct FunctionSymbol { pub return_type: Option, } +#[derive(Clone, Debug)] pub struct StructSymbol { pub export: bool, pub name: String, @@ -71,6 +75,7 @@ impl StructSymbol { } } +#[derive(Clone, Debug)] pub struct TopLevelScope { pub structs: HashMap, pub functions: HashMap, diff --git a/src/main.rs b/src/main.rs index ad40e2b..bff6a1f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -53,8 +53,10 @@ pub fn cmd_build() { fn cmd_check(path: &str) { let source = read_ms_file(path); match parser::parse(&source) { - Ok(_) => { - println!("ok"); + Ok(ast) => { + println!("parse: ok"); + + println!("{:#?}", semantic::scope::Scope::from_top(&ast)) } Err(e) => { eprintln!("parse error:\n{}", e);