@@ -194,6 +194,25 @@ impl BuildSet for Bound<'_, PyFrozenSet> {
194194 }
195195}
196196
197+ fn validate_add < ' py > (
198+ py : Python < ' py > ,
199+ set : & impl BuildSet ,
200+ item : impl BorrowInput < ' py > ,
201+ state : & mut ValidationState < ' _ , ' py > ,
202+ validator : & CombinedValidator ,
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+ }
213+ }
214+ }
215+
197216#[ allow( clippy:: too_many_arguments) ]
198217pub ( crate ) fn validate_iter_to_set < ' py > (
199218 py : Python < ' py > ,
@@ -216,9 +235,8 @@ pub(crate) fn validate_iter_to_set<'py>(
216235 false => PartialMode :: Off ,
217236 } ;
218237 let item = item_result. map_err ( |e| any_next_error ! ( py, e, input, index) ) ?;
219- match validator. validate ( py, item. borrow_input ( ) , state) {
220- Ok ( item) => {
221- set. build_add ( item) ?;
238+ match validate_add ( py, set, item, state, validator) {
239+ Ok ( ( ) ) => {
222240 if let Some ( max_length) = max_length {
223241 if set. build_len ( ) > max_length {
224242 return Err ( ValError :: new (
0 commit comments