anchor.diff:                  | _ -> parse sigNameOpt
               | _ -> parse sigNameOpt
   
  +        member _.Invalidate() =
  +            weakCache <- None
  +
           member _.FileName = filename
   
   /// Accumulated results of type checking. The minimum amount of state in order to continue type-checking following files.
  
positive.code:         let stamp = StampFileNameTask cache ctok fileInfo
  
          if currentStamp <> stamp then
              // Something changed, the finalized view of the project must be invalidated.
              finalizedSemanticModel <- None
  
              // Invalidate the file and all files below it.
              stampedFileNames.[slot..]
              |> Array.iteri (fun j _ -> 
                  stampedFileNames.[slot + j] <- StampFileNameTask cache ctok fileNames.[slot + j]
                  semanticModels.[slot + j] <- None
              )
  
          if semanticModels.[slot].IsNone then
              cont slot fileInfo
  
negative.code:                     }
          }
  
      member private this.TypeCheck (partialCheck: bool) =  
          match partialCheck, !lazyTcInfoState with
          | true, Some (PartialState _ as state)
          | true, Some (FullState _ as state) -> state |> Eventually.Done
  