forked from M-Labs/nac3
1
0
Fork 0

IntKind::{get_int_type -> int_type}

This commit is contained in:
lyken 2024-08-28 12:53:37 +08:00
parent 44ee84b1d0
commit cc5950e88c
No known key found for this signature in database
GPG Key ID: 3BD5FC6AC8325DD8
1 changed files with 17 additions and 26 deletions

View File

@ -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) },