forked from M-Labs/nac3
add simple output function
This commit is contained in:
parent
2fae28eb70
commit
1eac097706
11
src/main.rs
11
src/main.rs
@ -98,6 +98,10 @@ impl<'ctx> CodeGen<'ctx> {
|
|||||||
pass_manager.add_reassociate_pass();
|
pass_manager.add_reassociate_pass();
|
||||||
pass_manager.initialize();
|
pass_manager.initialize();
|
||||||
|
|
||||||
|
let i32_type = context.i32_type();
|
||||||
|
let fn_type = i32_type.fn_type(&[i32_type.into()], false);
|
||||||
|
module.add_function("output", fn_type, None);
|
||||||
|
|
||||||
CodeGen {
|
CodeGen {
|
||||||
context, module, pass_manager,
|
context, module, pass_manager,
|
||||||
builder: context.create_builder(),
|
builder: context.create_builder(),
|
||||||
@ -394,6 +398,12 @@ impl<'ctx> CodeGen<'ctx> {
|
|||||||
Ok(a.into())
|
Ok(a.into())
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
("output", values::BasicValueEnum::IntValue(a)) => {
|
||||||
|
let fn_value = self.module.get_function("output").unwrap();
|
||||||
|
Ok(self.builder.build_call(fn_value, &[a.into()], "call")
|
||||||
|
.try_as_basic_value().left().unwrap())
|
||||||
|
},
|
||||||
_ => Err(self.compile_error(CompileErrorKind::Unsupported("unrecognized call")))
|
_ => Err(self.compile_error(CompileErrorKind::Unsupported("unrecognized call")))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -430,6 +440,7 @@ impl<'ctx> CodeGen<'ctx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Expression { expression } => { self.compile_expression(expression)?; },
|
||||||
If { test, body, orelse } => {
|
If { test, body, orelse } => {
|
||||||
let test = self.compile_expression(test)?;
|
let test = self.compile_expression(test)?;
|
||||||
if test.get_type() != self.context.bool_type().into() {
|
if test.get_type() != self.context.bool_type().into() {
|
||||||
|
Loading…
Reference in New Issue
Block a user