diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java index 604725de03901d2cc9219489c34e6b7c9fbc4472..4e2a81101dde3a94799a5219af80a090d17c33e3 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/RForeignAccessFactoryImpl.java @@ -25,6 +25,7 @@ package com.oracle.truffle.r.engine.interop; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.Assumption; +import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.Truffle; import com.oracle.truffle.api.TruffleLanguage; import com.oracle.truffle.api.interop.ForeignAccess; @@ -75,7 +76,9 @@ import com.oracle.truffle.r.runtime.ffi.DLL.DotSymbol; * {@link RContext#getInstance()} will fail. In short the mapping has to be established using * {@link Thread} not {@link RContext} and there is no call that informs us ahead of a call to * {@link #getForeignAccess} that a new thread is in play. We use a Truffle {@link Assumption} to - * provide a fast path in the normal, single-threaded, case. + * provide a fast path in the normal, single-threaded, case. TODO Apparently a call to + * {@link #getForeignAccess(RTruffleObject)} should,in fact, only occur on the slow path, and an + * assertion to that effect has been added. If true, then the fast path code can be simplified. * * For most types we use the {@link MessageResolution} facility to automatically generate the * factory for creating the {@link ForeignAccess} instance. The exceptions are the (many) subclasses @@ -235,6 +238,7 @@ public final class RForeignAccessFactoryImpl implements RForeignAccessFactory { @Override public ForeignAccess getForeignAccess(RTruffleObject obj) { + CompilerAsserts.neverPartOfCompilation("getForeignAccess"); ForeignAccessState foreignAccessState; if (singleStateAssumption.isValid()) { foreignAccessState = singleForeignAccessState;