Skip to content

Commit fe5fdab

Browse files
committed
Remove 'PNone.NATIVE_NONE' and properly wrap 'PNone.NONE'.
1 parent 3ff1606 commit fe5fdab

File tree

9 files changed

+25
-71
lines changed

9 files changed

+25
-71
lines changed

graalpython/com.oracle.graal.python.cext/src/capi.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ static void initialize_type_structure(PyTypeObject* structure, const char* typna
4747
}
4848

4949
static void initialize_globals() {
50-
void *jnone = polyglot_as__object(polyglot_invoke(PY_TRUFFLE_CEXT, "Py_None"));
50+
void *jnone = polyglot_as__object(to_sulong(polyglot_invoke(PY_TRUFFLE_CEXT, "Py_None")));
5151
truffle_assign_managed(&_Py_NoneStruct, jnone);
5252
void *jnotimpl = polyglot_as__object(polyglot_get_member(PY_BUILTIN, "NotImplemented"));
5353
truffle_assign_managed(&_Py_NotImplementedStruct, jnotimpl);
@@ -152,10 +152,6 @@ typedef struct PyObjectHandle {
152152
PyObject_HEAD
153153
} PyObjectHandle;
154154

155-
PyObject* PyNoneHandle(void* jobj) {
156-
return &_Py_NoneStruct;
157-
}
158-
159155
uint64_t PyTruffle_Wchar_Size() {
160156
return SIZEOF_WCHAR_T;
161157
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/TruffleCextBuiltins.java

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
6464
import com.oracle.graal.python.builtins.objects.complex.PComplex;
6565
import com.oracle.graal.python.builtins.objects.cpyobject.NativeCAPISymbols;
66-
import com.oracle.graal.python.builtins.objects.cpyobject.PCallNativeNode;
6766
import com.oracle.graal.python.builtins.objects.cpyobject.PythonNativeClass;
6867
import com.oracle.graal.python.builtins.objects.cpyobject.PythonNativeObject;
6968
import com.oracle.graal.python.builtins.objects.cpyobject.PythonObjectNativeWrapper;
@@ -232,8 +231,6 @@ Object run(String str) {
232231
@Builtin(name = "to_sulong", fixedNumOfArguments = 1)
233232
@GenerateNodeFactory
234233
public abstract static class ToSulongNode extends PythonUnaryBuiltinNode {
235-
@CompilationFinal private TruffleObject PyNoneHandle;
236-
@Child private PCallNativeNode callNative;
237234

238235
/*
239236
* This is very sad. Only for Sulong, we cannot hand out java.lang.Strings, because then it
@@ -277,7 +274,7 @@ Object runNativeObject(PythonNativeObject object) {
277274

278275
@Specialization(guards = "isNone(none)")
279276
Object run(PNone none) {
280-
return callIntoCapi(none, getPyNoneHandle());
277+
return PythonObjectNativeWrapper.wrap(none);
281278
}
282279

283280
@Specialization(guards = "!isNativeClass(object)")
@@ -294,22 +291,6 @@ protected boolean isNativeClass(PythonObject o) {
294291
return o instanceof PythonNativeClass;
295292
}
296293

297-
private TruffleObject getPyNoneHandle() {
298-
if (PyNoneHandle == null) {
299-
CompilerDirectives.transferToInterpreterAndInvalidate();
300-
PyNoneHandle = (TruffleObject) getContext().getEnv().importSymbol(NativeCAPISymbols.FUN_PY_NONE_HANDLE);
301-
}
302-
return PyNoneHandle;
303-
}
304-
305-
private Object callIntoCapi(PythonAbstractObject arg, TruffleObject function) {
306-
if (callNative == null) {
307-
CompilerDirectives.transferToInterpreterAndInvalidate();
308-
callNative = insert(PCallNativeNode.create(1));
309-
}
310-
return callNative.execute(function, new Object[]{arg});
311-
}
312-
313294
public static ToSulongNode create() {
314295
return TruffleCextBuiltinsFactory.ToSulongNodeFactory.create(null);
315296
}
@@ -697,7 +678,7 @@ private Object checkFunctionResult(Object result) {
697678
abstract static class PNativeToPTypeNode extends PForeignToPTypeNode {
698679

699680
@Specialization
700-
protected static PythonObject fromNativeNone(PythonObjectNativeWrapper nativeWrapper) {
681+
protected static PythonAbstractObject fromNativeNone(PythonObjectNativeWrapper nativeWrapper) {
701682
return nativeWrapper.getPythonObject();
702683
}
703684

@@ -720,7 +701,7 @@ PNone doNoValue() {
720701
abstract static class PyNoneNode extends PythonBuiltinNode {
721702
@Specialization
722703
PNone doNativeNone() {
723-
return PNone.NATIVE_NONE;
704+
return PNone.NONE;
724705
}
725706
}
726707

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PNone.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,6 @@ public final class PNone extends PythonAbstractObject {
3030
public static final PNone NONE = new PNone();
3131
public static final PNone NO_VALUE = new PNone();
3232

33-
/**
34-
* Object representing {@code None} in the native code but is not a interop {@code null} value
35-
* such that it is not interpreted as a null pointer.
36-
*/
37-
public static final PNone NATIVE_NONE = new PNone();
38-
3933
private PNone() {
4034
}
4135

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/PythonAbstractObject.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,24 @@
3838
*/
3939
package com.oracle.graal.python.builtins.objects;
4040

41+
import com.oracle.graal.python.builtins.objects.cpyobject.PythonObjectNativeWrapper;
4142
import com.oracle.graal.python.runtime.interop.PythonMessageResolutionForeign;
4243
import com.oracle.truffle.api.interop.ForeignAccess;
4344
import com.oracle.truffle.api.interop.TruffleObject;
4445

4546
public abstract class PythonAbstractObject implements TruffleObject, Comparable<Object> {
47+
private PythonObjectNativeWrapper nativeWrapper;
48+
4649
public final ForeignAccess getForeignAccess() {
4750
return PythonMessageResolutionForeign.ACCESS;
4851
}
52+
53+
public PythonObjectNativeWrapper getNativeWrapper() {
54+
return nativeWrapper;
55+
}
56+
57+
public void setNativeWrapper(PythonObjectNativeWrapper nativeWrapper) {
58+
assert this.nativeWrapper == null;
59+
this.nativeWrapper = nativeWrapper;
60+
}
4961
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cpyobject/PythonObjectNativeWrapper.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,19 @@
3838
*/
3939
package com.oracle.graal.python.builtins.objects.cpyobject;
4040

41-
import com.oracle.graal.python.builtins.objects.object.PythonObject;
41+
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
4242
import com.oracle.truffle.api.interop.ForeignAccess;
4343
import com.oracle.truffle.api.interop.TruffleObject;
4444

4545
/**
46-
* Used to wrap {@link PythonObject} when used in native code. This wrapper mimics the correct shape
47-
* of the corresponding native type {@code struct _object}.
46+
* Used to wrap {@link PythonAbstractObject} when used in native code. This wrapper mimics the
47+
* correct shape of the corresponding native type {@code struct _object}.
4848
*/
4949
public class PythonObjectNativeWrapper implements TruffleObject {
50-
private final PythonObject pythonObject;
50+
private final PythonAbstractObject pythonObject;
5151
private Object nativePointer;
5252

53-
public PythonObjectNativeWrapper(PythonObject object) {
53+
public PythonObjectNativeWrapper(PythonAbstractObject object) {
5454
this.pythonObject = object;
5555
}
5656

@@ -68,7 +68,7 @@ public void setNativePointer(Object nativePointer) {
6868
this.nativePointer = nativePointer;
6969
}
7070

71-
public PythonObject getPythonObject() {
71+
public PythonAbstractObject getPythonObject() {
7272
return pythonObject;
7373
}
7474

@@ -80,7 +80,7 @@ public ForeignAccess getForeignAccess() {
8080
return PythonObjectNativeWrapperMRForeign.ACCESS;
8181
}
8282

83-
public static PythonObjectNativeWrapper wrap(PythonObject obj) {
83+
public static PythonObjectNativeWrapper wrap(PythonAbstractObject obj) {
8484
// important: native wrappers are cached
8585
PythonObjectNativeWrapper nativeWrapper = obj.getNativeWrapper();
8686
if (nativeWrapper == null) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cpyobject/PythonObjectNativeWrapperMR.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,8 @@ Object runNativeObject(PythonNativeObject object) {
388388

389389
@Specialization
390390
Object runNone(PNone object) {
391-
return ensureIsPointer(callUnaryIntoCapi(object, getPyNoneHandle()));
391+
PythonClass clazz = getClassNode().execute(object);
392+
return ensureIsPointer(callBinaryIntoCapi(getPyObjectHandle_ForJavaObject(), object, clazz.getFlags()));
392393
}
393394

394395
@Specialization(guards = "isNonNative(object)")
@@ -444,14 +445,6 @@ protected boolean isNonNative(PythonClass klass) {
444445
return !(klass instanceof PythonNativeClass);
445446
}
446447

447-
private TruffleObject getPyNoneHandle() {
448-
if (PyNoneHandle == null) {
449-
CompilerDirectives.transferToInterpreterAndInvalidate();
450-
PyNoneHandle = (TruffleObject) getContext().getEnv().importSymbol(NativeCAPISymbols.FUN_PY_NONE_HANDLE);
451-
}
452-
return PyNoneHandle;
453-
}
454-
455448
private Object callUnaryIntoCapi(PythonAbstractObject arg, TruffleObject fun) {
456449
if (callNativeUnary == null) {
457450
CompilerDirectives.transferToInterpreterAndInvalidate();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/PythonObject.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
import com.oracle.graal.python.PythonLanguage;
3636
import com.oracle.graal.python.builtins.objects.PNone;
3737
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
38-
import com.oracle.graal.python.builtins.objects.cpyobject.PythonObjectNativeWrapper;
3938
import com.oracle.graal.python.builtins.objects.dict.PDict;
4039
import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass;
4140
import com.oracle.graal.python.builtins.objects.type.PythonClass;
@@ -52,8 +51,6 @@ public class PythonObject extends PythonAbstractObject {
5251
protected final PythonClass pythonClass;
5352
@CompilationFinal protected DynamicObject storage;
5453
private PDict dict;
55-
private PythonObjectNativeWrapper nativeWrapper;
56-
5754
public PythonObject(PythonClass pythonClass) {
5855
if (pythonClass == null) {
5956
CompilerDirectives.transferToInterpreter();
@@ -201,13 +198,4 @@ public PDict getDict() {
201198
public void setDict(PDict dict) {
202199
this.dict = dict;
203200
}
204-
205-
public PythonObjectNativeWrapper getNativeWrapper() {
206-
return nativeWrapper;
207-
}
208-
209-
public void setNativeWrapper(PythonObjectNativeWrapper nativeWrapper) {
210-
assert this.nativeWrapper == null;
211-
this.nativeWrapper = nativeWrapper;
212-
}
213201
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/PGuards.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,6 @@ public static boolean isNone(Object value) {
9191
return value == PNone.NONE;
9292
}
9393

94-
public static boolean isNativeNone(Object value) {
95-
return value == PNone.NATIVE_NONE;
96-
}
97-
9894
public static boolean isNoValue(Object object) {
9995
return object == PNone.NO_VALUE;
10096
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/interop/PForeignToPTypeNode.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
*/
4242
package com.oracle.graal.python.nodes.interop;
4343

44-
import com.oracle.graal.python.builtins.objects.PNone;
4544
import com.oracle.graal.python.nodes.PGuards;
4645
import com.oracle.truffle.api.dsl.Fallback;
4746
import com.oracle.truffle.api.dsl.ImportStatic;
@@ -76,11 +75,6 @@ protected static String fromChar(char value) {
7675
return String.valueOf(value);
7776
}
7877

79-
@Specialization(guards = "isNativeNone(none)")
80-
protected static PNone fromNativeNone(@SuppressWarnings("unused") PNone none) {
81-
return PNone.NONE;
82-
}
83-
8478
@Fallback
8579
protected static Object fromObjectGeneric(Object value) {
8680
return value;

0 commit comments

Comments
 (0)