diff --git a/com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c b/com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c index 6b062aee269b78d651a63fb41437aeed80733dbb..af38cfcc846d04ece15ebe0120913ee60a101c23 100644 --- a/com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c +++ b/com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c @@ -653,3 +653,9 @@ int R_isGlobal(CTXT context) { jmethodID methodID = checkGetMethodID(jniEnv, CallRFFIHelperClass, "R_isGlobal", "(Ljava/lang/Object;)I", 1); return (*jniEnv)->CallStaticIntMethod(jniEnv, CallRFFIHelperClass, methodID, context); } + +int R_isEqual(void* x, void* y) { + JNIEnv *jniEnv = getEnv(); + jmethodID methodID = checkGetMethodID(jniEnv, CallRFFIHelperClass, "R_isEqual", "(Ljava/lang/Object;Ljava/lang/Object;)I", 1); + return (*jniEnv)->CallStaticIntMethod(jniEnv, CallRFFIHelperClass, methodID, x, y); +} diff --git a/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx b/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx index 59e5f90184ec1c719a8b8d270f7e504a0947892b..88fe94a62a6d39d815458b68669f08a7f1c49529 100644 --- a/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx +++ b/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx @@ -13,6 +13,7 @@ extern SEXP R_getContextCall(CTXT); extern SEXP R_getContextSrcRef(CTXT); extern int R_insideBrowser(); extern int R_isGlobal(CTXT); +extern int R_isEqual(void*, void*); #else . +1 diff --git a/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jnr/CallRFFIHelper.java b/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jnr/CallRFFIHelper.java index 81c57b689ead21ac118f5bbb0b75a327f91f9948..d1301b102fec82ae047f952d8b8ce168362be5b9 100644 --- a/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jnr/CallRFFIHelper.java +++ b/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/jnr/CallRFFIHelper.java @@ -1383,4 +1383,11 @@ public class CallRFFIHelper { return rCaller == RCaller.topLevel ? 1 : 0; } + public static int R_isEqual(Object x, Object y) { + if (RFFIUtils.traceEnabled()) { + RFFIUtils.traceUpCall("isEqual", x, y); + } + return x == y ? 1 : 0; + } + }