core: change `debug_assert_prim_is_allowed` to take &allowlist

This commit is contained in:
lyken 2024-06-12 11:34:28 +08:00
parent 9ae4fad92e
commit 8b1668c3e6
2 changed files with 17 additions and 17 deletions

View File

@ -551,7 +551,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_simple_primitive_class(&self, prim: PrimDef) -> TopLevelDef { fn build_simple_primitive_class(&self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[ &[
PrimDef::Int32, PrimDef::Int32,
PrimDef::Int64, PrimDef::Int64,
PrimDef::UInt32, PrimDef::UInt32,
@ -570,7 +570,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build the class `Exception` and its associated methods. /// Build the class `Exception` and its associated methods.
fn build_exception_class_related(&self, prim: PrimDef) -> TopLevelDef { fn build_exception_class_related(&self, prim: PrimDef) -> TopLevelDef {
// NOTE: currently only contains the class `Exception` // NOTE: currently only contains the class `Exception`
debug_assert_prim_is_allowed(prim, [PrimDef::Exception]); debug_assert_prim_is_allowed(prim, &[PrimDef::Exception]);
let PrimitiveStore { int32, int64, str, .. } = *self.primitives; let PrimitiveStore { int32, int64, str, .. } = *self.primitives;
@ -608,7 +608,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_option_class_related(&mut self, prim: PrimDef) -> TopLevelDef { fn build_option_class_related(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[ &[
PrimDef::Option, PrimDef::Option,
PrimDef::OptionIsSome, PrimDef::OptionIsSome,
PrimDef::OptionIsNone, PrimDef::OptionIsNone,
@ -727,7 +727,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_ndarray_class_related(&self, prim: PrimDef) -> TopLevelDef { fn build_ndarray_class_related(&self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[PrimDef::NDArray, PrimDef::NDArrayCopy, PrimDef::NDArrayFill], &[PrimDef::NDArray, PrimDef::NDArrayCopy, PrimDef::NDArrayFill],
); );
match prim { match prim {
@ -788,7 +788,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_cast_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_cast_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[ &[
PrimDef::FunInt32, PrimDef::FunInt32,
PrimDef::FunInt64, PrimDef::FunInt64,
PrimDef::FunUInt32, PrimDef::FunUInt32,
@ -837,7 +837,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build the functions `round()` and `round64()`. /// Build the functions `round()` and `round64()`.
fn build_round_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_round_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed(prim, [PrimDef::FunRound, PrimDef::FunRound64]); debug_assert_prim_is_allowed(prim, &[PrimDef::FunRound, PrimDef::FunRound64]);
let float = self.primitives.float; let float = self.primitives.float;
@ -891,7 +891,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_ceil_floor_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_ceil_floor_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[PrimDef::FunFloor, PrimDef::FunFloor64, PrimDef::FunCeil, PrimDef::FunCeil64], &[PrimDef::FunFloor, PrimDef::FunFloor64, PrimDef::FunCeil, PrimDef::FunCeil64],
); );
#[derive(Clone, Copy)] #[derive(Clone, Copy)]
@ -961,7 +961,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_ndarray_from_shape_factory_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_ndarray_from_shape_factory_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[PrimDef::FunNpNDArray, PrimDef::FunNpEmpty, PrimDef::FunNpZeros, PrimDef::FunNpOnes], &[PrimDef::FunNpNDArray, PrimDef::FunNpEmpty, PrimDef::FunNpZeros, PrimDef::FunNpOnes],
); );
create_fn_by_codegen( create_fn_by_codegen(
@ -990,7 +990,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_ndarray_other_factory_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_ndarray_other_factory_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[PrimDef::FunNpArray, PrimDef::FunNpFull, PrimDef::FunNpEye, PrimDef::FunNpIdentity], &[PrimDef::FunNpArray, PrimDef::FunNpFull, PrimDef::FunNpEye, PrimDef::FunNpIdentity],
); );
let PrimitiveStore { int32, bool, ndarray, .. } = *self.primitives; let PrimitiveStore { int32, bool, ndarray, .. } = *self.primitives;
@ -1254,7 +1254,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build functions `np_ceil()` and `np_floor()`. /// Build functions `np_ceil()` and `np_floor()`.
fn build_np_ceil_floor_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_np_ceil_floor_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed(prim, [PrimDef::FunNpCeil, PrimDef::FunNpFloor]); debug_assert_prim_is_allowed(prim, &[PrimDef::FunNpCeil, PrimDef::FunNpFloor]);
create_fn_by_codegen( create_fn_by_codegen(
&mut self.unifier, &mut self.unifier,
@ -1412,7 +1412,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build the functions `min()` and `max()`. /// Build the functions `min()` and `max()`.
fn build_min_max_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_min_max_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed(prim, [PrimDef::FunMin, PrimDef::FunMax]); debug_assert_prim_is_allowed(prim, &[PrimDef::FunMin, PrimDef::FunMax]);
TopLevelDef::Function { TopLevelDef::Function {
name: prim.name().into(), name: prim.name().into(),
@ -1450,7 +1450,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build the functions `np_min()` and `np_max()`. /// Build the functions `np_min()` and `np_max()`.
fn build_np_min_max_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_np_min_max_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed(prim, [PrimDef::FunNpMin, PrimDef::FunNpMax]); debug_assert_prim_is_allowed(prim, &[PrimDef::FunNpMin, PrimDef::FunNpMax]);
let ret_ty = self.unifier.get_fresh_var(Some("R".into()), None); let ret_ty = self.unifier.get_fresh_var(Some("R".into()), None);
let var_map = self let var_map = self
@ -1483,7 +1483,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build the functions `np_minimum()` and `np_maximum()`. /// Build the functions `np_minimum()` and `np_maximum()`.
fn build_np_minimum_maximum_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_np_minimum_maximum_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed(prim, [PrimDef::FunNpMinimum, PrimDef::FunNpMaximum]); debug_assert_prim_is_allowed(prim, &[PrimDef::FunNpMinimum, PrimDef::FunNpMaximum]);
let x1_ty = self.new_type_or_ndarray_ty(self.num_ty.0); let x1_ty = self.new_type_or_ndarray_ty(self.num_ty.0);
let x2_ty = self.new_type_or_ndarray_ty(self.num_ty.0); let x2_ty = self.new_type_or_ndarray_ty(self.num_ty.0);
@ -1561,7 +1561,7 @@ impl<'a> BuiltinBuilder<'a> {
/// Build numpy functions that take in a float and return a boolean. /// Build numpy functions that take in a float and return a boolean.
fn build_np_float_to_bool_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_np_float_to_bool_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed(prim, [PrimDef::FunNpIsInf, PrimDef::FunNpIsNan]); debug_assert_prim_is_allowed(prim, &[PrimDef::FunNpIsInf, PrimDef::FunNpIsNan]);
let PrimitiveStore { bool, float, .. } = *self.primitives; let PrimitiveStore { bool, float, .. } = *self.primitives;
@ -1590,7 +1590,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_np_sp_float_or_ndarray_1ary_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_np_sp_float_or_ndarray_1ary_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[ &[
PrimDef::FunNpSin, PrimDef::FunNpSin,
PrimDef::FunNpCos, PrimDef::FunNpCos,
PrimDef::FunNpTan, PrimDef::FunNpTan,
@ -1690,7 +1690,7 @@ impl<'a> BuiltinBuilder<'a> {
fn build_np_2ary_function(&mut self, prim: PrimDef) -> TopLevelDef { fn build_np_2ary_function(&mut self, prim: PrimDef) -> TopLevelDef {
debug_assert_prim_is_allowed( debug_assert_prim_is_allowed(
prim, prim,
[ &[
PrimDef::FunNpArctan2, PrimDef::FunNpArctan2,
PrimDef::FunNpCopysign, PrimDef::FunNpCopysign,
PrimDef::FunNpFmax, PrimDef::FunNpFmax,

View File

@ -249,7 +249,7 @@ impl PrimDef {
/// ///
/// Like `debug_assert!`, this statements of this function are only /// Like `debug_assert!`, this statements of this function are only
/// enabled if `cfg!(debug_assertions)` is true. /// enabled if `cfg!(debug_assertions)` is true.
pub fn debug_assert_prim_is_allowed<const N: usize>(prim: PrimDef, allowlist: [PrimDef; N]) { pub fn debug_assert_prim_is_allowed(prim: PrimDef, allowlist: &[PrimDef]) {
if cfg!(debug_assertions) { if cfg!(debug_assertions) {
let allowed = allowlist.iter().any(|p| *p == prim); let allowed = allowlist.iter().any(|p| *p == prim);
if !allowed { if !allowed {