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 2102384fc2bc023c0356a92d3c6eb72bf7cb49c6..89fb551c08e14b756f3e1b8d847d3093aee06dc7 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 8c62773207559b9885e623ef6159b54b1c87745f..c120b6fc7d1b9c7fdb3f264d916ed611cbbe86e4 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 80151638dc831853be95efa573598d8f8d25d529..6c4b235ca5d9d86afc256813a820c6cf21d21811 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 594866624b3332f4439df6b7c2f57b0f1611f92e..b3e1d89e4f55eb714ccd5b0b8a7abb6e6f046bf8 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 4b65f52a6741a4805f63fda9ba9edd95f83d145c..74dbb58f09a6dee2952996225d2e94c439f6fd15 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 9c444c4d9a66f873274d46797f7d3855ba6570e5..14047da6e1ba80dc6a89cf244da3fa2250926f13 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; @@ -102,15 +101,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 @@ -136,15 +135,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 e2d8b344dd409fd5d9ee8706834e6cc8e0d5c306..9abaf902ac3f6f2f215952fbd29178e06c95035c 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 16b9bb88af79e024667165cbd2360c2d42233b72..8bb9418b950dfcc2ac0667179f3c2644c7d006c3 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 d2cd4888e2b1df1307d8ffdfb04dc3ebbc666924..16cc34b1b57661dc0db381a6f0d57db48be81cd0 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 adf82d3b8cc43bdd842a0851083a5b70355154c5..56de20fc59ab85905959cd34a4e2475b028def6e 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 86ed97dbd92dcb06311a26183d164162942e587a..03428c908e12d7675b48cfe2fbb093427c9672a2 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 254803f871184cebdae909f57bb45bc0ad9d3606..b16e8e51ce1e0219f429755fc5e647bda01546e6 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 427b9c1c60c09e0bf19005119dbe5d29ada820d7..5c9497e41bdfb24bd5d4092800123fee1682d397 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 6b892a78508eb4b640a63e20b5836ba5136b4718..0000000000000000000000000000000000000000 --- 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 1d08d05febcb302ba6a5893793dc42f3ebb01c10..fad0981f6dd9d10f6fd38521d1b490453b022a5d 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"},