simple_math() test
This commit is contained in:
parent
3626e2c994
commit
f45cbe64f3
|
@ -52,7 +52,7 @@ impl Engine {
|
||||||
pub fn translate(&mut self, fn_impl: &ast::FnImpl) -> Result<(), String> {
|
pub fn translate(&mut self, fn_impl: &ast::FnImpl) -> Result<(), String> {
|
||||||
let int = self.module.target_config().pointer_type();
|
let int = self.module.target_config().pointer_type();
|
||||||
let builder = FunctionBuilder::new(&mut self.ctx.func, &mut self.builder_context);
|
let builder = FunctionBuilder::new(&mut self.ctx.func, &mut self.builder_context);
|
||||||
let mut trans = super::translate::FunctionTranslator { int, builder };
|
let trans = super::translate::FunctionTranslator { int, builder };
|
||||||
trans.translate(fn_impl);
|
trans.translate(fn_impl);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -62,19 +62,26 @@ impl Engine {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[test]
|
fn jit_compile(source: &str) -> *const u8 {
|
||||||
fn simple_math() {
|
|
||||||
use crate::parse::lexer::Lexer;
|
use crate::parse::lexer::Lexer;
|
||||||
use crate::parse::rd::RecursiveDescent;
|
use crate::parse::rd::RecursiveDescent;
|
||||||
let source = "simple_math() i64 { (1 + 2) * (3 / (4 + 5)) }";
|
|
||||||
println!("JIT-compiling source: {}", source);
|
println!("JIT-compiling source: {}", source);
|
||||||
let lexer = Lexer::new(source);
|
let lexer = Lexer::new(source);
|
||||||
let mut rd = RecursiveDescent::new(lexer);
|
let mut rd = RecursiveDescent::new(lexer);
|
||||||
let def = rd.build_fn(false, None);
|
let def = rd.build_fn(false, None);
|
||||||
if let ast::Definition::Function { implementation, .. } = def {
|
if let ast::Definition::Function { implementation, .. } = def {
|
||||||
Engine::new().compile(&implementation).unwrap();
|
Engine::new().compile(&implementation).unwrap()
|
||||||
} else {
|
} else {
|
||||||
panic!("Failed to parse function from test source");
|
panic!("Failed to parse function from test source");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn simple_math() {
|
||||||
|
let source = "simple_math() i64 { (1 + 2) * ((4 + 5) / 3) }";
|
||||||
|
let code_ptr = jit_compile(source);
|
||||||
|
let code_fn = unsafe { std::mem::transmute::<_, fn() -> i64>(code_ptr) };
|
||||||
|
assert_eq!(code_fn(), 9);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue