@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);
 }
 @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 = "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 = "isLogicalKind(frame, frameSlot)")
 protected void doLogical(
     VirtualFrame frame, byte value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setByteAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }