diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java index f05db2645238af1a811fc35558b8746c4b71d8bf..ac7eec51f7b4f08c9eea46438764b918bcacb3a4 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/common/JavaUpCallsRFFIImpl.java @@ -1714,31 +1714,37 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { public abstract long execute(Object vector); @Specialization + @TruffleBoundary protected static long get(RIntVector vector) { return vector.allocateNativeContents(); } @Specialization + @TruffleBoundary protected static long get(RLogicalVector vector) { return vector.allocateNativeContents(); } @Specialization + @TruffleBoundary protected static long get(RRawVector vector) { return vector.allocateNativeContents(); } @Specialization + @TruffleBoundary protected static long get(RDoubleVector vector) { return vector.allocateNativeContents(); } @Specialization + @TruffleBoundary protected static long get(RComplexVector vector) { return vector.allocateNativeContents(); } @Specialization + @TruffleBoundary protected static long get(CharSXPWrapper vector) { return vector.allocateNativeContents(); } diff --git a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/NewCustomConnectionNode.java b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/NewCustomConnectionNode.java index c0939de05515878935a027025e84681560e46135..dc8e816a7d5ae6cf967e8facb8c3683e1b13f0c8 100644 --- a/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/NewCustomConnectionNode.java +++ b/com.oracle.truffle.r.ffi.impl/src/com/oracle/truffle/r/ffi/impl/nodes/NewCustomConnectionNode.java @@ -26,6 +26,7 @@ import static com.oracle.truffle.r.runtime.data.NativeDataAccess.readNativeStrin import java.io.IOException; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.interop.ForeignAccess; @@ -45,6 +46,7 @@ public abstract class NewCustomConnectionNode extends FFIUpCallNode.Arg4 { } @Specialization + @TruffleBoundary Object handleStrings(String description, String mode, String className, RExternalPtr connAddr) { try { return new NativeRConnection(description, mode, className, connAddr).asVector(); @@ -58,6 +60,7 @@ public abstract class NewCustomConnectionNode extends FFIUpCallNode.Arg4 { } @Specialization + @TruffleBoundary Object handleAddresses(TruffleObject description, TruffleObject mode, TruffleObject className, RExternalPtr connAddr, @Cached("createAsPointerNode()") Node descriptionAsPtrNode, @Cached("createAsPointerNode()") Node modeAsPtrNode, @Cached("createAsPointerNode()") Node classNameAsPtrNode) { try { diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java index 7da65644548245c232c56cf9a89ba12cdebfe23b..a3f5d4b98c8e8c6e2c16d0e21b4d104ae7c6390b 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/context/Engine.java @@ -172,8 +172,9 @@ public interface Engine { RExpression parse(Source source) throws ParseException; /** - * This is the external interface from {@link org.graalvm.polyglot.Context#eval(Source)}. It is - * required to return a {@link CallTarget} which may be cached for future use, and the + * This is the external interface from + * {@link org.graalvm.polyglot.Context#eval(org.graalvm.polyglot.Source)}. It is required to + * return a {@link CallTarget} which may be cached for future use, and the * {@link org.graalvm.polyglot.Context} is responsible for actually invoking the call target. */ CallTarget parseToCallTarget(Source source, MaterializedFrame executionFrame) throws ParseException; diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java index d1d4cab104a51549b3e5fc15fd43f2f93873ed59..1f7f724a112834a8b6167f6033fd92acd594c93b 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java @@ -24,6 +24,7 @@ package com.oracle.truffle.r.runtime.data; import java.nio.charset.StandardCharsets; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.r.runtime.RRuntime; /** @@ -48,6 +49,7 @@ public final class CharSXPWrapper extends RObject implements RTruffleObject { this.contents = contents; } + @TruffleBoundary public String getContents() { if (this == NA) { // The NA string may have been moved to the native space if someone called R_CHAR on it, @@ -58,10 +60,12 @@ public final class CharSXPWrapper extends RObject implements RTruffleObject { return NativeDataAccess.getData(this, contents); } + @TruffleBoundary public byte getByteAt(int index) { return NativeDataAccess.getDataAt(this, getBytes(), index); } + @TruffleBoundary public int getLength() { return NativeDataAccess.getDataLength(this, getBytes()); }