From b5d49ed6ebcd8075d0fdfabc49333d5c31a7ada6 Mon Sep 17 00:00:00 2001 From: Shautvast Date: Mon, 17 Nov 2025 10:58:21 +0100 Subject: [PATCH] restructuring --- src/builtins/list.rs | 2 +- src/builtins/mod.rs | 2 +- src/chunk.rs | 2 +- src/{ => compiler}/ast_pass.rs | 16 ++++----- src/{ => compiler}/bytecode_pass.rs | 14 ++++---- src/{ => compiler}/compiler_tests.rs | 0 src/compiler/mod.rs | 4 +++ src/{ => compiler}/scan_pass.rs | 0 src/lib.rs | 49 ++++++++++++---------------- src/repl.rs | 4 +-- src/symbol_builder.rs | 2 +- 11 files changed, 45 insertions(+), 50 deletions(-) rename src/{ => compiler}/ast_pass.rs (98%) rename src/{ => compiler}/bytecode_pass.rs (98%) rename src/{ => compiler}/compiler_tests.rs (100%) create mode 100644 src/compiler/mod.rs rename src/{ => compiler}/scan_pass.rs (100%) diff --git a/src/builtins/list.rs b/src/builtins/list.rs index 9cf3bb0..7f5960c 100644 --- a/src/builtins/list.rs +++ b/src/builtins/list.rs @@ -1,4 +1,4 @@ -use crate::ast_pass::Parameter; +use crate::compiler::ast_pass::Parameter; use crate::builtins::{FunctionMap, Signature, add, expected}; use crate::errors::RuntimeError; use crate::tokens::TokenType; diff --git a/src/builtins/mod.rs b/src/builtins/mod.rs index 939e82e..41649eb 100644 --- a/src/builtins/mod.rs +++ b/src/builtins/mod.rs @@ -7,7 +7,7 @@ use crate::tokens::TokenType; use crate::value::Value; use std::collections::HashMap; use std::sync::LazyLock; -use crate::ast_pass::Parameter; +use crate::compiler::ast_pass::Parameter; use crate::builtins::list::list_functions; pub(crate) struct Signature { diff --git a/src/chunk.rs b/src/chunk.rs index 5cc4e84..b3dd3b1 100644 --- a/src/chunk.rs +++ b/src/chunk.rs @@ -1,4 +1,4 @@ -use crate::ast_pass::Parameter; +use crate::compiler::ast_pass::Parameter; use crate::tokens::TokenType; use crate::value::Value; use crate::vm::{ diff --git a/src/ast_pass.rs b/src/compiler/ast_pass.rs similarity index 98% rename from src/ast_pass.rs rename to src/compiler/ast_pass.rs index c8e9517..a266e49 100644 --- a/src/ast_pass.rs +++ b/src/compiler/ast_pass.rs @@ -1,4 +1,4 @@ -use crate::ast_pass::Expression::{ +use crate::compiler::ast_pass::Expression::{ Assignment, FieldGet, FunctionCall, ListGet, MapGet, MethodCall, NamedParameter, Stop, Variable, }; use crate::errors::CompilerError::{ @@ -30,10 +30,10 @@ pub fn compile( #[derive(Debug, Clone)] pub struct Function { - pub(crate) name: Token, - pub(crate) parameters: Vec, - pub(crate) return_type: TokenType, - pub(crate) body: Vec, + pub name: Token, + pub parameters: Vec, + pub return_type: TokenType, + pub body: Vec, } struct AstCompiler { @@ -893,12 +893,12 @@ impl Statement { #[derive(Debug, Clone)] pub struct Parameter { - pub(crate) name: Token, - pub(crate) var_type: TokenType, + pub name: Token, + pub var_type: TokenType, } impl Parameter { - pub(crate) fn new(name: impl Into, value_type: TokenType) -> Self { + pub fn new(name: impl Into, value_type: TokenType) -> Self { Self { name: Token { token_type: TokenType::StringType, diff --git a/src/bytecode_pass.rs b/src/compiler/bytecode_pass.rs similarity index 98% rename from src/bytecode_pass.rs rename to src/compiler/bytecode_pass.rs index 304478b..bbfb060 100644 --- a/src/bytecode_pass.rs +++ b/src/compiler/bytecode_pass.rs @@ -1,5 +1,5 @@ -use crate::ast_pass::Expression::NamedParameter; -use crate::ast_pass::{Expression, Function, Parameter, Statement}; +use crate::compiler::ast_pass::Expression::NamedParameter; +use crate::compiler::ast_pass::{Expression, Function, Parameter, Statement}; use crate::builtins::lookup; use crate::chunk::Chunk; use crate::errors::CompilerError::{IncompatibleTypes, UndeclaredVariable}; @@ -22,7 +22,7 @@ pub fn compile( compile_in_namespace(ast, qualified_name, symbols, registry) } -pub(crate) fn compile_function( +pub fn compile_function( function: &Function, symbols: &SymbolTable, registry: &mut Registry, @@ -41,7 +41,7 @@ pub(crate) fn compile_function( Ok(chunk) } -pub(crate) fn compile_in_namespace( +pub fn compile_in_namespace( ast: &Vec, namespace: Option<&str>, symbols: &SymbolTable, @@ -54,7 +54,7 @@ pub(crate) fn compile_in_namespace( Ok(()) } -pub(crate) struct Compiler { +pub struct Compiler { chunk: Chunk, _had_error: bool, current_line: usize, @@ -62,7 +62,7 @@ pub(crate) struct Compiler { } impl Compiler { - pub(crate) fn new(name: &str) -> Self { + pub fn new(name: &str) -> Self { Self { chunk: Chunk::new(name), _had_error: false, @@ -72,7 +72,7 @@ impl Compiler { } /// compile the entire AST into a chunk, adding a RETURN OP - pub(crate) fn compile( + pub fn compile( &mut self, ast: &Vec, symbols: &SymbolTable, diff --git a/src/compiler_tests.rs b/src/compiler/compiler_tests.rs similarity index 100% rename from src/compiler_tests.rs rename to src/compiler/compiler_tests.rs diff --git a/src/compiler/mod.rs b/src/compiler/mod.rs new file mode 100644 index 0000000..fc7fc5c --- /dev/null +++ b/src/compiler/mod.rs @@ -0,0 +1,4 @@ +mod compiler_tests; +pub mod bytecode_pass; +pub mod scan_pass; +pub mod ast_pass; \ No newline at end of file diff --git a/src/scan_pass.rs b/src/compiler/scan_pass.rs similarity index 100% rename from src/scan_pass.rs rename to src/compiler/scan_pass.rs diff --git a/src/lib.rs b/src/lib.rs index acd7169..16bdd8b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,24 +1,20 @@ -use crate::ast_pass::{Expression, Statement}; use crate::chunk::Chunk; +use crate::compiler::ast_pass::{Expression, Statement}; use crate::errors::CrudLangError::Platform; use crate::errors::{CompilerErrorAtLine, CrudLangError}; -use crate::scan_pass::scan; use crate::symbol_builder::Symbol; +use crate::value::Value::Void; use std::collections::HashMap; use std::fs; use walkdir::WalkDir; -use crate::value::Value::Void; -pub mod ast_pass; mod builtins; -pub mod bytecode_pass; pub mod chunk; -mod compiler_tests; +pub(crate) mod compiler; pub mod errors; pub mod file_watch; mod keywords; pub mod repl; -pub mod scan_pass; mod symbol_builder; mod tokens; mod value; @@ -37,19 +33,14 @@ pub fn compile_sourcedir(source_dir: &str) -> Result, Cru if path.ends_with(".crud") { print!("-- Compiling {} -- ", path); let source = fs::read_to_string(path).map_err(map_underlying())?; - let tokens = scan(&source)?; + let tokens = compiler::scan_pass::scan(&source)?; let mut symbol_table = HashMap::new(); - match ast_pass::compile(Some(path), tokens, &mut symbol_table) { + match compiler::ast_pass::compile(Some(path), tokens, &mut symbol_table) { Ok(statements) => { let path = path.strip_prefix(source_dir).unwrap().replace(".crud", ""); symbol_builder::build(&path, &statements, &mut symbol_table); - bytecode_pass::compile( - Some(&path), - &statements, - &symbol_table, - &mut registry, - )?; + compiler::bytecode_pass::compile(Some(&path), &statements, &symbol_table, &mut registry)?; } Err(e) => { println!("{}", e); @@ -67,33 +58,33 @@ pub fn map_underlying() -> fn(std::io::Error) -> CrudLangError { } pub fn recompile(src: &str, registry: &mut HashMap) -> Result<(), CrudLangError> { - let tokens = scan(src)?; + let tokens = compiler::scan_pass::scan(src)?; let mut symbol_table = HashMap::new(); - let ast = ast_pass::compile(None, tokens, &mut symbol_table)?; + let ast = compiler::ast_pass::compile(None, tokens, &mut symbol_table)?; symbol_builder::build("", &ast, &mut symbol_table); - bytecode_pass::compile(None, &ast, &symbol_table, registry)?; + compiler::bytecode_pass::compile(None, &ast, &symbol_table, registry)?; Ok(()) } pub fn compile(src: &str) -> Result, CrudLangError> { - let tokens = scan(src)?; + let tokens = compiler::scan_pass::scan(src)?; let mut registry = HashMap::new(); let mut symbol_table = HashMap::new(); - let ast = ast_pass::compile(None, tokens, &mut symbol_table)?; + let ast = compiler::ast_pass::compile(None, tokens, &mut symbol_table)?; symbol_builder::build("", &ast, &mut symbol_table); - bytecode_pass::compile(None, &ast, &symbol_table, &mut registry)?; + compiler::bytecode_pass::compile(None, &ast, &symbol_table, &mut registry)?; Ok(registry) } #[cfg(test)] pub(crate) fn run(src: &str) -> Result { - let tokens = scan(src)?; - let mut symbol_table = HashMap::new(); - let ast = ast_pass::compile(None, tokens, &mut symbol_table)?; - symbol_builder::build("", &ast, &mut symbol_table); - let mut registry = HashMap::new(); - bytecode_pass::compile(None, &ast, &symbol_table, &mut registry)?; + let tokens = compiler::scan_pass::scan(src)?; + let mut symbol_table = HashMap::new(); + let ast = compiler::ast_pass::compile(None, tokens, &mut symbol_table)?; + symbol_builder::build("", &ast, &mut symbol_table); + let mut registry = HashMap::new(); + compiler::bytecode_pass::compile(None, &ast, &symbol_table, &mut registry)?; - let registry = arc_swap::ArcSwap::from(std::sync::Arc::new(registry)); - vm::interpret(registry.load(), "main").map_err(CrudLangError::from) + let registry = arc_swap::ArcSwap::from(std::sync::Arc::new(registry)); + vm::interpret(registry.load(), "main").map_err(CrudLangError::from) } diff --git a/src/repl.rs b/src/repl.rs index f831db5..755571f 100644 --- a/src/repl.rs +++ b/src/repl.rs @@ -1,8 +1,8 @@ use crate::chunk::Chunk; use crate::errors::CrudLangError; -use crate::scan_pass::scan; +use crate::compiler::scan_pass::scan; use crate::vm::Vm; -use crate::{ast_pass, bytecode_pass, map_underlying, symbol_builder}; +use crate::{compiler::ast_pass, compiler::bytecode_pass, map_underlying, symbol_builder}; use arc_swap::ArcSwap; use std::collections::HashMap; use std::io; diff --git a/src/symbol_builder.rs b/src/symbol_builder.rs index 2e8f2de..d983488 100644 --- a/src/symbol_builder.rs +++ b/src/symbol_builder.rs @@ -1,4 +1,4 @@ -use crate::ast_pass::{Expression, Parameter, Statement}; +use crate::compiler::ast_pass::{Expression, Parameter, Statement}; use crate::builtins::lookup; use crate::errors::CompilerError; use crate::errors::CompilerError::IncompatibleTypes;