anchor.diff:  
   
       member this.MovePrevious() = 
  -      let mutable newInner = this.innerCursor
  -
  +      let mutable newInner = Unchecked.defaultof<_> 
  +      let mutable doSwitchInner = false
         let mutable result = Unchecked.defaultof<_>
         let mutable doSpin = true
         let sw = new SpinWait()
  
positive.code:           else sw.SpinOnce()
        if result then
          //if this.HasValidInner then this.innerCursor.Dispose()
          this.innerCursor <- newInner
        result
  
      member this.MoveFirst() =
  
negative.code:         result <-
          /////////// Start read-locked code /////////////
            try
              // here we use copy-by-value of structs
              newInner <- this.innerCursor
              if (not this.HasValidInner) && (not this.isBatch) then
                if this.outerCursor.MoveLast() then
                  newInner <- new SortedMapCursor<'K,'V>(this.outerCursor.CurrentValue)
                  doSwitchInner <- true
                  newInner.MoveLast()
                else false
              else
                let mutable entered = false
                try
                  entered <- enterWriteLockIf &this.source.locker this.source.isSynchronized
                  if this.HasValidInner && newInner.MovePrevious() then 
                    doSwitchInner <- true
                    true
                  else
                    if this.outerCursor.MovePrevious() then
                      this.isBatch <- false // if was batch, moved to the first element of the new batch
                      newInner <- new SortedMapCursor<'K,'V>(this.outerCursor.CurrentValue)
                      doSwitchInner <- true
                      newInner.MovePrevious()
                    else false
                finally
                  exitWriteLockIf &this.source.locker entered
            with
            | :? OutOfOrderKeyException<'K> as ooex ->
               raise (new OutOfOrderKeyException<'K>((if this.isBatch then this.outerCursor.CurrentValue.Last.Key else this.innerCursor.CurrentKey), "SortedMap order was changed since last move. Catch OutOfOrderKeyException and use its CurrentKey property together with MoveAt(key, Lookup.GT) to recover."))
  