8000 addressed a few code comments · pythonnet/pythonnet@a6cbe20 · GitHub
[go: up one dir, main page]

Skip to content

Commit a6cbe20

Browse files
committed
addressed a few code comments
1 parent 3982892 commit a6cbe20

File tree

8 files changed

+31
-40
lines changed

8 files changed

+31
-40
lines changed

src/runtime/NewReference.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,16 @@ ref struct NewReference
1111
{
1212
IntPtr pointer;
1313

14+
/// <summary>Creates a <see cref="NewReference"/> pointing to the same object</summary>
15+
public NewReference(BorrowedReference reference, bool canBeNull = false)
16+
{
17+
var address = canBeNull
18+
? reference.DangerousGetAddressOrNull()
19+
: reference.DangerousGetAddress();
20+
Runtime.XIncref(address);
21+
this.pointer = address;
22+
}
23+
1424
[Pure]
1525
public static implicit operator BorrowedReference(in NewReference reference)
1626
=> new BorrowedReference(reference.pointer);

src/runtime/converter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -241,9 +241,9 @@ internal static IntPtr ToPython(object value, Type type)
241241
// return Runtime.PyFloat_FromDouble((double)((float)value));
242242
string ss = ((float)value).ToString(nfi);
243243
IntPtr ps = Runtime.PyString_FromString(ss);
244-
IntPtr op = Runtime.PyFloat_FromString(ps, IntPtr.Zero);
244+
NewReference op = Runtime.PyFloat_FromString(new BorrowedReference(ps));;
245245
Runtime.XDecref(ps);
246-
return op;
246+
return op.DangerousMoveToPointerOrNull();
247247

248248
case TypeCode.Double:
249249
return Runtime.PyFloat_FromDouble((double)value);

src/runtime/importhook.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,15 +306,14 @@ public static IntPtr __import__(IntPtr self, IntPtr argsRaw, IntPtr kw)
306306
var mod = ManagedType.GetManagedObject(module) as ModuleObject;
307307
mod?.LoadNames();
308308
}
309-
return Runtime.NewRef(module).DangerousMoveToPointer();
309+
return new NewReference(module).DangerousMoveToPointer();
310310
}
311311
if (clr_prefix != null)
312312
{
313313
return GetCLRModule(fromList).DangerousMoveToPointerOrNull();
314314
}
315315
module = Runtime.PyDict_GetItemString(modules, names[0]);
316-
return Runtime.NewRefOrNull(module)
317-
.DangerousMoveToPointer();
316+
return new NewReference(module, canBeNull: true).DangerousMoveToPointer();
318317
}
319318
Exceptions.Clear();
320319

src/runtime/pyfloat.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ private static IntPtr FromString(string value)
6666
{
6767
using (var s = new PyString(value))
6868
{
69-
IntPtr val = Runtime.PyFloat_FromString(s.obj, IntPtr.Zero);
69+
NewReference val = Runtime.PyFloat_FromString(s.Reference);
7070
PythonException.ThrowIfIsNull(val);
71-
return val;
71+
return val.DangerousMoveToPointerOrNull();
7272
}
7373
}
7474

src/runtime/pyobject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ public bool HasAttr(PyObject name)
272272
{
273273
if (name == null) throw new ArgumentNullException(nameof(name));
274274

275-
return Runtime.PyObject_HasAttr(obj, name.obj) != 0;
275+
return Runtime.PyObject_HasAttr(Reference, name.Reference) != 0;
276276
}
277277

278278

src/runtime/runtime.cs

Copy file name to clipboard
Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -715,15 +715,6 @@ internal static unsafe void XIncref(IntPtr op)
715715
#endif
716716
}
717717

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-
727718
/// <summary>
728719
/// Increase Python's ref counter for the given object, and get the object back.
729720
/// </summary>
@@ -1039,19 +1030,12 @@ internal static int PyObject_HasAttrString(BorrowedReference pointer, string nam
10391030

10401031
internal static IntPtr PyObject_GetAttrString(IntPtr pointer, string name)
10411032
{
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);
10511035
}
10521036

10531037

1054-
internal static IntPtr PyObject_GetAttrString(IntPtr pointer, IntPtr name) => Delegates.PyObject_GetAttrString(pointer, name);
1038+
internal static IntPtr PyObject_GetAttrString(IntPtr pointer, StrPtr name) => Delegates.PyObject_GetAttrString(pointer, name);
10551039

10561040

10571041
internal static int PyObject_SetAttrString(IntPtr pointer, string name, IntPtr value)
@@ -1060,7 +1044,7 @@ internal static int PyObject_SetAttrString(IntPtr pointer, string name, IntPtr v
10601044
return Delegates.PyObject_SetAttrString(pointer, namePtr, value);
10611045
}
10621046

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);
10641048

10651049

10661050
internal static NewReference PyObject_GetAttr(BorrowedReference pointer, IntPtr name)
@@ -1324,7 +1308,7 @@ internal static bool PyFloat_Check(IntPtr ob)
13241308
internal static IntPtr PyFloat_FromDouble(double value) => Delegates.PyFloat_FromDouble(value);
13251309

13261310

1327-
internal static IntPtr PyFloat_FromString(IntPtr value, IntPtr junk) => Delegates.PyFloat_FromString(value, junk);
1311+
internal static NewReference PyFloat_FromString(BorrowedReference value) => Delegates.PyFloat_FromString(value);
13281312

13291313

13301314
internal static double PyFloat_AsDouble(IntPtr ob) => Delegates.PyFloat_AsDouble(ob);
@@ -1990,8 +1974,6 @@ internal static int PySys_SetObject(string name, BorrowedReference ob)
19901974
//====================================================================
19911975
// Python type object API
19921976
//====================================================================
1993-
static readonly delegate* unmanaged[Cdecl]<IntPtr, bool> pyType_Check;
1994-
19951977
internal static bool PyType_Check(IntPtr ob)
19961978
{
19971979
return PyObject_TypeCheck(ob, PyTypeType);
@@ -2272,7 +2254,7 @@ private static class Delegates
22722254
static Delegates()
22732255
{
22742256
PyDictProxy_New = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr>)GetFunctionByName(nameof(PyDictProxy_New), GetUnmanagedDll(_PythonDll));
2275-
Py_IncRef = (delegate* unmanaged[Cdecl]<IntPtr, void>)GetFunctionByName(nameof(Py_IncRef), GetUnmanagedDll(_PythonDll));
2257+
Py_IncRef = (delegate* unmanaged[Cdecl]<IntPtr, void>)GetFunctionByName(nameof(Py_IncRef), GetUnmanagedDll(_PythonDll));
22762258
Py_DecRef = (delegate* unmanaged[Cdecl]<IntPtr, void>)GetFunctionByName(nameof(Py_DecRef), GetUnmanagedDll(_PythonDll));
22772259
Py_Initialize = (delegate* unmanaged[Cdecl]<void>)GetFunctionByName(nameof(Py_Initialize), GetUnmanagedDll(_PythonDll));
22782260
Py_InitializeEx = (delegate* unmanaged[Cdecl]<int, void>)GetFunctionByName(nameof(Py_InitializeEx), GetUnmanagedDll(_PythonDll));
@@ -2322,9 +2304,9 @@ static Delegates()
23222304
PyCFunction_Call = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyCFunction_Call), GetUnmanagedDll(_PythonDll));
23232305
PyMethod_New = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyMethod_New), GetUnmanagedDll(_PythonDll));
23242306
PyObject_HasAttrString = (delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, int>)GetFunctionByName(nameof(PyObject_HasAttrString), GetUnmanagedDll(_PythonDll));
2325-
PyObject_GetAttrString = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyObject_GetAttrString), GetUnmanagedDll(_PythonDll));
2307+
PyObject_GetAttrString = (delegate* unmanaged[Cdecl]<IntPtr, StrPtr, IntPtr>)GetFunctionByName(nameof(PyObject_GetAttrString), GetUnmanagedDll(_PythonDll));
23262308
PyObject_SetAttrString = (delegate* unmanaged[Cdecl]<IntPtr, StrPtr, IntPtr, int>)GetFunctionByName(nameof(PyObject_SetAttrString), GetUnmanagedDll(_PythonDll));
2327-
PyObject_HasAttr = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, int>)GetFunctionByName(nameof(PyObject_HasAttr), GetUnmanagedDll(_PythonDll));
2309+
PyObject_HasAttr = (delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, int>)GetFunctionByName(nameof(PyObject_HasAttr), GetUnmanagedDll(_PythonDll));
23282310
PyObject_GetAttr = (delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, NewReference>)GetFunctionByName(nameof(PyObject_GetAttr), GetUnmanagedDll(_PythonDll));
23292311
PyObject_SetAttr = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, int>)GetFunctionByName(nameof(PyObject_SetAttr), GetUnmanagedDll(_PythonDll));
23302312
PyObject_GetItem = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyObject_GetItem), GetUnmanagedDll(_PythonDll));
@@ -2382,7 +2364,7 @@ static Delegates()
23822364
PyLong_FromVoidPtr = (delegate* unmanaged[Cdecl]<IntPtr, NewReference>)GetFunctionByName(nameof(PyLong_FromVoidPtr), GetUnmanagedDll(_PythonDll));
23832365
PyLong_AsVoidPtr = (delegate* unmanaged[Cdecl]<BorrowedReference, IntPtr>)GetFunctionByName(nameof(PyLong_AsVoidPtr), GetUnmanagedDll(_PythonDll));
23842366
PyFloat_FromDouble = (delegate* unmanaged[Cdecl]<double, IntPtr>)GetFunctionByName(nameof(PyFloat_FromDouble), GetUnmanagedDll(_PythonDll));
2385-
PyFloat_FromString = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyFloat_FromString), GetUnmanagedDll(_PythonDll));
2367+
PyFloat_FromString = (delegate* unmanaged[Cdecl]<BorrowedReference, NewReference>)GetFunctionByName(nameof(PyFloat_FromString), GetUnmanagedDll(_PythonDll));
23862368
PyFloat_AsDouble = (delegate* unmanaged[Cdecl]<IntPtr, double>)GetFunctionByName(nameof(PyFloat_AsDouble), GetUnmanagedDll(_PythonDll));
23872369
PyNumber_Add = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyNumber_Add), GetUnmanagedDll(_PythonDll));
23882370
PyNumber_Subtract = (delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr>)GetFunctionByName(nameof(PyNumber_Subtract), GetUnmanagedDll(_PythonDll));
@@ -2594,9 +2576,9 @@ static Delegates()
25942576
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, IntPtr> PyCFunction_Call { get; }
25952577
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, IntPtr> PyMethod_New { get; }
25962578
internal static delegate* unmanaged[Cdecl]<BorrowedReference, StrPtr, int> PyObject_HasAttrString { get; }
2597-
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr> PyObject_GetAttrString { get; }
2579+
internal static delegate* unmanaged[Cdecl]<IntPtr, StrPtr, IntPtr> PyObject_GetAttrString { get; }
25982580
internal static delegate* unmanaged[Cdecl]<IntPtr, StrPtr, IntPtr, int> PyObject_SetAttrString { get; }
2599-
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, int> PyObject_HasAttr { get; }
2581+
internal static delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, int> PyObject_HasAttr { get; }
26002582
internal static delegate* unmanaged[Cdecl]<BorrowedReference, BorrowedReference, NewReference> PyObject_GetAttr { get; }
26012583
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr, int> PyObject_SetAttr { get; }
26022584
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr> PyObject_GetItem { get; }
@@ -2647,7 +2629,7 @@ static Delegates()
26472629
internal static delegate* unmanaged[Cdecl]<IntPtr, NewReference> PyLong_FromVoidPtr { get; }
26482630
internal static delegate* unmanaged[Cdecl]<BorrowedReference, IntPtr> PyLong_AsVoidPtr { get; }
26492631
internal static delegate* unmanaged[Cdecl]<double, IntPtr> PyFloat_FromDouble { get; }
2650-
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr> PyFloat_FromString { get; }
2632+
internal static delegate* unmanaged[Cdecl]<BorrowedReference, NewReference> PyFloat_FromString { get; }
26512633
internal static delegate* unmanaged[Cdecl]<IntPtr, double> PyFloat_AsDouble { get; }
26522634
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr> PyNumber_Add { get; }
26532635
internal static delegate* unmanaged[Cdecl]<IntPtr, IntPtr, IntPtr> PyNumber_Subtract { get; }

src/runtime/runtime_data.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ internal static void Stash()
8585
Marshal.Copy(data, 0, mem + IntPtr.Size, (int)ms.Length);
8686

8787
ClearCLRData();
88-
#warning this leaks memory in mem
88+
8989
NewReference capsule = PyCapsule_New(mem, IntPtr.Zero, IntPtr.Zero);
9090
PySys_SetObject("clr_data", capsule);
9191
// Let the dictionary own the reference

src/runtime/typemanager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ public static IntPtr CreateObjectType()
938938
resRef.Dispose();
939939
BorrowedReference A = Runtime.PyDict_GetItemString(globals, "A");
940940
Debug.Assert(!A.IsNull);
941-
return Runtime.NewRef(A).DangerousMoveToPointer();
941+
return new NewReference(A).DangerousMoveToPointer();
942942
}
943943
}
944944
}

0 commit comments

Comments
 (0)
0