File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -56,6 +56,43 @@ pub unsafe extern "C" fn PyDict_GetItemRef(
5656 } )
5757}
5858
59+ #[ unsafe( no_mangle) ]
60+ pub unsafe extern "C" fn PyDict_SetDefaultRef (
61+ dict : * mut PyObject ,
62+ key : * mut PyObject ,
63+ default_value : * mut PyObject ,
64+ result : * mut * mut PyObject ,
65+ ) -> c_int {
66+ with_vm ( |vm| {
67+ let result = NonNull :: new ( result) ;
68+ if let Some ( result) = result {
69+ unsafe {
70+ result. write ( core:: ptr:: null_mut ( ) ) ;
71+ }
72+ }
73+ let dict = unsafe { & * dict } . try_downcast_ref :: < PyDict > ( vm) ?;
74+ let key = unsafe { & * key } ;
75+
76+ if let Some ( value) = dict. inner_getitem_opt ( key, vm) ? {
77+ if let Some ( result) = result {
78+ unsafe {
79+ result. write ( value. into_raw ( ) . as_ptr ( ) ) ;
80+ }
81+ }
82+ Ok ( true )
83+ } else {
84+ let value = unsafe { & * default_value } . to_owned ( ) ;
85+ dict. inner_setitem ( key, value. clone ( ) , vm) ?;
86+ if let Some ( result) = result {
87+ unsafe {
88+ result. write ( value. into_raw ( ) . as_ptr ( ) ) ;
89+ }
90+ }
91+ Ok ( false )
92+ }
93+ } )
94+ }
95+
5996#[ unsafe( no_mangle) ]
6097pub unsafe extern "C" fn PyDict_Size ( dict : * mut PyObject ) -> isize {
6198 with_vm ( |vm| {
You can’t perform that action at this time.
0 commit comments