8000 Review changes, update API usage · pythonnet/pythonnet@63de923 · GitHub
[go: up one dir, main page]

Skip to content

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

8000
Appearance settings

Commit 63de923

Browse files
committed
Review changes, update API usage
1 parent ff170e9 commit 63de923

File tree

6 files changed

+51
-57
lines changed

6 files changed

+51
-57
lines changed

src/embed_tests/pyimport.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public void SetUp()
3737
Assert.IsFalse(str == IntPtr.Zero);
3838
BorrowedReference path = Runtime.Runtime.PySys_GetObject("path");
3939
Assert.IsFalse(path.IsNull);
40-
Runtime.Runtime.PyList_Append(path, str);
40+
Runtime.Runtime.PyList_Append(path, new BorrowedReference(str));
4141
Runtime.Runtime.XDecref(str);
4242
}
4343

src/runtime/BorrowedReference.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ readonly ref struct BorrowedReference
99
{
1010
readonly IntPtr pointer;
1111
public bool IsNull => this.pointer == IntPtr.Zero;
12-
public bool IsNone => this.pointer == Runtime.PyNone;
1312

1413
/// <summary>Gets a raw pointer to the Python object</summary>
1514
public IntPtr DangerousGetAddress()

src/runtime/importhook.cs

Lines changed: 24 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ internal static void RestoreRuntimeData(RuntimeDataStorage storage)
101101
var rootHandle = storage.GetValue<IntPtr>("root");
102102
root = (CLRModule)ManagedType.GetManagedObject(rootHandle);
103103
BorrowedReference dict = Runtime.PyImport_GetModuleDict();
104-
Runtime.PyDict_SetItemString(dict.DangerousGetAddress(), "clr", py_clr_module);
104+
Runtime.PyDict_SetItemString(dict, "clr", ClrModuleReference);
105105
SetupNamespaceTracking();
106106
}
107107

@@ -115,14 +115,12 @@ static void SetupImportHook()
115115
var exec = Runtime.PyDict_GetItemString(builtins, "exec");
116116
using var args = NewReference.DangerousFromPointer(Runtime.PyTuple_New(2));
117117

118-
IntPtr codeStr = Runtime.PyString_FromString(LoaderCode);
119-
Runtime.PyTuple_SetItem(args.DangerousGetAddress(), 0, codeStr);
120-
// PyTuple_SetItem steals a reference, mod_dict is borrowed.
118+
var codeStr = NewReference.DangerousFromPointer(Runtime.PyString_FromString(LoaderCode));
119+
Runtime.PyTuple_SetItem(args, 0, codeStr);
121120
var mod_dict = Runtime.PyModule_GetDict(import_hook_module);
122-
Runtime.XIncref(mod_dict.DangerousGetAddress());
123-
Runtime.PyTuple_SetItem(args.DangerousGetAddress(), 1, mod_dict.DangerousGetAddress());
124-
Runtime.PyObject_Call(exec.DangerousGetAddress(), args.DangerousGetAddress(), IntPtr.Zero);
125-
121+
// reference not stolen due to overload incref'ing for us.
122+
Runtime.PyTuple_SetItem(args, 1, mod_dict);
123+
Runtime.PyObject_Call(exec, args, default);
126124
// Set as a sub-module of clr.
127125
if(Runtime.PyModule_AddObject(ClrModuleReference, "loader", import_hook_module) != 0)
128126
{
@@ -132,9 +130,8 @@ static void SetupImportHook()
132130

133131
// Finally, add the hook to the meta path
134132
var findercls = Runtime.PyDict_GetItemString(mod_dict, "DotNetFinder");
135-
var finderCtorArgs = Runtime.PyTuple_New(0);
136-
var finder_inst = Runtime.PyObject_CallObject(findercls.DangerousGetAddress(), finderCtorArgs);
137-
Runtime.XDecref(finderCtorArgs);
133+
var finderCtorArgs = NewReference.DangerousFromPointer(Runtime.PyTuple_New(0));
134+
var finder_inst = Runtime.PyObject_CallObject(findercls, finderCtorArgs);
138135
var metapath = Runtime.PySys_GetObject("meta_path");
139136
Runtime.PyList_Append(metapath, finder_inst);
140137
}
@@ -147,34 +144,19 @@ static void SetupImportHook()
147144
/// </summary>
148145
static void SetupNamespaceTracking()
149146
{
150-
var newset = Runtime.PySet_New(default);
151-
try
147+
using var newset = Runtime.PySet_New(default);
148+
foreach (var ns in AssemblyManager.GetNamespaces())
152149
{
153-
foreach (var ns in AssemblyManager.GetNamespaces())
150+
using var pyNs = NewReference.DangerousFromPointer(Runtime.PyString_FromString(ns));
151+
if (Runtime.PySet_Add(newset, pyNs) != 0)
154152
{
155-
var pyNs = Runtime.PyString_FromString(ns);
156-
try
157-
{
158-
if (Runtime.PySet_Add(newset, new BorrowedReference(pyNs)) != 0)
159-
{
160-
throw PythonException.ThrowLastAsClrException();
161-
}
162-
}
163-
finally
164-
{
165-
Runtime.XDecref(pyNs);
166-
}
153+
throw PythonException.ThrowLastAsClrException();
167154
}
168-
169-
if (Runtime.PyDict_SetItemString(root.dict, availableNsKey, newset.DangerousGetAddress()) != 0)
155+
if (Runtime.PyDict_SetItemString(root.DictRef, availableNsKey, newset) != 0)
170156
{
171157
throw PythonException.ThrowLastAsClrException();
172158
}
173159
}
174-
finally
175-
{
176-
newset.Dispose();
177-
}
178160

179161
}
180162

@@ -189,24 +171,21 @@ static void TeardownNameSpaceTracking()
189171

190172
public static void AddNamespace(string name)
191173
{
192-
using (Py.GIL())
174+
var pyNs = Runtime.PyString_FromString(name);
175+
try
193176
{
194-
var pyNs = Runtime.PyString_FromString(name);
195-
try
177+
var nsSet = Runtime.PyDict_GetItemString(new BorrowedReference(root.dict), availableNsKey);
178+
if (!(nsSet.IsNull || nsSet.DangerousGetAddress() == Runtime.PyNone))
196179
{
197-
var nsSet = Runtime.PyDict_GetItemString(new BorrowedReference(root.dict), availableNsKey);
198-
if (!(nsSet.IsNull && nsSet.IsNone))
180+
if (Runtime.PySet_Add(nsSet, new BorrowedReference(pyNs)) != 0)
199181
{
200-
if (Runtime.PySet_Add(nsSet, new BorrowedReference(pyNs)) != 0)
201-
{
202-
throw PythonException.ThrowLastAsClrException();
203-
}
182+
throw PythonException.ThrowLastAsClrException();
204183
}
205184
}
206-
finally
207-
{
208-
Runtime.XDecref(pyNs);
209-
}
185+
}
186+
finally
187+
{
188+
Runtime.XDecref(pyNs);
210189
}
211190
}
212191

src/runtime/moduleobject.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public void LoadNames()
194194
var pyname = Runtime.PyString_FromString(name);
195195
try
196196
{
197-
if (Runtime.PyList_Append(new BorrowedReference(__all__), pyname) != 0)
197+
if (Runtime.PyList_Append(new BorrowedReference(__all__), new BorrowedReference(pyname)) != 0)
198198
{
199199
throw PythonException.ThrowLastAsClrException();
200200
}
@@ -598,10 +598,8 @@ public static string[] ListAssemblies(bool verbose)
598598
public static ModuleObject _load_clr_module(PyObject spec)
599599
{
600600
ModuleObject mod = null;
601-
using (var modname = spec.GetAttr("name"))
602-
{
603-
mod = ImportHook.Import(modname.ToString());
604-
}
601+
using var modname = spec.GetAttr("name");
602+
mod = ImportHook.Import(modname.ToString());
605603
return mod;
606604
}
607605
}

src/runtime/pylist.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public static PyList AsList(PyObject value)
132132
/// </remarks>
133133
public void Append(PyObject item)
134134
{
135-
int r = Runtime.PyList_Append(this.Reference, item.obj);
135+
int r = Runtime.PyList_Append(this.Reference, new BorrowedReference(item.obj));
136136
if (r < 0)
137137
{
138138
throw PythonException.ThrowLastAsClrException();

src/runtime/runtime.cs

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)
2922
0