Skip to content

Commit e5d299e

Browse files
authored
Merge pull request #531 from dmitriyse/py_ssize_t-fix
Interop methods with Py_ssize_t works differently in NetCoreApp 2.0
2 parents 08344b7 + 1e41038 commit e5d299e

15 files changed

+252
-76
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
2929
- Fixed Visual Studio 2017 compat ([#434][i434]) for setup.py
3030
- Fixed crashes when integrating pythonnet in Unity3d ([#714][i714]),
3131
related to unloading the Application Domain
32+
- Fixed interop methods with Py_ssize_t. NetCoreApp 2.0 is more sensitive than net40 and requires this fix. ([#531][p531])
3233
- Fixed crash on exit of the Python interpreter if a python class
3334
derived from a .NET class has a `__namespace__` or `__assembly__`
3435
attribute ([#481][i481])
@@ -689,3 +690,4 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
689690
[p163]: https://github.com/pythonnet/pythonnet/pull/163
690691
[p625]: https://github.com/pythonnet/pythonnet/pull/625
691692
[i131]: https://github.com/pythonnet/pythonnet/issues/131
693+
[p531]: https://github.com/pythonnet/pythonnet/pull/531

src/embed_tests/TestPySequence.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,8 @@ public void TestRepeat()
6969
PyObject actual = t1.Repeat(3);
7070
Assert.AreEqual("FooFooFoo", actual.ToString());
7171

72-
// On 32 bit system this argument should be int, but on the 64 bit system this should be long value.
73-
// This works on the Framework 4.0 accidentally, it should produce out of memory!
74-
// actual = t1.Repeat(-3);
75-
// Assert.AreEqual("", actual.ToString());
72+
actual = t1.Repeat(-3);
73+
Assert.AreEqual("", actual.ToString());
7674
}
7775

7876
[Test]

src/runtime/arrayobject.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public static IntPtr mp_subscript(IntPtr ob, IntPtr idx)
9393
return IntPtr.Zero;
9494
}
9595

96-
int count = Runtime.PyTuple_Size(idx);
96+
var count = Runtime.PyTuple_Size(idx);
9797

9898
var args = new int[count];
9999

@@ -186,7 +186,7 @@ public static int mp_ass_subscript(IntPtr ob, IntPtr idx, IntPtr v)
186186
return -1;
187187
}
188188

189-
int count = Runtime.PyTuple_Size(idx);
189+
var count = Runtime.PyTuple_Size(idx);
190190
var args = new int[count];
191191

192192
for (var i = 0; i < count; i++)

src/runtime/assemblymanager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private static Assembly ResolveHandler(object ob, ResolveEventArgs args)
140140
internal static void UpdatePath()
141141
{
142142
IntPtr list = Runtime.PySys_GetObject("path");
143-
int count = Runtime.PyList_Size(list);
143+
var count = Runtime.PyList_Size(list);
144144
if (count != pypath.Count)
145145
{
146146
pypath.Clear();

src/runtime/classobject.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,10 @@ public static int mp_ass_subscript(IntPtr ob, IntPtr idx, IntPtr v)
230230
}
231231

232232
// Get the args passed in.
233-
int i = Runtime.PyTuple_Size(args);
233+
var i = Runtime.PyTuple_Size(args);
234234
IntPtr defaultArgs = cls.indexer.GetDefaultArgs(args);
235-
int numOfDefaultArgs = Runtime.PyTuple_Size(defaultArgs);
236-
int temp = i + numOfDefaultArgs;
235+
var numOfDefaultArgs = Runtime.PyTuple_Size(defaultArgs);
236+
var temp = i + numOfDefaultArgs;
237237
IntPtr real = Runtime.PyTuple_New(temp + 1);
238238
for (var n = 0; n < i; n++)
239239
{

src/runtime/converter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -842,7 +842,7 @@ private static void SetConversionError(IntPtr value, Type target)
842842
private static bool ToArray(IntPtr value, Type obType, out object result, bool setError)
843843
{
844844
Type elementType = obType.GetElementType();
845-
int size = Runtime.PySequence_Size(value);
845+
var size = Runtime.PySequence_Size(value);
846846
result = null;
847847

848848
if (size < 0)

src/runtime/exceptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ public static void SetError(Exception e)
276276
/// </remarks>
277277
public static bool ErrorOccurred()
278278
{
279-
return Runtime.PyErr_Occurred() != 0;
279+
return Runtime.PyErr_Occurred() != IntPtr.Zero;
280280
}
281281

282282
/// <summary>

src/runtime/importhook.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ public static IntPtr __import__(IntPtr self, IntPtr args, IntPtr kw)
155155
// hook is saved as this.py_import. This version handles CLR
156156
// import and defers to the normal builtin for everything else.
157157

158-
int num_args = Runtime.PyTuple_Size(args);
158+
var num_args = Runtime.PyTuple_Size(args);
159159
if (num_args < 1)
160160
{
161161
return Exceptions.RaiseTypeError("__import__() takes at least 1 argument (0 given)");

src/runtime/indexer.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ internal void SetItem(IntPtr inst, IntPtr args)
5656

5757
internal bool NeedsDefaultArgs(IntPtr args)
5858
{
59-
int pynargs = Runtime.PyTuple_Size(args);
59+
var pynargs = Runtime.PyTuple_Size(args);
6060
MethodBase[] methods = SetterBinder.GetMethods();
6161
if (methods.Length == 0)
6262
{
@@ -72,7 +72,7 @@ internal bool NeedsDefaultArgs(IntPtr args)
7272
return false;
7373
}
7474

75-
for (int v = pynargs; v < clrnargs; v++)
75+
for (var v = pynargs; v < clrnargs; v++)
7676
{
7777
if (pi[v].DefaultValue == DBNull.Value)
7878
{
@@ -95,7 +95,7 @@ internal IntPtr GetDefaultArgs(IntPtr args)
9595
{
9696
return Runtime.PyTuple_New(0);
9797
}
98-
int pynargs = Runtime.PyTuple_Size(args);
98+
var pynargs = Runtime.PyTuple_Size(args);
9999

100100
// Get the default arg tuple
101101
MethodBase[] methods = SetterBinder.GetMethods();

src/runtime/interfaceobject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ static InterfaceObject()
3636
public static IntPtr tp_new(IntPtr tp, IntPtr args, IntPtr kw)
3737
{
3838
var self = (InterfaceObject)GetManagedObject(tp);
39-
int nargs = Runtime.PyTuple_Size(args);
39+
var nargs = Runtime.PyTuple_Size(args);
4040
Type type = self.type;
4141
object obj;
4242

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy