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 265ffd98734ac95d1ebe04eae9b0941a045ed14f..a8ad8d02804d250a5e27a0d9b2084b52caf7c42c 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);