Skip to content

Commit ff60ec4

Browse files
committed
switched arrayobject.cs to the new style references
1 parent d626f7e commit ff60ec4

File tree

5 files changed

+24
-21
lines changed

5 files changed

+24
-21
lines changed

src/runtime/arrayobject.cs

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#nullable enable
12
using System;
23
using System.Collections;
34
using System.Collections.Generic;
@@ -124,14 +125,14 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
124125
Exceptions.SetError(Exceptions.MemoryError, oom.Message);
125126
return default;
126127
}
127-
return CLRObject.GetInstHandle(result, arrayPyType);
128+
return CLRObject.GetReference(result, arrayPyType);
128129
}
129130

130131

131132
/// <summary>
132133
/// Implements __getitem__ for array types.
133134
/// </summary>
134-
public new static IntPtr mp_subscript(IntPtr ob, IntPtr idx)
135+
public new static NewReference mp_subscript(BorrowedReference ob, BorrowedReference idx)
135136
{
136137
var obj = (CLRObject)GetManagedObject(ob);
137138
var arrObj = (ArrayObject)GetManagedObjectType(ob);
@@ -179,7 +180,7 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
179180
catch (IndexOutOfRangeException)
180181
{
181182
Exceptions.SetError(Exceptions.IndexError, "array index out of range");
182-
return IntPtr.Zero;
183+
return default;
183184
}
184185

185186
return Converter.ToPython(value, itemType);
@@ -190,7 +191,7 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
190191
if (!Runtime.PyTuple_Check(idx))
191192
{
192193
Exceptions.SetError(Exceptions.TypeError, "invalid index value");
193-
return IntPtr.Zero;
194+
return default;
194195
}
195196

196197
var count = Runtime.PyTuple_Size(idx);
@@ -199,7 +200,7 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
199200

200201
for (int dimension = 0; dimension < count; dimension++)
201202
{
202-
IntPtr op = Runtime.PyTuple_GetItem(idx, dimension);
203+
BorrowedReference op = Runtime.PyTuple_GetItem(idx, dimension);
203204
if (!Runtime.PyInt_Check(op))
204205
{
205206
return RaiseIndexMustBeIntegerError(op);
@@ -226,7 +227,7 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
226227
catch (IndexOutOfRangeException)
227228
{
228229
Exceptions.SetError(Exceptions.IndexError, "array index out of range");
229-
return IntPtr.Zero;
230+
return default;
230231
}
231232

232233
return Converter.ToPython(value, itemType);
@@ -236,14 +237,14 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
236237
/// <summary>
237238
/// Implements __setitem__ for array types.
238239
/// </summary>
239-
public static new int mp_ass_subscript(IntPtr ob, IntPtr idx, IntPtr v)
240+
public static new int mp_ass_subscript(BorrowedReference ob, BorrowedReference idx, BorrowedReference v)
240241
{
241-
var obj = (CLRObject)GetManagedObject(ob);
242-
var items = obj.inst as Array;
242+
var obj = (CLRObject)GetManagedObject(ob)!;
243+
var items = (Array)obj.inst;
243244
Type itemType = obj.inst.GetType().GetElementType();
244245
int rank = items.Rank;
245246
nint index;
246-
object value;
247+
object? value;
247248

248249
if (items.IsReadOnly)
249250
{
@@ -300,7 +301,7 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
300301

301302
for (int dimension = 0; dimension < count; dimension++)
302303
{
303-
IntPtr op = Runtime.PyTuple_GetItem(idx, dimension);
304+
BorrowedReference op = Runtime.PyTuple_GetItem(idx, dimension);
304305
if (!Runtime.PyInt_Check(op))
305306
{
306307
RaiseIndexMustBeIntegerError(op);
@@ -335,7 +336,7 @@ static NewReference NewInstance(Type elementType, BorrowedReference arrayPyType,
335336
return 0;
336337
}
337338

338-
private static IntPtr RaiseIndexMustBeIntegerError(IntPtr idx)
339+
private static NewReference RaiseIndexMustBeIntegerError(BorrowedReference idx)
339340
{
340341
string tpName = Runtime.PyObject_GetTypeName(idx);
341342
return Exceptions.RaiseTypeError($"array index has type {tpName}, expected an integer");
@@ -344,7 +345,7 @@ private static IntPtr RaiseIndexMustBeIntegerError(IntPtr idx)
344345
/// <summary>
345346
/// Implements __contains__ for array types.
346347
/// </summary>
347-
public static int sq_contains(IntPtr ob, IntPtr v)
348+
public static int sq_contains(BorrowedReference ob, BorrowedReference v)
348349
{
349350
var obj = (CLRObject)GetManagedObject(ob);
350351
Type itemType = obj.inst.GetType().GetElementType();
@@ -379,7 +380,7 @@ static int GetBuffer(BorrowedReference obj, out Py_buffer buffer, PyBUF flags)
379380
Exceptions.SetError(Exceptions.BufferError, "only C-contiguous supported");
380381
return -1;
381382
}
382-
var self = (Array)((CLRObject)GetManagedObject(obj)).inst;
383+
var self = (Array)((CLRObject)GetManagedObject(obj)!).inst;
383384
Type itemType = self.GetType().GetElementType();
384385

385386
bool formatRequested = (flags & PyBUF.FORMATS) != 0;
@@ -405,7 +406,7 @@ static int GetBuffer(BorrowedReference obj, out Py_buffer buffer, PyBUF flags)
405406
buffer = new Py_buffer
406407
{
407408
buf = gcHandle.AddrOfPinnedObject(),
408-
obj = Runtime.SelfIncRef(obj.DangerousGetAddress()),
409+
obj = new NewReference(obj).DangerousMoveToPointer(),
409410
len = (IntPtr)(self.LongLength*itemSize),
410411
itemsize = (IntPtr)itemSize,
411412
_readonly = false,
@@ -427,6 +428,8 @@ static void ReleaseBuffer(BorrowedReference obj, ref Py_buffer buffer)
427428
UnmanagedFree(ref buffer.strides);
428429
UnmanagedFree(ref buffer.suboffsets);
429430

431+
// TODO: decref buffer.obj?
432+
430433
var gcHandle = (GCHandle)buffer._internal;
431434
gcHandle.Free();
432435
buffer._internal = IntPtr.Zero;

src/runtime/classobject.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ public static IntPtr tp_new(IntPtr tpRaw, IntPtr args, IntPtr kw)
8888
return IntPtr.Zero;
8989
}
9090

91-
return CLRObject.GetInstHandle(result, tp).DangerousMoveToPointerOrNull();
91+
return CLRObject.GetReference(result, tp).DangerousMoveToPointerOrNull();
9292
}
9393

9494
if (type.IsAbstract)
@@ -108,7 +108,7 @@ public static IntPtr tp_new(IntPtr tpRaw, IntPtr args, IntPtr kw)
108108
return IntPtr.Zero;
109109
}
110110

111-
return CLRObject.GetInstHandle(obj, tp).DangerousMoveToPointerOrNull();
111+
return CLRObject.GetReference(obj, tp).DangerousMoveToPointerOrNull();
112112
}
113113

114114
private static NewReference NewEnum(Type type, BorrowedReference args, BorrowedReference tp)
@@ -145,7 +145,7 @@ private static NewReference NewEnum(Type type, BorrowedReference args, BorrowedR
145145
}
146146

147147
object enumValue = Enum.ToObject(type, result);
148-
return CLRObject.GetInstHandle(enumValue, tp);
148+
return CLRObject.GetReference(enumValue, tp);
149149
}
150150

151151

src/runtime/clrobject.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static CLRObject GetInstance(object ob)
4545
return GetInstance(ob, cc.tpHandle);
4646
}
4747

48-
internal static NewReference GetInstHandle(object ob, BorrowedReference pyType)
48+
internal static NewReference GetReference(object ob, BorrowedReference pyType)
4949
{
5050
CLRObject co = GetInstance(ob, pyType.DangerousGetAddress());
5151
return NewReference.DangerousFromPointer(co.pyHandle);

src/runtime/constructorbinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public static IntPtr tp_call(IntPtr op, IntPtr args, IntPtr kw)
218218
}
219219
// Instantiate the python object that wraps the result of the method call
220220
// and return the PyObject* to it.
221-
return CLRObject.GetInstHandle(obj, self.typeToCreate.Reference).DangerousMoveToPointer();
221+
return CLRObject.GetReference(obj, self.typeToCreate.Reference).DangerousMoveToPointer();
222222
}
223223

224224
/// <summary>

src/runtime/managedtype.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ internal void FreeGCHandle()
128128
/// <summary>
129129
/// Given a Python object, return the associated managed object type or null.
130130
/// </summary>
131-
internal static ManagedType? GetManagedObjectType(IntPtr ob)
131+
internal static ManagedType? GetManagedObjectType(BorrowedReference ob)
132132
{
133133
if (ob != IntPtr.Zero)
134134
{

0 commit comments

Comments
 (0)