From cb3f1bcde14be63a32fbe0ba2521377d79842fe4 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Wed, 10 Jun 2026 05:54:19 +0200 Subject: [PATCH] Fixed where module needs to be placed --- crates/analyzer/src/transpiler.rs | 4 ++-- crates/mist-api/src/transpiler.mist | 4 +++- crates/parser/src/lib.rs | 8 ++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/analyzer/src/transpiler.rs b/crates/analyzer/src/transpiler.rs index a0e90f3..3c4a431 100644 --- a/crates/analyzer/src/transpiler.rs +++ b/crates/analyzer/src/transpiler.rs @@ -112,7 +112,7 @@ pub fn transpile_file(path: &Path, output_path: &Path) -> Result<(), String> { let source = fs::read_to_string(path) .map_err(|e| format!("failed to read file {}: {}", path.display(), e))?; - let parser_result = mist_parser::parse(&source).map_err(|e| match e { + let parser_result = mist_parser::parse(&source, true).map_err(|e| match e { ParseError::Ast(e) => { // Using components carefully to prevent out-of-bounds or zero layout crashes let start_pos = e.span.start_pos().line_col(); @@ -149,7 +149,7 @@ pub fn transpile_file(path: &Path, output_path: &Path) -> Result<(), String> { pub fn transpile_text<'a>(source: &'a str) -> Result>> { let mut gc = mist_codegen::RustCodegen::new(); - Ok(gc.generate(mist_parser::parse(&source)?.1)) + Ok(gc.generate(mist_parser::parse(&source, true)?.1)) } fn should_skip(source: &Path, output: &Path) -> bool { diff --git a/crates/mist-api/src/transpiler.mist b/crates/mist-api/src/transpiler.mist index 21c92a4..cd8bd03 100644 --- a/crates/mist-api/src/transpiler.mist +++ b/crates/mist-api/src/transpiler.mist @@ -88,7 +88,9 @@ fn transpile_file(path *PathBuf, output_file *PathBuf, mod_decl *str) { let mut gc = mist_codegen::RustCodegen::new(); - let [[vis, api], ast] = match (mist_parser::parse(&source)) { + let is_master = path.file_name().unwrap().to_str().unwrap() == "main.mist"; + + let [[vis, api], ast] = match (mist_parser::parse(&source, is_master)) { Ok[ast] => ast; Err[e] => { match (e) { diff --git a/crates/parser/src/lib.rs b/crates/parser/src/lib.rs index 80e6d3e..6ec7611 100644 --- a/crates/parser/src/lib.rs +++ b/crates/parser/src/lib.rs @@ -16,6 +16,7 @@ pub struct MistParser; pub fn parse<'a>( source: &'a str, + is_master: bool, ) -> Result<((Visibility, Identifier), Vec), ParseError<'a, Vec>> { let mut pairs = MistParser::parse(Rule::program, source)?; @@ -29,6 +30,13 @@ pub fn parse<'a>( } } + if is_master { + return match analyzer.build(statements) { + Ok(v) => Ok(((Visibility::Private, Identifier(String::new())), v)), + Err(e) => Err(ParseError::Ast(e)), + }; + } + let m = if let Some(v) = statements.get(0) { if let TopLevelKind::DeclareModule(vis, name) = &v.0.item { (vis.clone(), name.clone())