@@ -833,6 +833,7 @@ pub trait DictProtocol {
833833fn contains_key ( & self , k : & str ) ->bool ;
834834fn get_item ( & self , k : & str ) ->Option < PyObjectRef > ;
835835fn 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 {
851852PyObjectPayload :: Dict { ref elements} =>{
852853 objdict:: content_get_key_str ( & elements. borrow ( ) , k)
853854}
855+ PyObjectPayload :: Module { ref dict, ..} => dict. get_item ( k) ,
854856PyObjectPayload :: 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 {