@Specialization
 protected void doObject(Object value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   MaterializedFrame profiledFrame = enclosingFrameProfile.profile(enclosingFrame);
   Object newValue =
       shareObjectValue(
           profiledFrame, frameSlot, storedObjectProfile.profile(value), mode, true);
   FrameSlotChangeMonitor.setObjectAndInvalidate(
       profiledFrame, frameSlot, newValue, true, invalidateProfile);
 }
 @Specialization(guards = "isDoubleKind(enclosingFrame, frameSlot)")
 protected void doDouble(double value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setDoubleAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }
 @Specialization(guards = "isIntegerKind(enclosingFrame, frameSlot)")
 protected void doInteger(int value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setIntAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }
 @Specialization(guards = "isLogicalKind(enclosingFrame, frameSlot)")
 protected void doLogical(byte value, MaterializedFrame enclosingFrame, FrameSlot frameSlot) {
   FrameSlotChangeMonitor.setByteAndInvalidate(
       enclosingFrameProfile.profile(enclosingFrame), frameSlot, value, true, invalidateProfile);
 }