@@ -174,7 +174,7 @@ internal static void Initialize(bool initSigs = false, ShutdownMode mode = Shutd
174
174
IntPtr item = PyString_FromString ( rtdir ) ;
175
175
if ( PySequence_Contains ( path , item ) == 0 )
176
176
{
177
- PyList_Append ( new BorrowedReference ( path ) , item ) ;
177
+ PyList_Append ( new BorrowedReference ( path ) , new BorrowedReference ( item ) ) ;
178
178
}
179
179
XDecref ( item ) ;
180
180
AssemblyManager . UpdatePath ( ) ;
@@ -1087,6 +1087,8 @@ internal static IntPtr PyObject_GetAttr(IntPtr pointer, IntPtr name)
1087
1087
1088
1088
1089
1089
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 ( ) ) ;
1090
1092
1091
1093
1092
1094
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
1822
1824
private static int PyList_Insert ( BorrowedReference pointer , IntPtr index , IntPtr value ) => Delegates . PyList_Insert ( pointer , index , value ) ;
1823
1825
1824
1826
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 ) ;
1826
1828
1827
1829
1828
1830
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)
1885
1887
{
1886
1888
return PyTuple_SetItem ( pointer , new IntPtr ( index ) , value ) ;
1887
1889
}
1890
+ internal static int PyTuple_SetItem ( BorrowedReference pointer , long index , StolenReference value )
1891
+ => PyTuple_SetItem ( pointer . DangerousGetAddress ( ) , new IntPtr ( index ) , value . DangerousGetAddressOrNull ( ) ) ;
1888
1892
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
+ }
1889
1899
1890
1900
private static int PyTuple_SetItem ( IntPtr pointer , IntPtr index , IntPtr value ) => Delegates . PyTuple_SetItem ( pointer , index , value ) ;
1891
1901
@@ -1944,6 +1954,14 @@ internal static string PyModule_GetFilename(IntPtr module)
1944
1954
1945
1955
1946
1956
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>
1947
1965
internal static int PyModule_AddObject ( BorrowedReference module , string name , BorrowedReference stolenObject )
1948
1966
{
1949
1967
using var namePtr = new StrPtr ( name , Encoding . UTF8 ) ;
@@ -2483,7 +2501,7 @@ static Delegates()
2483
2501
PyList_GetItem = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , BorrowedReference > ) GetFunctionByName ( nameof ( PyList_GetItem ) , GetUnmanagedDll ( _PythonDll ) ) ;
2484
2502
PyList_SetItem = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , int > ) GetFunctionByName ( nameof ( PyList_SetItem ) , GetUnmanagedDll ( _PythonDll ) ) ;
2485
2503
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 ) ) ;
2487
2505
PyList_Reverse = ( delegate * unmanaged[ Cdecl] < BorrowedReference , int > ) GetFunctionByName ( nameof ( PyList_Reverse ) , GetUnmanagedDll ( _PythonDll ) ) ;
2488
2506
PyList_Sort = ( delegate * unmanaged[ Cdecl] < BorrowedReference , int > ) GetFunctionByName ( nameof ( PyList_Sort ) , GetUnmanagedDll ( _PythonDll ) ) ;
2489
2507
PyList_GetSlice = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyList_GetSlice ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2780,7 +2798,7 @@ static Delegates()
2780
2798
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr , BorrowedReference > PyList_GetItem { get ; }
2781
2799
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , int > PyList_SetItem { get ; }
2782
2800
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 ; }
2784
2802
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , int > PyList_Reverse { get ; }
2785
2803
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , int > PyList_Sort { get ; }
2786
2804
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyList_GetSlice { get ; }
0 commit comments