nac3core: fix converting int to bool (#119)

polymorphism_fixes
ychenfo 2021-11-30 03:02:26 +08:00
parent 681d85d3be
commit 0fe346106d
1 changed files with 7 additions and 10 deletions

View File

@ -1,7 +1,7 @@
use std::cell::RefCell; use std::cell::RefCell;
use nac3parser::ast::fold::Fold; use nac3parser::ast::fold::Fold;
use inkwell::FloatPredicate; use inkwell::{FloatPredicate, IntPredicate};
use crate::{ use crate::{
symbol_resolver::SymbolValue, symbol_resolver::SymbolValue,
@ -415,15 +415,12 @@ impl TopLevelComposer {
if ctx.unifier.unioned(arg_ty, boolean) { if ctx.unifier.unioned(arg_ty, boolean) {
Some(arg) Some(arg)
} else if ctx.unifier.unioned(arg_ty, int32) || ctx.unifier.unioned(arg_ty, int64) { } else if ctx.unifier.unioned(arg_ty, int32) || ctx.unifier.unioned(arg_ty, int64) {
Some( Some(ctx.builder.build_int_compare(
ctx.builder IntPredicate::NE,
.build_int_truncate( ctx.ctx.i64_type().const_zero(),
arg.into_int_value(), arg.into_int_value(),
ctx.ctx.bool_type(), "bool",
"trunc", ).into())
)
.into(),
)
} else if ctx.unifier.unioned(arg_ty, float) { } else if ctx.unifier.unioned(arg_ty, float) {
let val = ctx.builder. let val = ctx.builder.
build_float_compare( build_float_compare(