Skip to content

Commit 4eecd19

Browse files
committed
catch errors on build_add explicitly
1 parent fe6851c commit 4eecd19

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/input/return_enums.rs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -194,19 +194,22 @@ impl BuildSet for Bound<'_, PyFrozenSet> {
194194
}
195195
}
196196

197-
fn validate_hashable<'py>(
197+
fn validate_add<'py>(
198198
py: Python<'py>,
199-
item: &(impl Input<'py> + ?Sized),
199+
set: &impl BuildSet,
200+
item: impl BorrowInput<'py>,
200201
state: &mut ValidationState<'_, 'py>,
201202
validator: &CombinedValidator,
202-
) -> ValResult<PyObject> {
203-
let result: PyObject = validator.validate(py, item, state)?;
204-
205-
let bound_result: &Bound<'_, PyAny> = result.bind(py);
206-
207-
match bound_result.hash() {
208-
Ok(_) => Ok(result),
209-
Err(_) => Err(ValError::new(ErrorTypeDefaults::SetItemNotHashable, item)),
203+
) -> ValResult<()> {
204+
let validated_item = validator.validate(py, item.borrow_input(), state)?;
205+
match set.build_add(validated_item) {
206+
Ok(()) => Ok(()),
207+
Err(err) => {
208+
if err.matches(py, py.get_type::<PyTypeError>())? {
209+
return Err(ValError::new(ErrorTypeDefaults::SetItemNotHashable, item));
210+
}
211+
Err(err)?
212+
}
210213
}
211214
}
212215

@@ -232,9 +235,8 @@ pub(crate) fn validate_iter_to_set<'py>(
232235
false => PartialMode::Off,
233236
};
234237
let item = item_result.map_err(|e| any_next_error!(py, e, input, index))?;
235-
match validate_hashable(py, item.borrow_input(), state, validator) {
236-
Ok(item) => {
237-
set.build_add(item)?;
238+
match validate_add(py, set, item, state, validator) {
239+
Ok(()) => {
238240
if let Some(max_length) = max_length {
239241
if set.build_len() > max_length {
240242
return Err(ValError::new(

0 commit comments

Comments
 (0)