diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java index 799af373a1eff41a2c04e49bcde16005baf2a2df..54a33fec0bd819934a2e5df6bb0017d0f1a3b45f 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridContext.java @@ -24,6 +24,7 @@ package com.oracle.truffle.r.library.fastrGrid; import java.util.ArrayList; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.r.library.fastrGrid.GridState.GridDeviceState; import com.oracle.truffle.r.library.fastrGrid.device.GridDevice; import com.oracle.truffle.r.library.fastrGrid.device.GridDevice.DeviceCloseException; @@ -58,6 +59,7 @@ public final class GridContext { return INSTANCE; } + @TruffleBoundary public GridState getGridState() { gridState.setDeviceState(devices.get(currentDeviceIdx).state); return gridState; diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateGetNode.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateGetNode.java index f54af61482e1741d64f207aa014e827a5096dbb0..d53f60c9c5da8497fe4ccc39d5b67391b476158d 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateGetNode.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateGetNode.java @@ -24,6 +24,7 @@ package com.oracle.truffle.r.library.fastrGrid; import java.util.function.Function; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode; /** @@ -41,6 +42,7 @@ final class GridStateGetNode extends RExternalBuiltinNode.Arg0 { } @Override + @TruffleBoundary public Object execute() { Object result = getter.apply(GridContext.getContext().getGridState()); assert result != null; diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateSetNode.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateSetNode.java index 4b07fdcc38dcea0935898ab4c99f38c0a793df1a..25a798d1899c0a788e0afa86f4ff9590b6dac661 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateSetNode.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/fastrGrid/GridStateSetNode.java @@ -24,6 +24,7 @@ package com.oracle.truffle.r.library.fastrGrid; import java.util.function.BiConsumer; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.r.nodes.builtin.RExternalBuiltinNode; import com.oracle.truffle.r.runtime.data.RNull; @@ -46,6 +47,7 @@ public final class GridStateSetNode extends RExternalBuiltinNode.Arg1 { } @Override + @TruffleBoundary public Object execute(Object arg) { setter.accept(GridContext.getContext().getGridState(), arg); return RNull.instance; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java index a286bc76d9c332926132542a321e2121b11a2ea7..4a3a38d7134f8499c65c3460719efd9cdac0439e 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/LogFunctions.java @@ -30,6 +30,7 @@ import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import java.util.Arrays; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.profiles.BranchProfile; @@ -54,6 +55,7 @@ import com.oracle.truffle.r.runtime.data.RMissing; import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; +import com.oracle.truffle.r.runtime.nodes.RBaseNode; import com.oracle.truffle.r.runtime.ops.BinaryArithmetic; import com.oracle.truffle.r.runtime.ops.na.NACheck; import com.oracle.truffle.r.runtime.ops.na.NAProfile; @@ -208,13 +210,13 @@ public class LogFunctions { Arrays.fill(resultVector, 0, resultVector.length, Double.NaN); } else { xNACheck.enable(vector); - Runnable[] warningResult = new Runnable[1]; + RBaseNode[] warningCtx = new RBaseNode[1]; for (int i = 0; i < vector.getLength(); i++) { double value = vector.getDataAt(i); - resultVector[i] = xNACheck.check(value) ? RRuntime.DOUBLE_NA : logb(value, base, warningResult); + resultVector[i] = xNACheck.check(value) ? RRuntime.DOUBLE_NA : logb(value, base, warningCtx); } - if (warningResult[0] != null) { - warningResult[0].run(); + if (warningCtx[0] != null) { + RError.warning(warningCtx[0], RError.Message.NAN_PRODUCED); } } boolean complete = xNACheck.neverSeenNA() && baseNACheck.neverSeenNA(); @@ -230,26 +232,27 @@ public class LogFunctions { nanProfile.enter(); return base; } - Runnable[] warningResult = new Runnable[1]; - double ret = logb(x, base, warningResult); - if (warningResult[0] != null) { - warningResult[0].run(); + RBaseNode[] warningCtx = new RBaseNode[1]; + double ret = logb(x, base, warningCtx); + if (warningCtx[0] != null) { + RError.warning(warningCtx[0], RError.Message.NAN_PRODUCED); } return ret; } - private double logb(double x, double base, Runnable[] warningResult) { + @TruffleBoundary + private double logb(double x, double base, RBaseNode[] warningCtx) { double logx = Math.log(x); if (Double.isNaN(logx)) { - warningResult[0] = () -> RError.warning(this, RError.Message.NAN_PRODUCED); + warningCtx[0] = this; } if (base == Math.E) { return logx; } double result = logx / Math.log(base); - if (warningResult[0] == null && Double.isNaN(result)) { - warningResult[0] = () -> RError.warning(RError.SHOW_CALLER, RError.Message.NAN_PRODUCED); + if (warningCtx[0] == null && Double.isNaN(result)) { + warningCtx[0] = RError.SHOW_CALLER; } return result;