@@ -174,7 +174,7 @@ internal static void Initialize(bool initSigs = false, ShutdownMode mode = Shutd
174174 IntPtr item = PyString_FromString ( rtdir ) ;
175175 if ( PySequence_Contains ( path , item ) == 0 )
176176 {
177- PyList_Append ( new BorrowedReference ( path ) , item ) ;
177+ PyList_Append ( new BorrowedReference ( path ) , new BorrowedReference ( item ) ) ;
178178 }
179179 XDecref ( item ) ;
180180 AssemblyManager . UpdatePath ( ) ;
@@ -1087,6 +1087,8 @@ internal static IntPtr PyObject_GetAttr(IntPtr pointer, IntPtr name)
10871087
10881088
10891089 internal static IntPtr PyObject_Call ( IntPtr pointer , IntPtr args , IntPtr kw ) => Delegates . PyObject_Call ( pointer , args , kw ) ;
1090+ internal static IntPtr PyObject_Call ( BorrowedReference pointer , BorrowedReference args , BorrowedReference kw )
1091+ => Delegates . PyObject_Call ( pointer . DangerousGetAddress ( ) , args . DangerousGetAddress ( ) , kw . DangerousGetAddressOrNull ( ) ) ;
10901092
10911093
10921094 internal static NewReference PyObject_CallObject ( BorrowedReference callable , BorrowedReference args ) => Delegates . PyObject_CallObject ( callable , args ) ;
@@ -1822,7 +1824,7 @@ internal static int PyList_Insert(BorrowedReference pointer, long index, IntPtr
18221824 private static int PyList_Insert ( BorrowedReference pointer , IntPtr index , IntPtr value ) => Delegates . PyList_Insert ( pointer , index , value ) ;
18231825
18241826
1825- internal static int PyList_Append ( BorrowedReference pointer , IntPtr value ) => Delegates . PyList_Append ( pointer , value ) ;
1827+ internal static int PyList_Append ( BorrowedReference pointer , BorrowedReference value ) => Delegates . PyList_Append ( pointer , value ) ;
18261828
18271829
18281830 internal static int PyList_Reverse ( BorrowedReference pointer ) => Delegates . PyList_Reverse ( pointer ) ;
@@ -1885,7 +1887,15 @@ internal static int PyTuple_SetItem(IntPtr pointer, long index, IntPtr value)
18851887 {
18861888 return PyTuple_SetItem ( pointer , new IntPtr ( index ) , value ) ;
18871889 }
1890+ internal static int PyTuple_SetItem ( BorrowedReference pointer , long index , StolenReference value )
1891+ => PyTuple_SetItem ( pointer . DangerousGetAddress ( ) , new IntPtr ( index ) , value . DangerousGetAddressOrNull ( ) ) ;
18881892
1893+ internal static int PyTuple_SetItem ( BorrowedReference pointer , long index , BorrowedReference value )
1894+ {
1895+ var increfValue = value . DangerousGetAddress ( ) ;
1896+ Runtime . XIncref ( increfValue ) ;
1897+ return PyTuple_SetItem ( pointer . DangerousGetAddress ( ) , new IntPtr ( index ) , increfValue ) ;
1898+ }
18891899
18901900 private static int PyTuple_SetItem ( IntPtr pointer , IntPtr index , IntPtr value ) => Delegates . PyTuple_SetItem ( pointer , index , value ) ;
18911901
@@ -1944,6 +1954,14 @@ internal static string PyModule_GetFilename(IntPtr module)
19441954
19451955
19461956 internal static IntPtr PyImport_Import ( IntPtr name ) => Delegates . PyImport_Import ( name ) ;
1957+
1958+ /// <summary>
1959+ /// We can't use a StolenReference here because the reference is stolen only on success.
1960+ /// </summary>
1961+ /// <param name="module">The module to add the object to.</param>
1962+ /// <param name="name">The key that will refer to the object.</param>
1963+ /// <param name="stolenObject">The object to add to the module.</param>
1964+ /// <returns>Return -1 on error, 0 on success.</returns>
19471965 internal static int PyModule_AddObject ( BorrowedReference module , string name , BorrowedReference stolenObject )
19481966 {
19491967 using var namePtr = new StrPtr ( name , Encoding . UTF8 ) ;
@@ -2483,7 +2501,7 @@ static Delegates()
24832501 PyList_GetItem = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , BorrowedReference > ) GetFunctionByName ( nameof ( PyList_GetItem ) , GetUnmanagedDll ( _PythonDll ) ) ;
24842502 PyList_SetItem = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , int > ) GetFunctionByName ( nameof ( PyList_SetItem ) , GetUnmanagedDll ( _PythonDll ) ) ;
24852503 PyList_Insert = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , IntPtr , int > ) GetFunctionByName ( nameof ( PyList_Insert ) , GetUnmanagedDll ( _PythonDll ) ) ;
2486- PyList_Append = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , int > ) GetFunctionByName ( nameof ( PyList_Append ) , GetUnmanagedDll ( _PythonDll ) ) ;
2504+ PyList_Append = ( delegate * unmanaged[ Cdecl] < BorrowedReference , BorrowedReference , int > ) GetFunctionByName ( nameof ( PyList_Append ) , GetUnmanagedDll ( _PythonDll ) ) ;
24872505 PyList_Reverse = ( delegate * unmanaged[ Cdecl] < BorrowedReference , int > ) GetFunctionByName ( nameof ( PyList_Reverse ) , GetUnmanagedDll ( _PythonDll ) ) ;
24882506 PyList_Sort = ( delegate * unmanaged[ Cdecl] < BorrowedReference , int > ) GetFunctionByName ( nameof ( PyList_Sort ) , GetUnmanagedDll ( _PythonDll ) ) ;
24892507 PyList_GetSlice = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyList_GetSlice ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2780,7 +2798,7 @@ static Delegates()
27802798 internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , BorrowedReference > PyList_GetItem { get ; }
27812799 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , int > PyList_SetItem { get ; }
27822800 internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , IntPtr , int > PyList_Insert { get ; }
2783- internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , int > PyList_Append { get ; }
2801+ internal static delegate * unmanaged[ Cdecl] < BorrowedReference , BorrowedReference , int > PyList_Append { get ; }
27842802 internal static delegate * unmanaged[ Cdecl] < BorrowedReference , int > PyList_Reverse { get ; }
27852803 internal static delegate * unmanaged[ Cdecl] < BorrowedReference , int > PyList_Sort { get ; }
27862804 internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyList_GetSlice { get ; }
0 commit comments