@@ -833,6 +833,7 @@ pub trait DictProtocol {
833833 fn contains_key ( & self , k : & str ) -> bool ;
834834 fn get_item ( & self , k : & str ) -> Option < PyObjectRef > ;
835835 fn get_key_value_pairs ( & self ) -> Vec < ( PyObjectRef , PyObjectRef ) > ;
836+ fn set_item ( & self , ctx : & PyContext , key : & str , v : PyObjectRef ) ;
836837}
837838
838839impl DictProtocol for PyObjectRef {
@@ -851,8 +852,9 @@ impl DictProtocol for PyObjectRef {
851852 PyObjectPayload :: Dict { ref elements } => {
852853 objdict:: content_get_key_str ( & elements. borrow ( ) , k)
853854 }
855+ PyObjectPayload :: Module { ref dict, .. } => dict. get_item ( k) ,
854856 PyObjectPayload :: Scope { ref scope } => scope. borrow ( ) . locals . get_item ( k) ,
855- _ => panic ! ( "TODO" ) ,
857+ ref k => panic ! ( "TODO {:?}" , k ) ,
856858 }
857859 }
858860
@@ -864,6 +866,23 @@ impl DictProtocol for PyObjectRef {
864866 _ => panic ! ( "TODO" ) ,
865867 }
866868 }
869+
870+ // Item set/get:
871+ fn set_item ( & self , ctx : & PyContext , key : & str , v : PyObjectRef ) {
872+ match & self . payload {
873+ PyObjectPayload :: Dict { elements } => {
874+ let key = ctx. new_str ( key. to_string ( ) ) ;
875+ objdict:: set_item_in_content ( & mut elements. borrow_mut ( ) , & key, & v) ;
876+ }
877+ PyObjectPayload :: Module { dict, .. } => {
878+ dict. set_item ( ctx, key, v) ;
879+ }
880+ PyObjectPayload :: Scope { scope, .. } => {
881+ scope. borrow ( ) . locals . set_item ( ctx, key, v) ;
882+ }
883+ ref k => panic ! ( "TODO {:?}" , k) ,
884+ } ;
885+ }
867886}
868887
869888pub trait BufferProtocol {
0 commit comments