@@ -715,15 +715,6 @@ internal static unsafe void XIncref(IntPtr op)
715
715
#endif
716
716
}
717
717
718
- internal static NewReference NewRef ( BorrowedReference reference )
719
- {
720
- var address = reference . DangerousGetAddress ( ) ;
721
- XIncref ( address ) ;
722
- return NewReference . DangerousFromPointer ( address ) ;
723
- }
724
- internal static NewReference NewRefOrNull ( BorrowedReference reference )
725
- => reference . IsNull ? default : NewRef ( reference ) ;
726
-
727
718
/// <summary>
728
719
/// Increase Python's ref counter for the given object, and get the object back.
729
720
/// </summary>
@@ -1039,19 +1030,12 @@ internal static int PyObject_HasAttrString(BorrowedReference pointer, string nam
1039
1030
1040
1031
internalstatic IntPtr PyObject_GetAttrString ( IntPtr pointer , string name )
1041
1032
{
1042
- IntPtr nameMem = Marshal. StringToHGlobalAnsi( name ) ;
1043
- try
1044
- {
1045
- return Delegates. PyObject_GetAttrString ( pointer , nameMem ) ;
1046
- }
1047
- finally
1048
- {
1049
- Marshal . FreeHGlobal ( nameMem ) ;
1050
- }
1033
+ using var namePtr= new StrPtr ( name , Encoding . UTF8 ) ;
1034
+ return Delegates . PyObject_GetAttrString ( pointer , namePtr ) ;
1051
1035
}
1052
1036
1053
1037
1054
- internalstatic IntPtr PyObject_GetAttrString( IntPtr pointer , IntPtr name ) => Delegates . PyObject_GetAttrString ( pointer , name ) ;
1038
+ internalstatic IntPtr PyObject_GetAttrString ( IntPtr pointer , StrPtr name ) => Delegates . PyObject_GetAttrString ( pointer , name ) ;
1055
1039
1056
1040
1057
1041
internalstatic int PyObject_SetAttrString ( IntPtr pointer , string name , IntPtr value )
@@ -1060,7 +1044,7 @@ internal static int PyObject_SetAttrString(IntPtr pointer, string name, IntPtr v
1060
1044
return Delegates . PyObject_SetAttrString ( pointer , namePtr , value ) ;
1061
1045
}
1062
1046
1063
- internal static int PyObject_HasAttr ( IntPtr pointer , IntPtr name ) => Delegates . PyObject_HasAttr ( pointer , name ) ;
1047
+ internal static int PyObject_HasAttr ( BorrowedReference pointer , BorrowedReference name ) => Delegates . PyObject_HasAttr ( pointer , name ) ;
1064
1048
1065
1049
1066
1050
internal static NewReference PyObject_GetAttr ( BorrowedReference pointer , IntPtr name )
@@ -1344,7 +1328,7 @@ internal static bool PyFloat_Check(IntPtr ob)
1344
1328
internal static IntPtr PyFloat_FromDouble ( double value ) => Delegates . PyFloat_FromDouble ( value ) ;
1345
1329
1346
1330
1347
- internal static IntPtr PyFloat_FromString ( IntPtr value , IntPtr junk ) => Delegates . PyFloat_FromString ( value , junk ) ;
1331
+ internal static NewReference PyFloat_FromString ( BorrowedReference value ) => Delegates . PyFloat_FromString ( value ) ;
1348
1332
1349
1333
1350
1334
internal static double PyFloat_AsDouble ( IntPtr ob ) => Delegates . PyFloat_AsDouble ( ob ) ;
@@ -2009,8 +1993,6 @@ internal static int PySys_SetObject(string name, BorrowedReference ob)
2009
1993
//====================================================================
2010
1994
// Python type object API
2011
1995
//====================================================================
2012
- static readonly delegate * unmanaged[ Cdecl] < IntPtr , bool > pyType_Check ;
2013
-
2014
1996
internal static bool PyType_Check ( IntPtr ob )
2015
1997
{
2016
1998
return PyObject_TypeCheck ( ob , PyTypeType ) ;
@@ -2284,7 +2266,7 @@ private static class Delegates
2284
2266
static Delegates ( )
2285
2267
{
2286
2268
PyDictProxy_New = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyDictProxy_New ) , GetUnmanagedDll ( _PythonDll ) ) ;
2287
- Py_IncRef = ( delegate * unmanaged[ Cdecl] < IntPtr , void > ) GetFunctionByName ( nameof ( Py_IncRef ) , GetUnmanagedDll ( _PythonDll ) ) ;
2269
+ Py_IncRef = ( delegate * unmanaged[ Cdecl] < IntPtr , void > ) GetFunctionByName ( nameof ( Py_IncRef ) , GetUnmanagedDll ( _PythonDll ) ) ;
2288
2270
Py_DecRef = ( delegate * unmanaged[ Cdecl] < IntPtr , void > ) GetFunctionByName ( nameof ( Py_DecRef ) , GetUnmanagedDll ( _PythonDll ) ) ;
2289
2271
Py_Initialize = ( delegate * unmanaged[ Cdecl] < void > ) GetFunctionByName ( nameof ( Py_Initialize ) , GetUnmanagedDll ( _PythonDll ) ) ;
2290
2272
Py_InitializeEx = ( delegate * unmanaged[ Cdecl] < int , void > ) GetFunctionByName ( nameof ( Py_InitializeEx ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2334,9 +2316,9 @@ static Delegates()
2334
2316
PyCFunction_Call = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyCFunction_Call ) , GetUnmanagedDll ( _PythonDll ) ) ;
2335
2317
PyMethod_New = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyMethod_New ) , GetUnmanagedDll ( _PythonDll ) ) ;
2336
2318
PyObject_HasAttrString = ( delegate * unmanaged[ Cdecl] < BorrowedReference , StrPtr , int > ) GetFunctionByName ( nameof ( PyObject_HasAttrString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2337
- PyObject_GetAttrString = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyObject_GetAttrString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2319
+ PyObject_GetAttrString = ( delegate * unmanaged[ Cdecl] < IntPtr , StrPtr , IntPtr > ) GetFunctionByName ( nameof ( PyObject_GetAttrString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2338
2320
PyObject_SetAttrString = ( delegate * unmanaged[ Cdecl] < IntPtr , StrPtr , IntPtr , int > ) GetFunctionByName ( nameof ( PyObject_SetAttrString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2339
- PyObject_HasAttr = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , int > ) GetFunctionByName ( nameof ( PyObject_HasAttr ) , GetUnmanagedDll ( _PythonDll ) ) ;
2321
+ PyObject_HasAttr = ( delegate * unmanaged[ Cdecl] < BorrowedReference , BorrowedReference , int > ) GetFunctionByName ( nameof ( PyObject_HasAttr ) , GetUnmanagedDll ( _PythonDll ) ) ;
2340
2322
PyObject_GetAttr = ( delegate * unmanaged[ Cdecl] < BorrowedReference , BorrowedReference , NewReference > ) GetFunctionByName ( nameof ( PyObject_GetAttr ) , GetUnmanagedDll ( _PythonDll ) ) ;
2341
2323
PyObject_SetAttr = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , int > ) GetFunctionByName ( nameof ( PyObject_SetAttr ) , GetUnmanagedDll ( _PythonDll ) ) ;
2342
2324
PyObject_GetItem = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyObject_GetItem ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2394,7 +2376,7 @@ static Delegates()
2394
2376
PyLong_FromVoidPtr = ( delegate * unmanaged[ Cdecl] < IntPtr , NewReference > ) GetFunctionByName ( nameof ( PyLong_FromVoidPtr ) , GetUnmanagedDll ( _PythonDll ) ) ;
2395
2377
PyLong_AsVoidPtr = ( delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > ) GetFunctionByName ( nameof ( PyLong_AsVoidPtr ) , GetUnmanagedDll ( _PythonDll ) ) ;
2396
2378
PyFloat_FromDouble = ( delegate * unmanaged[ Cdecl] < double , IntPtr > ) GetFunctionByName ( nameof ( PyFloat_FromDouble ) , GetUnmanagedDll ( _PythonDll ) ) ;
2397
- PyFloat_FromString = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyFloat_FromString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2379
+ PyFloat_FromString = ( delegate * unmanaged[ Cdecl] < BorrowedReference , NewReference > ) GetFunctionByName ( nameof ( PyFloat_FromString ) , GetUnmanagedDll ( _PythonDll ) ) ;
2398
2380
PyFloat_AsDouble = ( delegate * unmanaged[ Cdecl] < IntPtr , double > ) GetFunctionByName ( nameof ( PyFloat_AsDouble ) , GetUnmanagedDll ( _PythonDll ) ) ;
2399
2381
PyNumber_Add = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyNumber_Add ) , GetUnmanagedDll ( _PythonDll ) ) ;
2400
2382
PyNumber_Subtract = ( delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > ) GetFunctionByName ( nameof ( PyNumber_Subtract ) , GetUnmanagedDll ( _PythonDll ) ) ;
@@ -2606,9 +2588,9 @@ static Delegates()
2606
2588
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyCFunction_Call { get ; }
2607
2589
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , IntPtr > PyMethod_New { get ; }
2608
2590
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , StrPtr , int > PyObject_HasAttrString { get ; }
2609
- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyObject_GetAttrString { get ; }
2591
+ internal static delegate * unmanaged[ Cdecl] < IntPtr , StrPtr , IntPtr > PyObject_GetAttrString { get ; }
2610
2592
internal static delegate * unmanaged[ Cdecl] < IntPtr , StrPtr , IntPtr , int > PyObject_SetAttrString { get ; }
2611
- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , int > PyObject_HasAttr { get ; }
2593
+ internal static delegate * unmanaged[ Cdecl] < BorrowedReference , BorrowedReference , int > PyObject_HasAttr { get ; }
2612
2594
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , BorrowedReference , NewReference > PyObject_GetAttr { get ; }
2613
2595
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr , int > PyObject_SetAttr { get ; }
2614
2596
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyObject_GetItem { get ; }
@@ -2659,7 +2641,7 @@ static Delegates()
2659
2641
internal static delegate * unmanaged[ Cdecl] < IntPtr , NewReference > PyLong_FromVoidPtr { get ; }
2660
2642
internal static delegate * unmanaged[ Cdecl] < BorrowedReference , IntPtr > PyLong_AsVoidPtr { get ; }
2661
2643
internal static delegate * unmanaged[ Cdecl] < double , IntPtr > PyFloat_FromDouble { get ; }
2662
- internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyFloat_FromString { get ; }
2644
+ internal static delegate * unmanaged[ Cdecl] < BorrowedReference , NewReference > PyFloat_FromString { get ; }
2663
2645
internal static delegate * unmanaged[ Cdecl] < IntPtr , double > PyFloat_AsDouble { get ; }
2664
2646
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyNumber_Add { get ; }
2665
2647
internal static delegate * unmanaged[ Cdecl] < IntPtr , IntPtr , IntPtr > PyNumber_Subtract { get ; }