Skip to content

Commit

Permalink
simplify signature of Builtin::check_arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
jimblandy committed Jan 11, 2025
1 parent 848e7f7 commit fa9f489
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 62 deletions.
121 changes: 60 additions & 61 deletions naga/src/proc/builtins.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,10 @@ pub struct Error {
}

impl Builtin {
pub fn check_arguments<'a, I>(&self, actuals: I) -> Result<(), Error>
where I: Iterator<Item = &'a crate::TypeInner> + Clone,
pub fn check_arguments(&self, actuals: &[&crate::TypeInner]) -> Result<(), Error>
{
eprintln!("JIMB: check_arguments");
let actuals = actuals.into_iter();
let actuals = actuals.iter().cloned();

// First, make our own copy of the type variables, with their
// initial, unconstrained type sets.
Expand Down Expand Up @@ -475,10 +474,10 @@ fn unary_vec_or_scalar_numeric_scalar() {
use crate::{Scalar, TypeInner};
let builtin = b!((T) -> T where (T: (vecN or scalar<numeric>)));

let ok = builtin.check_arguments([TypeInner::Scalar(Scalar::U32)].iter());
let ok = builtin.check_arguments(&[&TypeInner::Scalar(Scalar::U32)]);
assert!(ok.is_ok());

let err = builtin.check_arguments([TypeInner::Scalar(Scalar::BOOL)].iter());
let err = builtin.check_arguments(&[&TypeInner::Scalar(Scalar::BOOL)]);
assert!(err.is_err());
}

Expand All @@ -487,10 +486,10 @@ fn unary_vec_or_scalar_numeric_vector() {
use crate::{Scalar, TypeInner, VectorSize};
let builtin = b!((T) -> T where (T: (vecN or scalar<numeric>)));

let ok = builtin.check_arguments([TypeInner::Vector { size: VectorSize::Tri, scalar: Scalar::F64 }].iter());
let ok = builtin.check_arguments(&[&TypeInner::Vector { size: VectorSize::Tri, scalar: Scalar::F64 }]);
assert!(ok.is_ok());

let err = builtin.check_arguments([TypeInner::Vector { size: VectorSize::Tri, scalar: Scalar::BOOL }].iter());
let err = builtin.check_arguments(&[&TypeInner::Vector { size: VectorSize::Tri, scalar: Scalar::BOOL }]);
assert!(err.is_err());
}

Expand All @@ -499,11 +498,11 @@ fn unary_vec_or_scalar_numeric_matrix() {
use crate::{Scalar, TypeInner, VectorSize};
let builtin = b!((T) -> T where (T: (vecN or scalar<numeric>)));

let err = builtin.check_arguments([TypeInner::Matrix {
let err = builtin.check_arguments(&[&TypeInner::Matrix {
columns: VectorSize::Tri,
rows: VectorSize::Tri,
scalar: Scalar::F32,
}].iter());
}]);
assert!(err.is_err());
}

Expand All @@ -515,61 +514,61 @@ fn binary_vec_or_scalar_numeric_scalar() {

let builtin = b!((T, T) -> T where (T: (vecN or scalar<numeric>)));

let ok = builtin.check_arguments([
TypeInner::Scalar(Scalar::F32),
TypeInner::Scalar(Scalar::F32),
].iter());
let ok = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::F32),
&TypeInner::Scalar(Scalar::F32),
]);
assert!(ok.is_ok());

let ok = builtin.check_arguments([
TypeInner::Scalar(Scalar::ABSTRACT_FLOAT),
TypeInner::Scalar(Scalar::F32),
].iter());
let ok = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::ABSTRACT_FLOAT),
&TypeInner::Scalar(Scalar::F32),
]);
assert!(ok.is_ok());

let ok = builtin.check_arguments([
TypeInner::Scalar(Scalar::F32),
TypeInner::Scalar(Scalar::ABSTRACT_INT),
].iter());
let ok = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::F32),
&TypeInner::Scalar(Scalar::ABSTRACT_INT),
]);
assert!(ok.is_ok());

let ok = builtin.check_arguments([
TypeInner::Scalar(Scalar::U32),
TypeInner::Scalar(Scalar::U32),
].iter());
let ok = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::U32),
&TypeInner::Scalar(Scalar::U32),
]);
assert!(ok.is_ok());

let ok = builtin.check_arguments([
TypeInner::Scalar(Scalar::U32),
TypeInner::Scalar(Scalar::ABSTRACT_INT),
].iter());
let ok = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::U32),
&TypeInner::Scalar(Scalar::ABSTRACT_INT),
]);
assert!(ok.is_ok());

let ok = builtin.check_arguments([
TypeInner::Scalar(Scalar::ABSTRACT_INT),
TypeInner::Scalar(Scalar::U32),
].iter());
let ok = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::ABSTRACT_INT),
&TypeInner::Scalar(Scalar::U32),
]);
assert!(ok.is_ok());

// Not numeric.
let err = builtin.check_arguments([
TypeInner::Scalar(Scalar::BOOL),
TypeInner::Scalar(Scalar::BOOL),
].iter());
let err = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::BOOL),
&TypeInner::Scalar(Scalar::BOOL),
]);
assert!(err.is_err());

// Different floating-point types.
let err = builtin.check_arguments([
TypeInner::Scalar(Scalar::F32),
TypeInner::Scalar(Scalar::F64),
].iter());
let err = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::F32),
&TypeInner::Scalar(Scalar::F64),
]);
assert!(err.is_err());

// Different constructor.
let err = builtin.check_arguments([
TypeInner::Scalar(Scalar::F32),
TypeInner::Vector { size: Vs::Bi, scalar: Scalar::F32 },
].iter());
let err = builtin.check_arguments(&[
&TypeInner::Scalar(Scalar::F32),
&TypeInner::Vector { size: Vs::Bi, scalar: Scalar::F32 },
]);
assert!(err.is_err());
}

Expand All @@ -580,30 +579,30 @@ fn binary_vec_or_scalar_numeric_vector() {

let builtin = b!((T, T) -> T where (T: (vecN or scalar<numeric>)));

let ok = builtin.check_arguments([
TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
].iter());
let ok = builtin.check_arguments(&[&
&TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
&TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
]);
assert!(ok.is_ok());

// Different vector sizes.
let err = builtin.check_arguments([
TypeInner::Vector { size: Vs::Bi, scalar: Scalar::F32 },
TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
].iter());
let err = builtin.check_arguments(&[&
&TypeInner::Vector { size: Vs::Bi, scalar: Scalar::F32 },
&TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
]);
assert!(err.is_err());

// Different vector scalars.
let err = builtin.check_arguments([
TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F64 },
].iter());
let err = builtin.check_arguments(&[&
&TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
&TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F64 },
]);
assert!(err.is_err());

// Mix of vectors and scalars.
let err = builtin.check_arguments([
TypeInner::Scalar(Scalar::F32),
TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
].iter());
let err = builtin.check_arguments(&[&
&TypeInner::Scalar(Scalar::F32),
&TypeInner::Vector { size: Vs::Tri, scalar: Scalar::F32 },
]);
assert!(err.is_err());
}
2 changes: 1 addition & 1 deletion naga/src/valid/expression.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1015,7 +1015,7 @@ impl super::Validator {
_ => unreachable!(),
};

if let Err(err) = info.check_arguments(actual_types.iter().cloned()) {
if let Err(err) = info.check_arguments(actual_types) {
return Err(ExpressionError::InvalidArgumentType(
fun, err.argument_index as u32, actuals[err.argument_index],
));
Expand Down

0 comments on commit fa9f489

Please sign in to comment.