Skip to content

Commit 3249c75

Browse files
committed
Introduce convenience methods for object conversion
1 parent 0699446 commit 3249c75

39 files changed

Lines changed: 119 additions & 103 deletions

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextDictBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,13 +254,13 @@ static int next(PDict dict, long posPtr, long keyPtr, long valuePtr, long hashPt
254254
Object key = itKey.execute(inliningTarget, storage, it);
255255
assert ensureKeyNode.execute(context, key, false) == key;
256256
// Borrowed reference
257-
NativeMemory.writePtr(keyPtr, toNativeNode.execute(inliningTarget, key, false));
257+
NativeMemory.writePtr(keyPtr, toNativeNode.execute(inliningTarget, key));
258258
}
259259
if (valuePtr != NULLPTR) {
260260
Object value = itValue.execute(inliningTarget, storage, it);
261261
assert ensureValueNode.execute(context, value, false) == value;
262262
// Borrowed reference
263-
NativeMemory.writePtr(valuePtr, toNativeNode.execute(inliningTarget, value, false));
263+
NativeMemory.writePtr(valuePtr, toNativeNode.execute(inliningTarget, value));
264264
}
265265
if (hashPtr != NULLPTR) {
266266
long hash = itKeyHash.execute(null, inliningTarget, storage, it);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextModuleBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ static int doGeneric(PythonModule self, long visitFun, long arg,
327327
PythonContext ctx = PythonContext.get(inliningTarget);
328328
NativeFunctionPointer traverseExecutable = bindFunctionPointer(mTraverse, ExternalFunctionSignature.TRAVERSEPROC);
329329
int ires = ExternalFunctionInvoker.invokeTRAVERSEPROC(null, TIMING_INVOKE_TRAVERSE_PROC, ctx.ensureNativeContext(), BoundaryCallData.getUncached(),
330-
ctx.getThreadState(PythonLanguage.get(inliningTarget)), traverseExecutable, toNativeNode.execute(inliningTarget, self, false), visitFun, arg);
330+
ctx.getThreadState(PythonLanguage.get(inliningTarget)), traverseExecutable, toNativeNode.execute(inliningTarget, self), visitFun, arg);
331331
checkPrimitiveFunctionResultNode.executeLong(inliningTarget, ctx.getThreadState(PythonLanguage.get(inliningTarget)), StringLiterals.T_VISIT, ires);
332332
return ires;
333333
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextObjectBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ static Object doLong(long arrayPointer, int len,
213213
for (int i = 0; i < resolved.length; i++) {
214214
long elem = readPtrArrayElement(arrayPointer, i);
215215
pointers[i] = elem;
216-
resolved[i] = nativeToPythonNode.execute(inliningTarget, elem, false);
216+
resolved[i] = nativeToPythonNode.execute(inliningTarget, elem);
217217
}
218218
HandleContext handleContext = PythonContext.get(inliningTarget).handleContext;
219219
for (int i = 0; i < resolved.length; i++) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/datetime/DateNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,14 @@ static Object newDate(Node inliningTarget, Object cls, int year, int month, int
152152
Shape shape = getInstanceShape.execute(cls);
153153
return new PDate(cls, shape, year, month, day);
154154
} else {
155-
long clsPointer = toNativeNode.execute(inliningTarget, cls, false);
155+
long clsPointer = toNativeNode.execute(inliningTarget, cls);
156156
try {
157157
PythonContext context = PythonContext.get(inliningTarget);
158158
var callable = CApiContext.getNativeSymbol(inliningTarget, NativeCAPISymbol.FUN_DATE_SUBTYPE_NEW);
159159
long nativeResult = ExternalFunctionInvoker.invokeDATE_SUBTYPE_NEW(null, C_API_TIMING,
160160
context.ensureNativeContext(), BoundaryCallData.getUncached(), context.getThreadState(PythonLanguage.get(inliningTarget)), callable, clsPointer,
161161
year, month, day);
162-
return checkFunctionResultNode.execute(context, NativeCAPISymbol.FUN_DATE_SUBTYPE_NEW.getTsName(), fromNativeNode.execute(inliningTarget, nativeResult, true));
162+
return checkFunctionResultNode.execute(context, NativeCAPISymbol.FUN_DATE_SUBTYPE_NEW.getTsName(), fromNativeNode.executeTransfer(inliningTarget, nativeResult));
163163
} finally {
164164
Reference.reachabilityFence(cls);
165165
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/datetime/DateTimeNodes.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,16 @@ static Object newDateTime(Node inliningTarget, Object cls, int year, int month,
250250
Shape shape = getInstanceShape.execute(cls);
251251
return new PDateTime(cls, shape, year, month, day, hour, minute, second, microsecond, tzInfo, fold);
252252
} else {
253-
long clsPointer = toNativeNode.execute(inliningTarget, cls, false);
253+
long clsPointer = toNativeNode.execute(inliningTarget, cls);
254254
Object effectiveTzInfo = tzInfo != null ? tzInfo : PNone.NO_VALUE;
255-
long tzInfoPointer = toNativeNode.execute(inliningTarget, effectiveTzInfo, false);
255+
long tzInfoPointer = toNativeNode.execute(inliningTarget, effectiveTzInfo);
256256
try {
257257
PythonContext context = PythonContext.get(inliningTarget);
258258
var callable = CApiContext.getNativeSymbol(inliningTarget, NativeCAPISymbol.FUN_DATETIME_SUBTYPE_NEW);
259259
long nativeResult = ExternalFunctionInvoker.invokeDATETIME_SUBTYPE_NEW(null, C_API_TIMING,
260260
context.ensureNativeContext(), BoundaryCallData.getUncached(), context.getThreadState(context.getLanguage(inliningTarget)), callable, clsPointer,
261261
year, month, day, hour, minute, second, microsecond, tzInfoPointer, fold);
262-
return checkFunctionResultNode.execute(context, NativeCAPISymbol.FUN_DATETIME_SUBTYPE_NEW.getTsName(), fromNativeNode.execute(inliningTarget, nativeResult, true));
262+
return checkFunctionResultNode.execute(context, NativeCAPISymbol.FUN_DATETIME_SUBTYPE_NEW.getTsName(), fromNativeNode.executeTransfer(inliningTarget, nativeResult));
263263
} finally {
264264
Reference.reachabilityFence(cls);
265265
Reference.reachabilityFence(effectiveTzInfo);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/BytesBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,14 +201,14 @@ static Object doNative(Node inliningTarget, Object cls, byte[] bytes,
201201
@Cached CApiTransitions.PythonToNativeInternalNode toNative,
202202
@Cached CApiTransitions.NativeToPythonInternalNode toPython) {
203203
long dataPointer = asCharPointerNode.execute(bytes);
204-
long clsPointer = toNative.execute(inliningTarget, cls, false);
204+
long clsPointer = toNative.execute(inliningTarget, cls);
205205
try {
206206
PythonContext context = PythonContext.get(inliningTarget);
207207
var callable = CApiContext.getNativeSymbol(inliningTarget, FUN_BYTES_SUBTYPE_NEW);
208208
long result = ExternalFunctionInvoker.invokeBYTES_SUBTYPE_NEW(null, C_API_TIMING,
209209
context.ensureNativeContext(), BoundaryCallData.getUncached(),
210210
context.getThreadState(context.getLanguage(inliningTarget)), callable, clsPointer, dataPointer, bytes.length);
211-
return toPython.execute(inliningTarget, result, true);
211+
return toPython.executeTransfer(inliningTarget, result);
212212
} finally {
213213
Reference.reachabilityFence(cls);
214214
NativeMemory.free(dataPointer);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiMemberAccessNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ Object doGeneric(@SuppressWarnings("unused") VirtualFrame frame, Object self,
215215
// in case of T_PYSSIZET, we assume that 'sizeof(Py_ssize_t)' is 'Long.BYTES'
216216
assert type != T_PYSSIZET || CStructs.Py_ssize_t.size() == Long.BYTES;
217217

218-
long selfPtr = toNativeNode.execute(inliningTarget, self, false);
218+
long selfPtr = toNativeNode.execute(inliningTarget, self);
219219
long memberPtr = NativeMemory.getFieldPtr(selfPtr, offset);
220220
long addr;
221221
switch (type) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CExtNodes.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -208,12 +208,12 @@ static Object doGeneric(Node inliningTarget, Object object, double arg,
208208
NativeFunctionPointer callable = CApiContext.getNativeSymbol(inliningTarget, NativeCAPISymbol.FUN_FLOAT_SUBTYPE_NEW);
209209
long result;
210210
try {
211-
result = ExternalFunctionInvoker.invokeFLOAT_SUBTYPE_NEW(callable.getAddress(), toNativeNode.execute(inliningTarget, object, false), arg);
211+
result = ExternalFunctionInvoker.invokeFLOAT_SUBTYPE_NEW(callable.getAddress(), toNativeNode.execute(inliningTarget, object), arg);
212212
} catch (Throwable e) {
213213
throw CompilerDirectives.shouldNotReachHere(e);
214214
}
215215
return checkFunctionResultNode.execute(PythonContext.get(inliningTarget), NativeCAPISymbol.FUN_FLOAT_SUBTYPE_NEW.getTsName(),
216-
toJavaNode.execute(inliningTarget, result, true));
216+
toJavaNode.executeTransfer(inliningTarget, result));
217217
}
218218
}
219219

@@ -232,9 +232,9 @@ static Object doGeneric(Node inliningTarget, Object object, Object arg,
232232
NativeFunctionPointer callable = CApiContext.getNativeSymbol(inliningTarget, NativeCAPISymbol.FUN_TUPLE_SUBTYPE_NEW);
233233
try {
234234
long result = ExternalFunctionInvoker.invokeTUPLE_SUBTYPE_NEW(callable.getAddress(),
235-
toNativeNode.execute(inliningTarget, object, false),
236-
toNativeNode.execute(inliningTarget, arg, false));
237-
return toJavaNode.execute(inliningTarget, result, true);
235+
toNativeNode.execute(inliningTarget, object),
236+
toNativeNode.execute(inliningTarget, arg));
237+
return toJavaNode.executeTransfer(inliningTarget, result);
238238
} catch (Throwable e) {
239239
throw CompilerDirectives.shouldNotReachHere(e);
240240
}
@@ -257,10 +257,10 @@ static Object doGeneric(Node inliningTarget, Object object, Object arg,
257257
try {
258258
Object promotedArg = ensurePythonObjectNode.execute(PythonContext.get(inliningTarget), arg, false);
259259
long result = ExternalFunctionInvoker.invokeUNICODE_SUBTYPE_NEW(callable.getAddress(),
260-
toNativeNode.execute(inliningTarget, object, false),
261-
toNativeNode.execute(inliningTarget, promotedArg, false));
260+
toNativeNode.execute(inliningTarget, object),
261+
toNativeNode.execute(inliningTarget, promotedArg));
262262
Reference.reachabilityFence(promotedArg);
263-
return toJavaNode.execute(inliningTarget, result, true);
263+
return toJavaNode.executeTransfer(inliningTarget, result);
264264
} catch (Throwable e) {
265265
throw CompilerDirectives.shouldNotReachHere(e);
266266
}
@@ -848,7 +848,7 @@ static void doDecref(Node inliningTarget, long pointer,
848848
if (HandlePointerConverter.pointsToPyFloatHandle(pointer) || HandlePointerConverter.pointsToPyIntHandle(pointer)) {
849849
return;
850850
}
851-
Object object = toPythonNode.execute(inliningTarget, pointer, false);
851+
Object object = toPythonNode.execute(inliningTarget, pointer);
852852
if (object instanceof PythonAbstractNativeObject) {
853853
// Native objects use their native reference count and deallocator.
854854
if (CApiTransitions.subNativeRefCount(pointer, 1) == 0) {
@@ -1220,13 +1220,13 @@ static PMemoryView fromNative(Node inliningTarget, PythonNativeObject buf, int f
12201220
@Cached PythonToNativeInternalNode toNativeNode,
12211221
@Cached NativeToPythonInternalNode asPythonObjectNode,
12221222
@Cached(inline = false) PyObjectCheckFunctionResultNode checkFunctionResultNode) {
1223-
long bufPointer = toNativeNode.execute(inliningTarget, buf, false);
1223+
long bufPointer = toNativeNode.execute(inliningTarget, buf);
12241224
try {
12251225
PythonContext context = PythonContext.get(inliningTarget);
12261226
var callable = CApiContext.getNativeSymbol(inliningTarget, FUN_GRAALPY_MEMORYVIEW_FROM_OBJECT);
12271227
long result = ExternalFunctionInvoker.invokeGRAALPY_MEMORYVIEW_FROM_OBJECT(null, C_API_TIMING, context.ensureNativeContext(), BoundaryCallData.getUncached(),
12281228
context.getThreadState(PythonLanguage.get(inliningTarget)), callable, bufPointer, flags);
1229-
return (PMemoryView) checkFunctionResultNode.execute(context, FUN_GRAALPY_MEMORYVIEW_FROM_OBJECT.getTsName(), asPythonObjectNode.execute(inliningTarget, result, true));
1229+
return (PMemoryView) checkFunctionResultNode.execute(context, FUN_GRAALPY_MEMORYVIEW_FROM_OBJECT.getTsName(), asPythonObjectNode.executeTransfer(inliningTarget, result));
12301230
} finally {
12311231
Reference.reachabilityFence(buf);
12321232
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/ExternalFunctionNodes.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ static Object doIt(long pointer,
253253
@Bind Node inliningTarget,
254254
@Cached CastToTruffleStringNode castToStringNode,
255255
@Cached NativeToPythonInternalNode nativeToPythonNode) {
256-
Object result = nativeToPythonNode.execute(inliningTarget, pointer, false);
256+
Object result = nativeToPythonNode.execute(inliningTarget, pointer);
257257
if (result == PNone.NO_VALUE) {
258258
return result;
259259
}
@@ -2283,14 +2283,14 @@ static long doGeneric(PythonContext context, Object[] args,
22832283
NativeFunctionPointer callable = CApiContext.getNativeSymbol(inliningTarget, FUN_PY_TYPE_GENERIC_ALLOC);
22842284
long op = ExternalFunctionInvoker.invokeTYPE_GENERIC_ALLOC(null, TIMING_invokeTypeGenericAlloc, context.ensureNativeContext(),
22852285
BoundaryCallData.getUncached(), context.getThreadState(context.getLanguage(inliningTarget)), callable,
2286-
pythonToNativeNode.execute(inliningTarget, argsTupleClass, false), n);
2286+
pythonToNativeNode.execute(inliningTarget, argsTupleClass), n);
22872287

22882288
long obItem = CStructAccess.getFieldPtr(op, CFields.PyTupleObject__ob_item);
22892289

22902290
for (int i = 0; i < n; i++) {
22912291
Object promoted = materializePrimitiveNode.execute(context, args[i], false);
22922292
args[i] = promoted;
2293-
writePtrArrayElement(obItem, i, pythonToNativeNode.execute(inliningTarget, promoted, true));
2293+
writePtrArrayElement(obItem, i, pythonToNativeNode.executeNewRef(inliningTarget, promoted));
22942294
}
22952295

22962296
if (LOGGER.isLoggable(Level.FINE)) {
@@ -2329,7 +2329,7 @@ static long doGeneric(PythonContext context, Object[] args,
23292329
NativeFunctionPointer callable = CApiContext.getNativeSymbol(inliningTarget, FUN_PY_TYPE_GENERIC_ALLOC);
23302330
long op = ExternalFunctionInvoker.invokeTYPE_GENERIC_ALLOC(null, CreateNativeArgsTupleNode.TIMING_invokeTypeGenericAlloc, context.ensureNativeContext(),
23312331
BoundaryCallData.getUncached(), context.getThreadState(context.getLanguage(inliningTarget)), callable,
2332-
pythonToNativeNode.execute(inliningTarget, argsTupleClass, false), n);
2332+
pythonToNativeNode.execute(inliningTarget, argsTupleClass), n);
23332333

23342334
long obItem = CStructAccess.getFieldPtr(op, CFields.PyTupleObject__ob_item);
23352335

@@ -2338,7 +2338,7 @@ static long doGeneric(PythonContext context, Object[] args,
23382338
PString promoted = internStringArg(context, (TruffleString) args[i]);
23392339
assert EnsurePythonObjectNode.doesNotNeedPromotion(promoted);
23402340
args[i] = promoted;
2341-
long nativeString = pythonToNativeNode.execute(inliningTarget, promoted, true);
2341+
long nativeString = pythonToNativeNode.executeNewRef(inliningTarget, promoted);
23422342
CApiTransitions.setGraalPyUnicodeObjectInterned(HandlePointerConverter.pointerToStub(nativeString), CApiTransitions.GRAALPY_UNICODE_INTERN_STATE_INTERNED);
23432343
writePtrArrayElement(obItem, i, nativeString);
23442344
}

0 commit comments

Comments
 (0)