@Specialization
 protected void doObject(
     VirtualFrame frame, Object value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   MaterializedFrame profiledFrame = enclosingFrameProfile.profile(enclosingFrame);
   Object newValue =
       shareObjectValue(
           profiledFrame, frameSlot, storedObjectProfile.profile(value), getMode(), true);
   FrameSlotChangeMonitor.setObjectAndInvalidate(
       profiledFrame, frameSlot, newValue, true, invalidateProfile);
 }
 @Override
 public void execute(VirtualFrame frame, Object value, MaterializedFrame enclosingFrame) {
   MaterializedFrame profiledEnclosingFrame = enclosingFrameProfile.profile(enclosingFrame);
   if (hasValueProfile.profile(writeNode.getFrameSlotNode().hasValue(profiledEnclosingFrame))) {
     writeNode.execute(frame, value, profiledEnclosingFrame);
   } else {
     MaterializedFrame superFrame = RArguments.getEnclosingFrame(profiledEnclosingFrame);
     if (nullSuperFrameProfile.profile(superFrame == null)) {
       // Might be the case if "{ x <<- 42 }": This is in globalEnv!
       superFrame = REnvironment.globalEnv().getFrame();
     }
     nextNode.execute(frame, value, superFrame);
   }
 }
 @Specialization(guards = "isDoubleKind(frame, frameSlot)")
 protected void doDouble(
     VirtualFrame frame, double value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setDoubleAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }
 @Specialization(guards = "isIntegerKind(frame, frameSlot)")
 protected void doInteger(
     VirtualFrame frame, int value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setIntAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }
 @Specialization(guards = "isLogicalKind(frame, frameSlot)")
 protected void doLogical(
     VirtualFrame frame, byte value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setByteAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }