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