anchor.diff:  open System.Runtime.InteropServices
   
   #nowarn "9" //Disables warning about "generation of unverifiable .NET IL code"  
  +
  +type DelegateCell(astId:int, closureId:int, delegateType:ClrType) =
  +  let hashCode = 37 * (37 * astId + closureId) + delegateType.GetHashCode()
  +
  +  member self.AstId = astId
  +  member self.ClosureId = closureId
  +  member self.DelegateType = delegateType
  +
  +  override self.GetHashCode() = hashCode
  +  override self.Equals obj = 
  +    match obj with
  +    | :? DelegateCell as cell -> 
  +         self.AstId = cell.AstId
  +      && self.ClosureId = self.ClosureId
  +      && self.DelegateType = self.DelegateType
  +    | _ -> false
   
   (*The currently executing environment*)
   [<AllowNullLiteral>]
  
positive.code:   let delegateCache = new SafeDict<DelegateCell, System.Delegate>()
  
    //Implementation of IEnvironment.GetDelegate
    member x.GetDelegate func delegateType types =
      let cell = new DelegateCell(func, delegateType)
      let success, delegate' = delegateCache.TryGetValue(cell)
      if success then delegate'
      else
  
negative.code:     let env = new Environment(sa, eg)
      env.Globals <- new Object(env)
      env
  
  and [<StructLayout(LayoutKind.Explicit)>] Box =
    struct
  