From 8d9f07e9b4e9af4e91a638ee21c7234964f26f50 Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Tue, 7 Feb 2017 10:45:12 +0100
Subject: [PATCH] Adapted to changes in GR-1767: frame parameter removed from
 interop functions and transitively from all callers where possible. Also
 updated Truffle version in file "suite.py". Removed class
 TruffleRFFIFrameHelper since there are no usages any longer. Removed
 unnecessary call to CompilerDirectives.transferToInterpreter call in class
 ValuePrinterNode.

---
 .../interop/ffi/llvm/TruffleLLVM_C.java       |  5 +-
 .../interop/ffi/llvm/TruffleLLVM_Call.java    | 10 +--
 .../interop/ffi/llvm/TruffleLLVM_PkgInit.java |  5 +-
 .../interop/ffi/llvm/TruffleLLVM_Stats.java   |  8 +--
 .../interop/ffi/llvm/TruffleLLVM_UserRng.java | 20 ++----
 .../truffle/r/nodes/builtin/base/Format.java  | 17 +++--
 .../r/nodes/builtin/base/PrintFunctions.java  | 14 ++--
 .../base/printer/ValuePrinterNode.java        | 69 +++++++++----------
 .../r/nodes/builtin/fastr/FastRInterop.java   | 13 ++--
 .../access/vector/ExtractVectorNode.java      | 17 +++--
 .../access/vector/ReplaceVectorNode.java      | 17 +++--
 .../truffle/r/nodes/control/RLengthNode.java  |  6 +-
 .../truffle/r/nodes/function/RCallNode.java   |  2 +-
 .../ffi/truffle/TruffleRFFIFrameHelper.java   | 33 ---------
 mx.fastr/suite.py                             |  2 +-
 15 files changed, 88 insertions(+), 150 deletions(-)
 delete mode 100644 com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/truffle/TruffleRFFIFrameHelper.java

diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_C.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_C.java
index 2102384fc2..89fb551c08 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_C.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_C.java
@@ -22,7 +22,6 @@
  */
 package com.oracle.truffle.r.engine.interop.ffi.llvm;
 
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.nodes.Node;
@@ -33,7 +32,6 @@ import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.ffi.CRFFI;
 import com.oracle.truffle.r.runtime.ffi.NativeCallInfo;
 import com.oracle.truffle.r.runtime.ffi.jni.JNI_C.JNI_InvokeCNode;
-import com.oracle.truffle.r.runtime.ffi.truffle.TruffleRFFIFrameHelper;
 
 class TruffleLLVM_C implements CRFFI {
     private static class TruffleLLVM_InvokeCNode extends JNI_InvokeCNode {
@@ -43,12 +41,11 @@ class TruffleLLVM_C implements CRFFI {
             if (nativeCallInfo.address.value instanceof Long) {
                 super.execute(nativeCallInfo, args);
             } else {
-                VirtualFrame frame = TruffleRFFIFrameHelper.create();
                 TruffleLLVM_DLL.ensureParsed(nativeCallInfo);
                 Object[] wargs = wrap(args);
                 try {
                     Node messageNode = Message.createExecute(0).createNode();
-                    ForeignAccess.sendExecute(messageNode, frame, nativeCallInfo.address.asTruffleObject(), wargs);
+                    ForeignAccess.sendExecute(messageNode, nativeCallInfo.address.asTruffleObject(), wargs);
                 } catch (Throwable t) {
                     throw RInternalError.shouldNotReachHere(t);
                 }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java
index 8c62773207..c120b6fc7d 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Call.java
@@ -25,7 +25,6 @@ package com.oracle.truffle.r.engine.interop.ffi.llvm;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
@@ -43,7 +42,6 @@ import com.oracle.truffle.r.runtime.ffi.NativeCallInfo;
 import com.oracle.truffle.r.runtime.ffi.RFFIFactory;
 import com.oracle.truffle.r.runtime.ffi.RFFIVariables;
 import com.oracle.truffle.r.runtime.ffi.jni.JNI_Call;
-import com.oracle.truffle.r.runtime.ffi.truffle.TruffleRFFIFrameHelper;
 
 class TruffleLLVM_Call implements CallRFFI {
     private static TruffleLLVM_Call truffleCall;
@@ -99,7 +97,6 @@ class TruffleLLVM_Call implements CallRFFI {
             TruffleLLVM_DLL.ensureParsed("libR", initVarFun.funName, true);
             initVarFun.symbolHandle = new SymbolHandle(context.getEnv().importSymbol("@" + initVarFun.funName));
         }
-        VirtualFrame frame = TruffleRFFIFrameHelper.create();
         Node executeNode = Message.createExecute(2).createNode();
         RFFIVariables[] variables = RFFIVariables.initialize();
         for (int i = 0; i < variables.length; i++) {
@@ -110,9 +107,9 @@ class TruffleLLVM_Call implements CallRFFI {
             }
             try {
                 if (value instanceof Double) {
-                    ForeignAccess.sendExecute(executeNode, frame, INIT_VAR_FUN.DOUBLE.symbolHandle.asTruffleObject(), i, value);
+                    ForeignAccess.sendExecute(executeNode, INIT_VAR_FUN.DOUBLE.symbolHandle.asTruffleObject(), i, value);
                 } else if (value instanceof Integer) {
-                    ForeignAccess.sendExecute(executeNode, frame, INIT_VAR_FUN.INT.symbolHandle.asTruffleObject(), i, value);
+                    ForeignAccess.sendExecute(executeNode, INIT_VAR_FUN.INT.symbolHandle.asTruffleObject(), i, value);
                 } else {
                     // TODO
                     // ForeignAccess.sendExecute(executeNode, frame,
@@ -166,9 +163,8 @@ class TruffleLLVM_Call implements CallRFFI {
         }
 
         private static Object doInvoke(Node messageNode, NativeCallInfo nativeCallInfo, Object[] args) {
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
             try {
-                return ForeignAccess.sendExecute(messageNode, frame, nativeCallInfo.address.asTruffleObject(), args);
+                return ForeignAccess.sendExecute(messageNode, nativeCallInfo.address.asTruffleObject(), args);
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere(t);
             }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_PkgInit.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_PkgInit.java
index 80151638dc..6c4b235ca5 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_PkgInit.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_PkgInit.java
@@ -22,7 +22,6 @@
  */
 package com.oracle.truffle.r.engine.interop.ffi.llvm;
 
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.TruffleObject;
@@ -35,7 +34,6 @@ import com.oracle.truffle.r.runtime.ffi.DLL;
 import com.oracle.truffle.r.runtime.ffi.DLL.DLLInfo;
 import com.oracle.truffle.r.runtime.ffi.DLL.DotSymbol;
 import com.oracle.truffle.r.runtime.ffi.DLL.SymbolHandle;
-import com.oracle.truffle.r.runtime.ffi.truffle.TruffleRFFIFrameHelper;
 
 class TruffleLLVM_PkgInit {
 
@@ -78,11 +76,10 @@ class TruffleLLVM_PkgInit {
     }
 
     private static Object setSymbol(int nstOrd, long routines, int index, SymbolHandle symbolHandle) {
-        VirtualFrame frame = TruffleRFFIFrameHelper.create();
         Node executeNode = Message.createExecute(3).createNode();
         try {
 
-            Object result = ForeignAccess.sendExecute(executeNode, frame, symbolHandle.asTruffleObject(), nstOrd, routines, index);
+            Object result = ForeignAccess.sendExecute(executeNode, symbolHandle.asTruffleObject(), nstOrd, routines, index);
             return result;
         } catch (Throwable t) {
             throw RInternalError.shouldNotReachHere();
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Stats.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Stats.java
index 594866624b..b3e1d89e4f 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Stats.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_Stats.java
@@ -25,7 +25,6 @@ package com.oracle.truffle.r.engine.interop.ffi.llvm;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.ImportStatic;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.nodes.Node;
@@ -42,7 +41,6 @@ import com.oracle.truffle.r.runtime.ffi.DLL.DLLInfo;
 import com.oracle.truffle.r.runtime.ffi.DLL.SymbolHandle;
 import com.oracle.truffle.r.runtime.ffi.DLLRFFI;
 import com.oracle.truffle.r.runtime.ffi.StatsRFFI;
-import com.oracle.truffle.r.runtime.ffi.truffle.TruffleRFFIFrameHelper;
 
 public class TruffleLLVM_Stats implements StatsRFFI {
 
@@ -124,9 +122,8 @@ public class TruffleLLVM_Stats implements StatsRFFI {
             NativeDoubleArray na = new NativeDoubleArray(a);
             NativeDoubleArray nwork = new NativeDoubleArray(work);
             NativeIntegerArray niwork = new NativeIntegerArray(iwork);
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
             try {
-                return (int) ForeignAccess.sendExecute(messageNode, frame, fftWork.asTruffleObject(), na, nseg, n, nspn, isn, nwork, niwork);
+                return (int) ForeignAccess.sendExecute(messageNode, fftWork.asTruffleObject(), na, nseg, n, nspn, isn, nwork, niwork);
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere(t);
             }
@@ -165,10 +162,9 @@ public class TruffleLLVM_Stats implements StatsRFFI {
         private static void doFactor(int n, int[] pmaxf, int[] pmaxp, Node messageNode, SymbolHandle fftFactor) {
             NativeIntegerArray npmaxf = new NativeIntegerArray(pmaxf);
             NativeIntegerArray npmaxp = new NativeIntegerArray(pmaxp);
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
 
             try {
-                ForeignAccess.sendExecute(messageNode, frame, fftFactor.asTruffleObject(), n, npmaxf, npmaxp);
+                ForeignAccess.sendExecute(messageNode, fftFactor.asTruffleObject(), n, npmaxf, npmaxp);
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere(t);
             }
diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UserRng.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UserRng.java
index 4b65f52a67..74dbb58f09 100644
--- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UserRng.java
+++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/interop/ffi/llvm/TruffleLLVM_UserRng.java
@@ -22,13 +22,11 @@
  */
 package com.oracle.truffle.r.engine.interop.ffi.llvm;
 
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.ffi.UserRngRFFI;
-import com.oracle.truffle.r.runtime.ffi.truffle.TruffleRFFIFrameHelper;
 import com.oracle.truffle.r.runtime.rng.user.UserRNG.Function;
 
 public class TruffleLLVM_UserRng implements UserRngRFFI {
@@ -41,12 +39,11 @@ public class TruffleLLVM_UserRng implements UserRngRFFI {
 
         @Override
         public void init(int seed) {
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
             if (initMessage == null) {
                 initMessage = Message.createExecute(1).createNode();
             }
             try {
-                ForeignAccess.sendExecute(initMessage, frame, Function.Init.getSymbolHandle().asTruffleObject(), seed);
+                ForeignAccess.sendExecute(initMessage, Function.Init.getSymbolHandle().asTruffleObject(), seed);
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere();
             }
@@ -54,13 +51,12 @@ public class TruffleLLVM_UserRng implements UserRngRFFI {
 
         @Override
         public double rand() {
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
             if (randMessage == null) {
                 randMessage = Message.createExecute(0).createNode();
             }
             try {
-                Object address = ForeignAccess.sendExecute(randMessage, frame, Function.Rand.getSymbolHandle().asTruffleObject());
-                Object value = ForeignAccess.sendExecute(readPointerNode, frame, TruffleLLVM_CAccess.Function.READ_POINTER_DOUBLE.getSymbolHandle().asTruffleObject(), address);
+                Object address = ForeignAccess.sendExecute(randMessage, Function.Rand.getSymbolHandle().asTruffleObject());
+                Object value = ForeignAccess.sendExecute(readPointerNode, TruffleLLVM_CAccess.Function.READ_POINTER_DOUBLE.getSymbolHandle().asTruffleObject(), address);
                 return (double) value;
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere();
@@ -69,13 +65,12 @@ public class TruffleLLVM_UserRng implements UserRngRFFI {
 
         @Override
         public int nSeed() {
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
             if (nSeedMessage == null) {
                 nSeedMessage = Message.createExecute(0).createNode();
             }
             try {
-                Object address = ForeignAccess.sendExecute(nSeedMessage, frame, Function.NSeed.getSymbolHandle().asTruffleObject());
-                Object n = ForeignAccess.sendExecute(readPointerNode, frame, TruffleLLVM_CAccess.Function.READ_POINTER_INT.getSymbolHandle().asTruffleObject(), address);
+                Object address = ForeignAccess.sendExecute(nSeedMessage, Function.NSeed.getSymbolHandle().asTruffleObject());
+                Object n = ForeignAccess.sendExecute(readPointerNode, TruffleLLVM_CAccess.Function.READ_POINTER_INT.getSymbolHandle().asTruffleObject(), address);
                 return (int) n;
             } catch (Throwable t) {
                 throw RInternalError.shouldNotReachHere();
@@ -84,14 +79,13 @@ public class TruffleLLVM_UserRng implements UserRngRFFI {
 
         @Override
         public void seeds(int[] n) {
-            VirtualFrame frame = TruffleRFFIFrameHelper.create();
             if (seedsMessage == null) {
                 seedsMessage = Message.createExecute(0).createNode();
             }
             try {
-                Object address = ForeignAccess.sendExecute(seedsMessage, frame, Function.Seedloc.getSymbolHandle().asTruffleObject());
+                Object address = ForeignAccess.sendExecute(seedsMessage, Function.Seedloc.getSymbolHandle().asTruffleObject());
                 for (int i = 0; i < n.length; i++) {
-                    Object seed = ForeignAccess.sendExecute(readPointerNode, frame, TruffleLLVM_CAccess.Function.READ_ARRAY_INT.getSymbolHandle().asTruffleObject(), address, i);
+                    Object seed = ForeignAccess.sendExecute(readPointerNode, TruffleLLVM_CAccess.Function.READ_ARRAY_INT.getSymbolHandle().asTruffleObject(), address, i);
                     n[i] = (int) seed;
                 }
             } catch (Throwable t) {
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java
index 7c312cd0e9..6721dc5168 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Format.java
@@ -20,7 +20,6 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.INTERNAL;
 
 import com.oracle.truffle.api.CompilerDirectives;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.profiles.BranchProfile;
 import com.oracle.truffle.r.nodes.builtin.CastBuilder;
 import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
@@ -100,15 +99,15 @@ public abstract class Format extends RBuiltinNode {
     }
 
     @Specialization
-    protected RStringVector format(VirtualFrame frame, RAbstractLogicalVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
+    protected RStringVector format(RAbstractLogicalVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
                     String decimalMark) {
-        return (RStringVector) valuePrinter.prettyPrint(frame, value, AnyVectorToStringVectorWriter::new);
+        return (RStringVector) valuePrinter.prettyPrint(value, AnyVectorToStringVectorWriter::new);
     }
 
     @Specialization
-    protected RStringVector format(VirtualFrame frame, RAbstractIntVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
+    protected RStringVector format(RAbstractIntVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
                     String decimalMark) {
-        return (RStringVector) valuePrinter.prettyPrint(frame, value, AnyVectorToStringVectorWriter::new);
+        return (RStringVector) valuePrinter.prettyPrint(value, AnyVectorToStringVectorWriter::new);
     }
 
     // TODO: even though format's arguments are not used at this point, their processing mirrors
@@ -134,15 +133,15 @@ public abstract class Format extends RBuiltinNode {
     }
 
     @Specialization
-    protected RStringVector format(VirtualFrame frame, RAbstractDoubleVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
+    protected RStringVector format(RAbstractDoubleVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
                     String decimalMark) {
-        return (RStringVector) valuePrinter.prettyPrint(frame, value, AnyVectorToStringVectorWriter::new);
+        return (RStringVector) valuePrinter.prettyPrint(value, AnyVectorToStringVectorWriter::new);
     }
 
     @Specialization
-    protected RStringVector format(VirtualFrame frame, RAbstractComplexVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
+    protected RStringVector format(RAbstractComplexVector value, boolean trim, int digits, int nsmall, int width, int justify, boolean naEncode, int scientific,
                     String decimalMark) {
-        return (RStringVector) valuePrinter.prettyPrint(frame, value, AnyVectorToStringVectorWriter::new);
+        return (RStringVector) valuePrinter.prettyPrint(value, AnyVectorToStringVectorWriter::new);
     }
 
     @Specialization
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java
index e2d8b344dd..9abaf902ac 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrintFunctions.java
@@ -79,8 +79,8 @@ public class PrintFunctions {
         }
 
         @Specialization(guards = "!isS4(o)")
-        protected Object printDefault(VirtualFrame frame, Object o, Object digits, boolean quote, Object naPrint, Object printGap, boolean right, Object max, boolean useSource, boolean noOpt) {
-            valuePrinter.execute(frame, o, digits, quote, naPrint, printGap, right, max, useSource, noOpt);
+        protected Object printDefault(Object o, Object digits, boolean quote, Object naPrint, Object printGap, boolean right, Object max, boolean useSource, boolean noOpt) {
+            valuePrinter.execute(o, digits, quote, naPrint, printGap, right, max, useSource, noOpt);
             return o;
         }
 
@@ -89,13 +89,14 @@ public class PrintFunctions {
         }
 
         @Specialization(guards = "isS4(o)")
-        protected Object printDefaultS4(VirtualFrame frame, RTypedValue o, Object digits, boolean quote, Object naPrint, Object printGap, boolean right, Object max, boolean useSource, boolean noOpt,
+        protected Object printDefaultS4(@SuppressWarnings("unused") VirtualFrame frame, RTypedValue o, Object digits, boolean quote, Object naPrint, Object printGap, boolean right, Object max,
+                        boolean useSource, boolean noOpt,
                         @Cached("createShowFunction(frame)") RFunction showFunction) {
             if (noOpt) {
                 // S4 should only be called in case noOpt is true
                 RContext.getEngine().evalFunction(showFunction, null, null, null, o);
             } else {
-                printDefault(frame, showFunction, digits, quote, naPrint, printGap, right, max, useSource, noOpt);
+                printDefault(showFunction, digits, quote, naPrint, printGap, right, max, useSource, noOpt);
             }
             return o;
         }
@@ -117,10 +118,9 @@ public class PrintFunctions {
             casts.arg("useSource").defaultError(RError.Message.INVALID_ARGUMENT, "useSource").asLogicalVector().findFirst(RRuntime.LOGICAL_FALSE).map(toBoolean());
         }
 
-        @SuppressWarnings("unused")
         @Specialization
-        protected RFunction printFunction(VirtualFrame frame, RFunction x, boolean useSource, RArgsValuesAndNames extra) {
-            valuePrinter.execute(frame, x, PrintParameters.getDefaultDigits(), true, RString.valueOf(RRuntime.STRING_NA), 1, false, PrintParameters.getDefaultMaxPrint(), useSource, false);
+        protected RFunction printFunction(RFunction x, boolean useSource, @SuppressWarnings("unused") RArgsValuesAndNames extra) {
+            valuePrinter.execute(x, PrintParameters.getDefaultDigits(), true, RString.valueOf(RRuntime.STRING_NA), 1, false, PrintParameters.getDefaultMaxPrint(), useSource, false);
             return x;
         }
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/ValuePrinterNode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/ValuePrinterNode.java
index 16b9bb88af..8bb9418b95 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/ValuePrinterNode.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/ValuePrinterNode.java
@@ -104,7 +104,7 @@ public final class ValuePrinterNode extends RBaseNode {
         @Child private SetFixedAttributeNode namesAttrSetter = SetFixedAttributeNode.createNames();
         @Child private SetFixedAttributeNode isTruffleObjAttrSetter = SetFixedAttributeNode.create("is.truffle.object");
 
-        public Object convert(VirtualFrame frame, TruffleObject obj) {
+        public Object convert(TruffleObject obj) {
             class RStringWrapper extends TruffleObjectWrapper implements RAbstractStringVector {
                 final TruffleObject object;
 
@@ -122,9 +122,9 @@ public final class ValuePrinterNode extends RBaseNode {
                 public String getDataAt(int index) {
                     Object value;
                     try {
-                        value = ForeignAccess.sendRead(readNode, frame, object, index);
-                        if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                            value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                        value = ForeignAccess.sendRead(readNode, object, index);
+                        if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                            value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                         }
                     } catch (UnknownIdentifierException | UnsupportedMessageException e) {
                         throw RInternalError.shouldNotReachHere(e);
@@ -143,17 +143,16 @@ public final class ValuePrinterNode extends RBaseNode {
                 }
             }
             try {
-                if (ForeignAccess.sendHasSize(hasSizeNode, frame, obj)) {
-                    CompilerDirectives.transferToInterpreter();
-                    int size = (Integer) ForeignAccess.sendGetSize(getSizeNode, frame, obj);
+                if (ForeignAccess.sendHasSize(hasSizeNode, obj)) {
+                    int size = (Integer) ForeignAccess.sendGetSize(getSizeNode, obj);
                     boolean allBoolean = true;
                     boolean allInteger = true;
                     boolean allNumber = true;
                     boolean allString = true;
                     for (int i = 0; i < size; i++) {
-                        Object value = ForeignAccess.sendRead(readNode, frame, obj, i);
-                        if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                            value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                        Object value = ForeignAccess.sendRead(readNode, obj, i);
+                        if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                            value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                         }
                         allBoolean &= value instanceof Boolean;
                         allInteger &= value instanceof Integer;
@@ -176,9 +175,9 @@ public final class ValuePrinterNode extends RBaseNode {
                             public byte getDataAt(int index) {
                                 Object value;
                                 try {
-                                    value = ForeignAccess.sendRead(readNode, frame, obj, index);
-                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                                        value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                                    value = ForeignAccess.sendRead(readNode, obj, index);
+                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                                        value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                                     }
                                 } catch (UnknownIdentifierException | UnsupportedMessageException e) {
                                     throw RInternalError.shouldNotReachHere(e);
@@ -213,9 +212,9 @@ public final class ValuePrinterNode extends RBaseNode {
                             public int getDataAt(int index) {
                                 Object value;
                                 try {
-                                    value = ForeignAccess.sendRead(readNode, frame, obj, index);
-                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                                        value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                                    value = ForeignAccess.sendRead(readNode, obj, index);
+                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                                        value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                                     }
                                 } catch (UnknownIdentifierException | UnsupportedMessageException e) {
                                     throw RInternalError.shouldNotReachHere(e);
@@ -250,9 +249,9 @@ public final class ValuePrinterNode extends RBaseNode {
                             public double getDataAt(int index) {
                                 Object value;
                                 try {
-                                    value = ForeignAccess.sendRead(readNode, frame, obj, index);
-                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                                        value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                                    value = ForeignAccess.sendRead(readNode, obj, index);
+                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                                        value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                                     }
                                 } catch (UnknownIdentifierException | UnsupportedMessageException e) {
                                     throw RInternalError.shouldNotReachHere(e);
@@ -289,9 +288,9 @@ public final class ValuePrinterNode extends RBaseNode {
                             public Object getDataAt(int index) {
                                 Object value;
                                 try {
-                                    value = ForeignAccess.sendRead(readNode, frame, obj, index);
-                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                                        value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                                    value = ForeignAccess.sendRead(readNode, obj, index);
+                                    if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                                        value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                                     }
                                 } catch (UnknownIdentifierException | UnsupportedMessageException e) {
                                     throw RInternalError.shouldNotReachHere(e);
@@ -312,9 +311,9 @@ public final class ValuePrinterNode extends RBaseNode {
                         return new RListWrapper(size);
                     }
                 }
-                TruffleObject keys = (TruffleObject) ForeignAccess.send(keysNode, frame, obj);
+                TruffleObject keys = (TruffleObject) ForeignAccess.send(keysNode, obj);
                 if (keys != null) {
-                    int size = (Integer) ForeignAccess.sendGetSize(getSizeNode, frame, keys);
+                    int size = (Integer) ForeignAccess.sendGetSize(getSizeNode, keys);
                     RAbstractStringVector abstractNames = new RStringWrapper(size, keys);
                     RStringVector names = RDataFactory.createStringVector(size);
                     for (int i = 0; i < size; i++) {
@@ -339,9 +338,9 @@ public final class ValuePrinterNode extends RBaseNode {
                         public Object getDataAt(int index) {
                             Object value;
                             try {
-                                value = ForeignAccess.sendRead(readNode, frame, obj, names.getDataAt(index));
-                                if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, frame, (TruffleObject) value)) {
-                                    value = ForeignAccess.sendUnbox(unboxNode, frame, (TruffleObject) value);
+                                value = ForeignAccess.sendRead(readNode, obj, names.getDataAt(index));
+                                if (value instanceof TruffleObject && ForeignAccess.sendIsBoxed(isBoxedNode, (TruffleObject) value)) {
+                                    value = ForeignAccess.sendUnbox(unboxNode, (TruffleObject) value);
                                 }
                             } catch (UnknownIdentifierException | UnsupportedMessageException e) {
                                 throw RInternalError.shouldNotReachHere(e);
@@ -405,20 +404,20 @@ public final class ValuePrinterNode extends RBaseNode {
         return boxPrimitiveNode.execute(o);
     }
 
-    private Object convertTruffleObject(VirtualFrame frame, Object o) {
+    private Object convertTruffleObject(Object o) {
         if (o instanceof TruffleObject && !(o instanceof RTypedValue)) {
             if (convertTruffleObject == null) {
                 CompilerDirectives.transferToInterpreterAndInvalidate();
                 convertTruffleObject = insert(new ConvertTruffleObjectNode());
             }
-            return convertTruffleObject.convert(frame, (TruffleObject) o);
+            return convertTruffleObject.convert((TruffleObject) o);
         }
         return o;
     }
 
-    public String execute(VirtualFrame frame, Object o, Object digits, boolean quote, Object naPrint, Object printGap, boolean right, Object max, boolean useSource, boolean noOpt) {
+    public String execute(Object o, Object digits, boolean quote, Object naPrint, Object printGap, boolean right, Object max, boolean useSource, boolean noOpt) {
         try {
-            prettyPrint(convertTruffleObject(frame, o), new PrintParameters(digits, quote, naPrint, printGap, right, max, useSource, noOpt), RWriter::new);
+            prettyPrint(convertTruffleObject(o), new PrintParameters(digits, quote, naPrint, printGap, right, max, useSource, noOpt), RWriter::new);
             return null;
         } catch (IOException ex) {
             throw RError.ioError(this, ex);
@@ -576,12 +575,8 @@ public final class ValuePrinterNode extends RBaseNode {
         }
     }
 
-    public Object prettyPrint(VirtualFrame frame, Object v, WriterFactory wf) {
-        return prettyPrint(convertTruffleObject(frame, v), wf);
-    }
-
     @TruffleBoundary
-    private Object prettyPrint(Object v, WriterFactory wf) {
+    public Object prettyPrint(Object v, WriterFactory wf) {
         PrintParameters printParams = new PrintParameters();
         printParams.setDefaults();
         printParams.setSuppressIndexLabels(true);
@@ -619,7 +614,7 @@ public final class ValuePrinterNode extends RBaseNode {
 
             @Override
             public Object execute(VirtualFrame frame) {
-                return valuePrinterNode.prettyPrint(frame, value, AnyVectorToStringVectorWriter::new);
+                return valuePrinterNode.prettyPrint(value, AnyVectorToStringVectorWriter::new);
             }
         }).call(value);
     }
diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
index d2cd4888e2..16cc34b1b5 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRInterop.java
@@ -41,7 +41,6 @@ import com.oracle.truffle.api.Truffle;
 import com.oracle.truffle.api.dsl.Cached;
 import com.oracle.truffle.api.dsl.Fallback;
 import com.oracle.truffle.api.dsl.Specialization;
-import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.TruffleObject;
 import com.oracle.truffle.api.nodes.DirectCallNode;
@@ -203,8 +202,8 @@ public class FastRInterop {
         }
 
         @Specialization
-        public byte hasSize(VirtualFrame frame, TruffleObject obj) {
-            return RRuntime.asLogical(ForeignAccess.sendHasSize(node, frame, obj));
+        public byte hasSize(TruffleObject obj) {
+            return RRuntime.asLogical(ForeignAccess.sendHasSize(node, obj));
         }
     }
 
@@ -218,8 +217,8 @@ public class FastRInterop {
         }
 
         @Specialization
-        public byte hasSize(VirtualFrame frame, TruffleObject obj) {
-            return RRuntime.asLogical(ForeignAccess.sendIsNull(node, frame, obj));
+        public byte hasSize(TruffleObject obj) {
+            return RRuntime.asLogical(ForeignAccess.sendIsNull(node, obj));
         }
     }
 
@@ -233,8 +232,8 @@ public class FastRInterop {
         }
 
         @Specialization
-        public byte hasSize(VirtualFrame frame, TruffleObject obj) {
-            return RRuntime.asLogical(ForeignAccess.sendIsExecutable(node, frame, obj));
+        public byte hasSize(TruffleObject obj) {
+            return RRuntime.asLogical(ForeignAccess.sendIsExecutable(node, obj));
         }
     }
 
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java
index adf82d3b8c..56de20fc59 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ExtractVectorNode.java
@@ -103,29 +103,28 @@ public abstract class ExtractVectorNode extends Node {
         return FirstStringNode.createWithError(RError.Message.GENERIC, "Cannot corce position to character for foreign access.");
     }
 
-    @SuppressWarnings("unused")
     @Specialization(guards = {"isForeignObject(object)", "positions.length == cachedLength"})
-    protected Object accessField(VirtualFrame frame, TruffleObject object, Object[] positions, Object exact, Object dropDimensions,
+    protected Object accessField(TruffleObject object, Object[] positions, Object exact, Object dropDimensions,
                     @Cached("createForeignRead(positions)") Node foreignRead,
-                    @Cached("positions.length") int cachedLength,
+                    @SuppressWarnings("unused") @Cached("positions.length") int cachedLength,
                     @Cached("create()") CastStringNode castNode,
                     @Cached("createFirstString()") FirstStringNode firstString,
                     @Cached("createClassProfile()") ValueProfile positionProfile) {
         Object position = positionProfile.profile(positions[0]);
         try {
             if (position instanceof Integer) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((int) position) - 1});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((int) position) - 1});
             } else if (position instanceof Double) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((double) position) - 1});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((double) position) - 1});
             } else if (position instanceof String) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{position});
+                return ForeignAccess.send(foreignRead, object, new Object[]{position});
             } else if (position instanceof RAbstractStringVector) {
                 String string = firstString.executeString(castNode.execute(position));
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{string});
+                return ForeignAccess.send(foreignRead, object, new Object[]{string});
             } else if (position instanceof RAbstractDoubleVector) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((RAbstractDoubleVector) position).getDataAt(0) - 1});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((RAbstractDoubleVector) position).getDataAt(0) - 1});
             } else if (position instanceof RAbstractIntVector) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((RAbstractIntVector) position).getDataAt(0) - 1});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((RAbstractIntVector) position).getDataAt(0) - 1});
             } else {
                 throw RError.error(this, RError.Message.GENERIC, "invalid index during foreign access");
             }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java
index 86ed97dbd9..03428c908e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/ReplaceVectorNode.java
@@ -95,11 +95,10 @@ public abstract class ReplaceVectorNode extends Node {
         return FirstStringNode.createWithError(RError.Message.GENERIC, "Cannot corce position to character for foreign access.");
     }
 
-    @SuppressWarnings("unused")
     @Specialization(guards = {"isForeignObject(object)", "positions.length == cachedLength"})
-    protected Object accessField(VirtualFrame frame, TruffleObject object, Object[] positions, Object value,
+    protected Object accessField(TruffleObject object, Object[] positions, Object value,
                     @Cached("createForeignWrite(positions)") Node foreignRead,
-                    @Cached("positions.length") int cachedLength,
+                    @SuppressWarnings("unused") @Cached("positions.length") int cachedLength,
                     @Cached("create()") CastStringNode castNode,
                     @Cached("createFirstString()") FirstStringNode firstString) {
 
@@ -112,18 +111,18 @@ public abstract class ReplaceVectorNode extends Node {
         Object position = positions[0];
         try {
             if (position instanceof Integer) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((Integer) position) - 1, writtenValue});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((Integer) position) - 1, writtenValue});
             } else if (position instanceof Double) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((Double) position) - 1, writtenValue});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((Double) position) - 1, writtenValue});
             } else if (position instanceof String) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{position, writtenValue});
+                return ForeignAccess.send(foreignRead, object, new Object[]{position, writtenValue});
             } else if (position instanceof RAbstractStringVector) {
                 String string = firstString.executeString(castNode.execute(position));
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{string, writtenValue});
+                return ForeignAccess.send(foreignRead, object, new Object[]{string, writtenValue});
             } else if (position instanceof RAbstractDoubleVector) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((RAbstractDoubleVector) position).getDataAt(0) - 1, writtenValue});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((RAbstractDoubleVector) position).getDataAt(0) - 1, writtenValue});
             } else if (position instanceof RAbstractIntVector) {
-                return ForeignAccess.send(foreignRead, frame, object, new Object[]{((RAbstractIntVector) position).getDataAt(0) - 1, writtenValue});
+                return ForeignAccess.send(foreignRead, object, new Object[]{((RAbstractIntVector) position).getDataAt(0) - 1, writtenValue});
             } else {
                 throw RError.error(this, RError.Message.GENERIC, "invalid index during foreign access");
             }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/RLengthNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/RLengthNode.java
index 254803f871..b16e8e51ce 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/RLengthNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/RLengthNode.java
@@ -142,14 +142,14 @@ public abstract class RLengthNode extends RNode {
     }
 
     @Specialization(guards = "isForeignObject(object)")
-    protected int getForeignSize(VirtualFrame frame, TruffleObject object,
+    protected int getForeignSize(TruffleObject object,
                     @Cached("createHasSize()") Node hasSizeNode,
                     @Cached("createGetSize()") Node getSizeNode) {
         try {
-            if (!(boolean) ForeignAccess.send(hasSizeNode, frame, object)) {
+            if (!(boolean) ForeignAccess.send(hasSizeNode, object)) {
                 return 1;
             }
-            return (int) ForeignAccess.send(getSizeNode, frame, object);
+            return (int) ForeignAccess.send(getSizeNode, object);
         } catch (InteropException e) {
             throw RError.interopError(this, e, object);
         }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
index 427b9c1c60..5c9497e41b 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
@@ -499,7 +499,7 @@ public abstract class RCallNode extends RCallBaseNode implements RSyntaxNode, RS
                 foreignCallArgCount = argumentsArray.length;
             }
             try {
-                Object result = ForeignAccess.sendExecute(foreignCall, frame, function, argumentsArray);
+                Object result = ForeignAccess.sendExecute(foreignCall, function, argumentsArray);
                 if (result instanceof Boolean) {
                     // convert to R logical
                     // TODO byte/short convert to int?
diff --git a/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/truffle/TruffleRFFIFrameHelper.java b/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/truffle/TruffleRFFIFrameHelper.java
deleted file mode 100644
index 6b892a7850..0000000000
--- a/com.oracle.truffle.r.runtime.ffi/src/com/oracle/truffle/r/runtime/ffi/truffle/TruffleRFFIFrameHelper.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * This code is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 only, as
- * published by the Free Software Foundation.
- *
- * This code is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * version 2 for more details (a copy is included in the LICENSE file that
- * accompanied this code).
- *
- * You should have received a copy of the GNU General Public License version
- * 2 along with this work; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
- * or visit www.oracle.com if you need additional information or have any
- * questions.
- */
-package com.oracle.truffle.r.runtime.ffi.truffle;
-
-import com.oracle.truffle.api.frame.VirtualFrame;
-import com.oracle.truffle.r.runtime.SubstituteVirtualFrame;
-import com.oracle.truffle.r.runtime.Utils;
-
-public class TruffleRFFIFrameHelper {
-    public static VirtualFrame create() {
-        return SubstituteVirtualFrame.create(Utils.getActualCurrentFrame().materialize());
-    }
-}
diff --git a/mx.fastr/suite.py b/mx.fastr/suite.py
index 1d08d05feb..fad0981f6d 100644
--- a/mx.fastr/suite.py
+++ b/mx.fastr/suite.py
@@ -28,7 +28,7 @@ suite = {
     "suites" : [
             {
                "name" : "truffle",
-               "version" : "54e4d48faa085ae1fb1bbcdb4733acfd523a5fd0",
+               "version" : "ffe6583cc1d92c8e9f7cddd8283c23941faecddc",
                "urls" : [
                     {"url" : "https://github.com/graalvm/truffle", "kind" : "git"},
                     {"url" : "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind" : "binary"},
-- 
GitLab