diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java index f2407db5244cbdc42c9c845c5748c992d1e4b5a4..b635984a2cb511bea0b9716cacf2003f3c1470ea 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseHelperNode.java @@ -96,7 +96,7 @@ public class PromiseHelperNode extends RBaseNode { boolean deoptOne = false; for (FrameSlot slot : frame.getFrameDescriptor().getSlots().toArray(new FrameSlot[0])) { // We're only interested in RPromises - if (slot.getKind() != FrameSlotKind.Object) { + if (slot.getKind() != FrameSlotKind.Object || !(slot.getIdentifier() instanceof String)) { continue; } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/FrameSlotChangeMonitor.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/FrameSlotChangeMonitor.java index 886f4922b658a2445bc32db74b6525466f7ba7fd..cdb9f13b1c530c131cd8606ea5a29f683be5b4d2 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/FrameSlotChangeMonitor.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/frame/FrameSlotChangeMonitor.java @@ -681,7 +681,7 @@ public final class FrameSlotChangeMonitor { Object info = slot.getInfo(); if (!(info instanceof FrameSlotInfoImpl)) { CompilerDirectives.transferToInterpreter(); - throw RInternalError.shouldNotReachHere("Each FrameSlot should hold a FrameSlotInfo in its info field!"); + throw RInternalError.shouldNotReachHere("Each FrameSlot should hold a FrameSlotInfo in its info field! " + slot.getIdentifier().getClass() + " " + slot.getIdentifier()); } return (FrameSlotInfoImpl) info; } @@ -703,14 +703,10 @@ public final class FrameSlotChangeMonitor { if (frameSlot != null) { return frameSlot; } else { - if (identifier instanceof String || ((RFrameSlot) identifier).isMultiSlot()) { - FrameDescriptorMetaData metaData = getMetaData(fd); - invalidateNames(metaData, Arrays.asList(identifier)); - return fd.addFrameSlot(identifier, new FrameSlotInfoImpl(metaData.singletonFrame != null, "global".equals(metaData.name), identifier, metaData.name.startsWith("<new-env-")), - initialKind); - } else { - return fd.addFrameSlot(identifier, initialKind); - } + FrameDescriptorMetaData metaData = getMetaData(fd); + invalidateNames(metaData, Arrays.asList(identifier)); + return fd.addFrameSlot(identifier, new FrameSlotInfoImpl(metaData.singletonFrame != null, "global".equals(metaData.name), identifier, metaData.name.startsWith("<new-env-")), + initialKind); } }