@@ -418,6 +418,20 @@ fn set_combine_inner(
418
418
) )
419
419
}
420
420
421
+ fn set_pop ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
422
+ arg_check ! ( vm, args, required = [ ( s, Some ( vm. ctx. set_type( ) ) ) ] ) ;
423
+
424
+ let mut mut_obj = s. borrow_mut ( ) ;
425
+
426
+ match mut_obj. payload {
427
+ PyObjectPayload :: Set { ref mut elements } => match elements. clone ( ) . keys ( ) . next ( ) {
428
+ Some ( key) => Ok ( elements. remove ( key) . unwrap ( ) ) ,
429
+ None => Err ( vm. new_key_error ( "pop from an empty set" . to_string ( ) ) ) ,
430
+ } ,
431
+ _ => Err ( vm. new_type_error ( "" . to_string ( ) ) ) ,
432
+ }
433
+ }
434
+
421
435
fn frozenset_repr ( vm : & mut VirtualMachine , args : PyFuncArgs ) -> PyResult {
422
436
arg_check ! ( vm, args, required = [ ( o, Some ( vm. ctx. frozenset_type( ) ) ) ] ) ;
423
437
@@ -488,6 +502,7 @@ pub fn init(context: &PyContext) {
488
502
context. set_attr ( & set_type, "discard" , context. new_rustfunc ( set_discard) ) ;
489
503
context. set_attr ( & set_type, "clear" , context. new_rustfunc ( set_clear) ) ;
490
504
context. set_attr ( & set_type, "copy" , context. new_rustfunc ( set_copy) ) ;
505
+ context. set_attr ( & set_type, "pop" , context. new_rustfunc ( set_pop) ) ;
491
506
492
507
let frozenset_type = & context. frozenset_type ;
493
508
0 commit comments