Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 0728e21

Browse files
committed
fixed PyObject_DelAttr load from DLL failing
PyObject_DelAttr in C API is actually a macro, so we reimplement it as such using PyObject_SetAttr
1 parent 14949fb commit 0728e21

File tree

1 file changed

+3
-7
lines changed

1 file changed

+3
-7
lines changed

src/runtime/runtime.cs

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -985,11 +985,11 @@ internal static NewReference PyObject_GetAttrString(BorrowedReference pointer, S
985985
=> Delegates.PyObject_GetAttrString(pointer, name);
986986

987987

988-
internal static int PyObject_DelAttr(BorrowedReference @object, BorrowedReference name) => Delegates.PyObject_DelAttr(@object, name);
988+
internal static int PyObject_DelAttr(BorrowedReference @object, BorrowedReference name) => Delegates.PyObject_SetAttr(@object, name, null);
989989
internal static int PyObject_DelAttrString(BorrowedReference @object, string name)
990990
{
991991
using var namePtr = new StrPtr(name, Encoding.UTF8);
992-
return Delegates.PyObject_DelAttrString(@object, namePtr);
992+
return Delegates.PyObject_SetAttrString(@object, namePtr, null);
993993
}
994994
internal static int PyObject_SetAttrString(BorrowedReference @object, string name, BorrowedReference value)
995995
{
@@ -1604,7 +1604,7 @@ internal static bool PyIter_Check(BorrowedReference ob)
16041604
if (Delegates.PyIter_Check != null)
16051605
return Delegates.PyIter_Check(ob) != 0;
16061606
var ob_type = PyObject_TYPE(ob);
1607-
var tp_iternext = (NativeFunc*)Marshal.ReadIntPtr(ob_type.DangerousGetAddress(), TypeOffset.tp_iternext);
1607+
var tp_iternext = (NativeFunc*)Util.ReadIntPtr(ob_type, TypeOffset.tp_iternext);
16081608
return tp_iternext != (NativeFunc*)0 && tp_iternext != _PyObject_NextNotImplemented;
16091609
}
16101610
internal static NewReference PyIter_Next(BorrowedReference pointer) => Delegates.PyIter_Next(pointer);
@@ -2015,8 +2015,6 @@ static Delegates()
20152015
PyImport_ExecCodeModule = (delegate* unmanaged[Cdecl]<StrPtr, BorrowedReference, NewReference>)GetFunctionByName(nameof(PyImport_ExecCodeModule), GetUnmanagedDll(_PythonDll));
20162016
PyObject_HasAttrString = (delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, int>)GetFunctionByName(nameof(PyObject_HasAttrString), GetUnmanagedDll(_PythonDll));
20172017
PyObject_GetAttrString = (delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, NewReference>)GetFunctionByName(nameof(PyObject_GetAttrString), GetUnmanagedDll(_PythonDll));
2018-
PyObject_DelAttr = (delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, int>)GetFunctionByName(nameof(PyObject_DelAttr), GetUnmanagedDll(_PythonDll));
2019-
PyObject_DelAttrString = (delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, int>)GetFunctionByName(nameof(PyObject_DelAttrString), GetUnmanagedDll(_PythonDll));
20202018
PyObject_SetAttrString = (delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, BorrowedReference, int>)GetFunctionByName(nameof(PyObject_SetAttrString), GetUnmanagedDll(_PythonDll));
20212019
PyObject_HasAttr = (delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, int>)GetFunctionByName(nameof(PyObject_HasAttr), GetUnmanagedDll(_PythonDll));
20222020
PyObject_GetAttr = (delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, NewReference>)GetFunctionByName(nameof(PyObject_GetAttr), GetUnmanagedDll(_PythonDll));
@@ -2285,8 +2283,6 @@ static Delegates()
22852283
internal static delegate* unmanaged[Cdecl]<StrPtr, BorrowedReference, NewReference> PyImport_ExecCodeModule { get; }
22862284
internal static delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, int> PyObject_HasAttrString { get; }
22872285
internal static delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, NewReference> PyObject_GetAttrString { get; }
2288-
internal static delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, int> PyObject_DelAttr { get; }
2289-
internal static delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, int> PyObject_DelAttrString { get; }
22902286
internal static delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, BorrowedReference, int> PyObject_SetAttrString { get; }
22912287
internal static delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, int> PyObject_HasAttr { get; }
22922288
internal static delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, NewReference> PyObject_GetAttr { get; }

0 commit comments

Comments
 (0)