From e3f3b0da977ffb9a1865cfba7fb63c32e073564b Mon Sep 17 00:00:00 2001 From: Adam Welc <adam.welc@oracle.com> Date: Mon, 29 Aug 2016 22:34:27 +0200 Subject: [PATCH] Added support for comparing SEXP-s and contexts from native side. --- com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c | 6 ++++++ com.oracle.truffle.r.native/include/ed_Rinterface_gcntx | 1 + .../oracle/truffle/r/runtime/ffi/jnr/CallRFFIHelper.java | 7 +++++++ 3 files changed, 14 insertions(+) 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 6b062aee26..af38cfcc84 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 59e5f90184..88fe94a62a 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 81c57b689e..d1301b102f 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; + } + } -- GitLab