From b273a9fc6eaec7ed69a8c10b61d800e2b434f23f Mon Sep 17 00:00:00 2001 From: Lino Le Van <11367844+lino-levan@users.noreply.github.com> Date: Wed, 3 Jan 2024 18:13:27 +0100 Subject: [PATCH] chore: make walker return a result --- src/transpile/mod.rs | 2 +- src/transpile/walker.rs | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/transpile/mod.rs b/src/transpile/mod.rs index 88c8b5d7f4fc737a7e2469ea9814ec0832b82af0..415459ecbdc55ce514c974351ab7745fd1a4ab6b 100644 --- a/src/transpile/mod.rs +++ b/src/transpile/mod.rs @@ -13,7 +13,7 @@ pub fn transpile(content: String) -> Result { let tree = ast::parse(tokens)?; print!("{:?}", tree); // 3. Transpile the AST into javascript - let result = walker::transpile(tree); + let result = walker::transpile(tree)?; // 4. Return the javascript return Ok(result); } diff --git a/src/transpile/walker.rs b/src/transpile/walker.rs index 5a323574dbdd939e4da47c7b1ecdfc95603f5ebf..d2872189bca0200aa7d87956bf830defeb527094 100644 --- a/src/transpile/walker.rs +++ b/src/transpile/walker.rs @@ -1,7 +1,9 @@ +use miette::Result; + use super::ast::{Ast, Type}; -fn transpile_helper(tree: Ast) -> String { - match tree { +fn transpile_helper(tree: Ast) -> Result { + Ok(match tree { Ast::Number(number) => format!("{}", number), Ast::Operation { operator, @@ -9,27 +11,27 @@ fn transpile_helper(tree: Ast) -> String { right, } => format!( "{} {} {}", - transpile_helper(*left), + transpile_helper(*left)?, operator.to_string(), - transpile_helper(*right) + transpile_helper(*right)? ), Ast::VariableDeclaration { name, typ, value } => match typ { - Type::Bigint => format!("let {} = BigInt({});\n", name, transpile_helper(*value)), - _ => format!("let {} = {};\n", name, transpile_helper(*value)), + Type::Bigint => format!("let {} = BigInt({});\n", name, transpile_helper(*value)?), + _ => format!("let {} = {};\n", name, transpile_helper(*value)?), }, Ast::ConstantDeclaration { name, typ, value } => match typ { - Type::Bigint => format!("const {} = BigInt({});\n", name, transpile_helper(*value)), - _ => format!("const {} = {};\n", name, transpile_helper(*value)), + Type::Bigint => format!("const {} = BigInt({});\n", name, transpile_helper(*value)?), + _ => format!("const {} = {};\n", name, transpile_helper(*value)?), }, - } + }) } -pub fn transpile(forest: Vec) -> String { +pub fn transpile(forest: Vec) -> Result { let mut result = String::new(); for tree in forest { - result.push_str(&transpile_helper(tree)); + result.push_str(&transpile_helper(tree)?); } - result + Ok(result) } -- 2.54.0