forked from M-Labs/nac3
IntKind::{get_int_type -> int_type}
This commit is contained in:
parent
44ee84b1d0
commit
cc5950e88c
|
@ -12,7 +12,7 @@ use crate::codegen::{CodeGenContext, CodeGenerator};
|
|||
use super::*;
|
||||
|
||||
pub trait IntKind<'ctx>: fmt::Debug + Clone + Copy {
|
||||
fn get_int_type(&self, size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx>;
|
||||
fn int_type(&self, size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx>;
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, Default)]
|
||||
|
@ -27,31 +27,31 @@ pub struct Int64;
|
|||
pub struct SizeT;
|
||||
|
||||
impl<'ctx> IntKind<'ctx> for Bool {
|
||||
fn get_int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
fn int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
ctx.bool_type()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> IntKind<'ctx> for Byte {
|
||||
fn get_int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
fn int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
ctx.i8_type()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> IntKind<'ctx> for Int32 {
|
||||
fn get_int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
fn int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
ctx.i32_type()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> IntKind<'ctx> for Int64 {
|
||||
fn get_int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
fn int_type(&self, _size_t: IntType<'ctx>, ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
ctx.i64_type()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'ctx> IntKind<'ctx> for SizeT {
|
||||
fn get_int_type(&self, size_t: IntType<'ctx>, _ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
fn int_type(&self, size_t: IntType<'ctx>, _ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
size_t
|
||||
}
|
||||
}
|
||||
|
@ -60,7 +60,7 @@ impl<'ctx> IntKind<'ctx> for SizeT {
|
|||
pub struct AnyInt<'ctx>(pub IntType<'ctx>);
|
||||
|
||||
impl<'ctx> IntKind<'ctx> for AnyInt<'ctx> {
|
||||
fn get_int_type(&self, _size_t: IntType<'ctx>, _ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
fn int_type(&self, _size_t: IntType<'ctx>, _ctx: &'ctx Context) -> IntType<'ctx> {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ pub struct Int<'ctx, N: IntKind<'ctx>> {
|
|||
|
||||
impl<'ctx, N: IntKind<'ctx>> ModelBase<'ctx> for Int<'ctx, N> {
|
||||
fn llvm_type_impl(&self, size_t: IntType<'ctx>, ctx: &'ctx Context) -> BasicTypeEnum<'ctx> {
|
||||
self.kind.get_int_type(size_t, ctx).into()
|
||||
self.kind.int_type(size_t, ctx).into()
|
||||
}
|
||||
|
||||
fn check_type_impl(
|
||||
|
@ -86,7 +86,7 @@ impl<'ctx, N: IntKind<'ctx>> ModelBase<'ctx> for Int<'ctx, N> {
|
|||
return Err(ModelError(format!("Expecting IntType, but got {ty:?}")));
|
||||
};
|
||||
|
||||
let exp_ty = self.kind.get_int_type(size_t, ctx);
|
||||
let exp_ty = self.kind.int_type(size_t, ctx);
|
||||
if ty.get_bit_width() != exp_ty.get_bit_width() {
|
||||
return Err(ModelError(format!(
|
||||
"Expecting IntType to have {} bit(s), but got {} bit(s)",
|
||||
|
@ -153,10 +153,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
assert!(
|
||||
value.get_type().get_bit_width()
|
||||
<= self
|
||||
.kind
|
||||
.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx)
|
||||
.get_bit_width()
|
||||
<= self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
);
|
||||
let value = ctx
|
||||
.builder
|
||||
|
@ -173,7 +170,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
assert!(
|
||||
value.get_type().get_bit_width()
|
||||
< self.kind.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
< self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
);
|
||||
let value =
|
||||
ctx.builder.build_int_s_extend(value, self.llvm_type(generator, ctx.ctx), "").unwrap();
|
||||
|
@ -188,10 +185,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
assert!(
|
||||
value.get_type().get_bit_width()
|
||||
<= self
|
||||
.kind
|
||||
.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx)
|
||||
.get_bit_width()
|
||||
<= self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
);
|
||||
let value = ctx
|
||||
.builder
|
||||
|
@ -208,7 +202,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
assert!(
|
||||
value.get_type().get_bit_width()
|
||||
< self.kind.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
< self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
);
|
||||
let value =
|
||||
ctx.builder.build_int_z_extend(value, self.llvm_type(generator, ctx.ctx), "").unwrap();
|
||||
|
@ -223,10 +217,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
assert!(
|
||||
value.get_type().get_bit_width()
|
||||
>= self
|
||||
.kind
|
||||
.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx)
|
||||
.get_bit_width()
|
||||
>= self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
);
|
||||
let value = ctx
|
||||
.builder
|
||||
|
@ -243,7 +234,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
assert!(
|
||||
value.get_type().get_bit_width()
|
||||
> self.kind.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
> self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width()
|
||||
);
|
||||
let value =
|
||||
ctx.builder.build_int_truncate(value, self.llvm_type(generator, ctx.ctx), "").unwrap();
|
||||
|
@ -259,7 +250,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
let their_width = value.get_type().get_bit_width();
|
||||
let our_width =
|
||||
self.kind.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width();
|
||||
self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width();
|
||||
match their_width.cmp(&our_width) {
|
||||
Ordering::Less => self.s_extend(generator, ctx, value),
|
||||
Ordering::Equal => unsafe { self.believe_value(value) },
|
||||
|
@ -276,7 +267,7 @@ impl<'ctx, N: IntKind<'ctx>> Int<'ctx, N> {
|
|||
) -> Instance<'ctx, Self> {
|
||||
let their_width = value.get_type().get_bit_width();
|
||||
let our_width =
|
||||
self.kind.get_int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width();
|
||||
self.kind.int_type(generator.get_size_type(ctx.ctx), ctx.ctx).get_bit_width();
|
||||
match their_width.cmp(&our_width) {
|
||||
Ordering::Less => self.z_extend(generator, ctx, value),
|
||||
Ordering::Equal => unsafe { self.believe_value(value) },
|
||||
|
|
Loading…
Reference in New Issue