diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyProcsWrapper.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyProcsWrapper.java index df5ee516e9..2d87bce16d 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyProcsWrapper.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyProcsWrapper.java @@ -136,13 +136,20 @@ protected Object execute(Object[] arguments) throws UnsupportedTypeException, Ar } @ExportMessage + @TruffleBoundary protected boolean isPointer() { - return isNative(); + long pointer = PythonContext.get(null).getCApiContext().getClosurePointer(this); + return pointer != -1; } @ExportMessage - protected long asPointer() { - return getNativePointer(); + @TruffleBoundary + protected long asPointer() throws UnsupportedMessageException { + long pointer = PythonContext.get(null).getCApiContext().getClosurePointer(this); + if (pointer == -1) { + throw UnsupportedMessageException.create(); + } + return pointer; } protected abstract String getSignature(); @@ -153,7 +160,7 @@ protected void toNative( @CachedLibrary(limit = "1") SignatureLibrary signatureLibrary) { if (!isPointer()) { CApiContext cApiContext = PythonContext.get(null).getCApiContext(); - setNativePointer(cApiContext.registerClosure(getSignature(), this, getDelegate(), signatureLibrary)); + cApiContext.registerClosure(getSignature(), this, getDelegate(), signatureLibrary); } }