From 2ec2f2336a2170f0b5b256f4e1805d457c96d302 Mon Sep 17 00:00:00 2001 From: Adam Welc <adam.welc@oracle.com> Date: Wed, 27 Jul 2016 01:33:01 +0200 Subject: [PATCH] Another addition to the native API. --- .../fficall/src/jni/Rembedded.c | 6 ++++++ .../include/ed_Rinterface_gcntx | 1 + .../truffle/r/runtime/ffi/jnr/CallRFFIHelper.java | 10 ++++++++++ 3 files changed, 17 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 61431ad1d6..9603887b12 100644 --- a/com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c +++ b/com.oracle.truffle.r.native/fficall/src/jni/Rembedded.c @@ -627,3 +627,9 @@ int R_insideBrowser() { jmethodID methodID = checkGetMethodID(jniEnv, CallRFFIHelperClass, "R_insideBrowser", "()I", 1); return (*jniEnv)->CallStaticIntMethod(jniEnv, CallRFFIHelperClass, methodID); } + +int R_isGlobal(CTXT context) { + JNIEnv *jniEnv = getEnv(); + jmethodID methodID = checkGetMethodID(jniEnv, CallRFFIHelperClass, "R_isGlobal", "(Ljava/lang/Object;)I", 1); + return (*jniEnv)->CallStaticIntMethod(jniEnv, CallRFFIHelperClass, methodID, context); +} diff --git a/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx b/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx index f9cf0613c2..59e5f90184 100644 --- a/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx +++ b/com.oracle.truffle.r.native/include/ed_Rinterface_gcntx @@ -12,6 +12,7 @@ extern SEXP R_getContextFun(CTXT); extern SEXP R_getContextCall(CTXT); extern SEXP R_getContextSrcRef(CTXT); extern int R_insideBrowser(); +extern int R_isGlobal(CTXT); #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 731cbc5ac2..8ba6ddcf25 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 @@ -1386,4 +1386,14 @@ public class CallRFFIHelper { public static int R_insideBrowser() { return RContext.getInstance().stateInstrumentation.getBrowserState().inBrowser() ? 1 : 0; } + + public static int R_isGlobal(Object c) { + if (RFFIUtils.traceEnabled()) { + RFFIUtils.traceUpCall("isGlobal", c); + } + RCaller rCaller = guaranteeInstanceOf(c, RCaller.class); + + return rCaller == topLevel ? 1 : 0; + } + } -- GitLab