From d1e3923c67aa86b2169f06a96a68df156c3a9726 Mon Sep 17 00:00:00 2001 From: Gero Leinemann <gero.leinemann@oracle.com> Date: Wed, 24 Sep 2014 14:54:00 +0200 Subject: [PATCH] Fix for "delayedAssign" used on formerly primitive variables --- .../r/runtime/env/frame/REnvTruffleFrameAccess.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java index 265ffd9873..a8ad8d0280 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/REnvTruffleFrameAccess.java @@ -70,6 +70,18 @@ public class REnvTruffleFrameAccess extends REnvFrameAccessBindingsAdapter { super.put(key, value); FrameDescriptor fd = frame.getFrameDescriptor(); FrameSlot slot = fd.findFrameSlot(key); + + // Handle RPromise: It cannot be cast to a int/double/byte! + if (value instanceof RPromise) { + if (slot == null) { + slot = fd.addFrameSlot(key, FrameSlotKind.Object); + } + // Overwrites former FrameSlotKind + frame.setObject(slot, value); + return; + } + + // Handle all other values FrameSlotKind slotKind = null; if (slot == null) { slotKind = RRuntime.getSlotKind(value); -- GitLab