Fixed issue with macro (basically I wrote `false` when I needed to write `true` and vice versa)

recursive
Goren Barak 2023-11-23 22:01:38 -05:00
parent 1a6089b2a9
commit 325ae07f1c
2 changed files with 35 additions and 33 deletions

View File

@ -1,13 +1,14 @@
use crate::parse::ast::*;
#[macro_export]
macro_rules! fasm_codegen {
// Macro to make calling fasm_codegen function easier.
($exprs:expr) => {
fasm_codegen($exprs, false)
fasm_codegen(&$exprs, true)
};
(function: $exprs:expr) => {
fasm_codegen($exprs, true)
fasm_codegen($exprs, false)
}
}
@ -177,5 +178,6 @@ pub fn fasm_codegen(exprs: &Vec<Expr>, not_a_function: bool) -> String {
// Get the final `asm` string derived from all of the other strings that we have manipulated (finally!).
let asm = format!("{}{}{}", asm_start, asm_func, asm_data);
// Return the final `asm` string.
asm
}

View File

@ -7,37 +7,37 @@ use crate::parse::ast::*;
pub mod parse;
fn main() {
let fc = fasm_codegen(&
vec![
Expr::VarDefinition(VarDefinition {name: "goren", value: Value::Number(10)}),
Expr::MathExpr(Math {
left: &Value::Var(VarReference { name: "goren"}),
right: &Value::Number(17),
operator: MathOperator::OP_MULT
}
),
Expr::FunDefinition(FunDefinition {
name: "adder", contents: vec![
Expr::MathExpr(
Math {
left: &Value::Param(ParamReference {param_number: 0}),
right: &Value::Param(ParamReference {param_number: 1}),
operator: MathOperator::OP_ADD
}
)
]
}),
let fc = fasm_codegen!(
vec![
Expr::VarDefinition(VarDefinition {name: "goren", value: Value::Number(10)}),
Expr::MathExpr(Math {
left: &Value::Var(VarReference { name: "goren"}),
right: &Value::Number(17),
operator: MathOperator::OP_MULT
}
),
Expr::FunDefinition(FunDefinition {
name: "adder", contents: vec![
Expr::MathExpr(
Math {
left: &Value::Param(ParamReference {param_number: 0}),
right: &Value::Param(ParamReference {param_number: 1}),
operator: MathOperator::OP_ADD
}
)
]
}),
Expr::FunCall(
FunCall {
name: "adder",
params: vec![Value::Var(VarReference {name: "goren"}), Value::Number(6)]
}
),
Expr::Breakpoint
],
true
Expr::FunCall(
FunCall {
name: "adder",
params: vec![Value::Var(VarReference {name: "goren"}), Value::Number(6)]
}
),
Expr::Breakpoint
]
);
println!("{}", fc);
}