This commit is contained in:
2026-06-11 10:21:04 +02:00
parent cb3f1bcde1
commit 2256ef2a9f
2 changed files with 18 additions and 25 deletions
+1 -1
View File
@@ -90,7 +90,7 @@ fn transpile_file(path *PathBuf, output_file *PathBuf, mod_decl *str) {
let is_master = path.file_name().unwrap().to_str().unwrap() == "main.mist"; let is_master = path.file_name().unwrap().to_str().unwrap() == "main.mist";
let [[vis, api], ast] = match (mist_parser::parse(&source, is_master)) { let [[vis, name], ast] = match (mist_parser::parse(&source, is_master)) {
Ok[ast] => ast; Ok[ast] => ast;
Err[e] => { Err[e] => {
match (e) { match (e) {
+17 -24
View File
@@ -1,4 +1,4 @@
use pest::{Parser, Span}; use pest::Parser;
use pest_derive::Parser; use pest_derive::Parser;
pub mod ast; pub mod ast;
@@ -16,8 +16,10 @@ pub struct MistParser;
pub fn parse<'a>( pub fn parse<'a>(
source: &'a str, source: &'a str,
is_master: bool, ) -> Result<
) -> Result<((Visibility, Identifier), Vec<TopLevel>), ParseError<'a, Vec<TopLevel>>> { (Option<(Visibility, Identifier)>, Vec<TopLevel>),
ParseError<'a, (Option<(Visibility, Identifier)>, Vec<TopLevel>)>,
> {
let mut pairs = MistParser::parse(Rule::program, source)?; let mut pairs = MistParser::parse(Rule::program, source)?;
let mut statements = vec![]; let mut statements = vec![];
@@ -30,36 +32,27 @@ 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) { let m = if let Some(v) = statements.get(0) {
if let TopLevelKind::DeclareModule(vis, name) = &v.0.item { if let TopLevelKind::DeclareModule(vis, name) = &v.0.item {
(vis.clone(), name.clone()) Some((vis.clone(), name.clone()))
} else { } else {
return Err(ParseError::Ast(error::AstError { None
span: Span::new("", 0, 0).unwrap(),
error_code: error::ErrorCode::Module,
error_message: "Module must be declared, use `module <>;`".to_string(),
recovered: None,
}));
} }
} else { } else {
return Err(ParseError::Ast(error::AstError { None
span: Span::new("", 0, 0).unwrap(),
error_code: error::ErrorCode::Module,
error_message: "Module must be declared, use `module <>;`".to_string(),
recovered: None,
}));
}; };
match analyzer.build(statements) { match analyzer.build(statements) {
Ok(v) => Ok((m, v)), Ok(v) => Ok((m, v)),
Err(e) => Err(ParseError::Ast(e)), Err(e) => {
let rec = e.recovered.clone().map(move |r| (m, r));
let mut e2 = e.get();
e2.recovered = rec;
Err(ParseError::Ast(e2))
}
} }
} }