Skip to content
Snippets Groups Projects
Commit fa9d20e1 authored by Lukas Stadler's avatar Lukas Stadler
Browse files

only deoptimize frame slots with String identifiers

parent 145e7b91
Branches
No related tags found
No related merge requests found
...@@ -96,7 +96,7 @@ public class PromiseHelperNode extends RBaseNode { ...@@ -96,7 +96,7 @@ public class PromiseHelperNode extends RBaseNode {
boolean deoptOne = false; boolean deoptOne = false;
for (FrameSlot slot : frame.getFrameDescriptor().getSlots().toArray(new FrameSlot[0])) { for (FrameSlot slot : frame.getFrameDescriptor().getSlots().toArray(new FrameSlot[0])) {
// We're only interested in RPromises // We're only interested in RPromises
if (slot.getKind() != FrameSlotKind.Object) { if (slot.getKind() != FrameSlotKind.Object || !(slot.getIdentifier() instanceof String)) {
continue; continue;
} }
......
...@@ -681,7 +681,7 @@ public final class FrameSlotChangeMonitor { ...@@ -681,7 +681,7 @@ public final class FrameSlotChangeMonitor {
Object info = slot.getInfo(); Object info = slot.getInfo();
if (!(info instanceof FrameSlotInfoImpl)) { if (!(info instanceof FrameSlotInfoImpl)) {
CompilerDirectives.transferToInterpreter(); 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; return (FrameSlotInfoImpl) info;
} }
...@@ -703,14 +703,10 @@ public final class FrameSlotChangeMonitor { ...@@ -703,14 +703,10 @@ public final class FrameSlotChangeMonitor {
if (frameSlot != null) { if (frameSlot != null) {
return frameSlot; return frameSlot;
} else { } else {
if (identifier instanceof String || ((RFrameSlot) identifier).isMultiSlot()) { FrameDescriptorMetaData metaData = getMetaData(fd);
FrameDescriptorMetaData metaData = getMetaData(fd); invalidateNames(metaData, Arrays.asList(identifier));
invalidateNames(metaData, Arrays.asList(identifier)); return fd.addFrameSlot(identifier, new FrameSlotInfoImpl(metaData.singletonFrame != null, "global".equals(metaData.name), identifier, metaData.name.startsWith("<new-env-")),
return fd.addFrameSlot(identifier, new FrameSlotInfoImpl(metaData.singletonFrame != null, "global".equals(metaData.name), identifier, metaData.name.startsWith("<new-env-")), initialKind);
initialKind);
} else {
return fd.addFrameSlot(identifier, initialKind);
}
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment