anchor.diff:          | Item.CustomOperation (customOpName,_,_) -> customOpName
           | Item.CustomBuilder (nm,_) -> nm
           | _ ->  ""
  +let valRefHash (vref: ValRef) = 
  +    match vref.TryDeref with 
  +    | None -> 0 
  +    | Some v -> LanguagePrimitives.PhysicalHash v
   
   /// Information about an extension member held in the name resolution environment
   type ExtensionMember = 
  
positive.code:        | ILExtMem (_,md1,_), ILExtMem (_,md2,_) -> MethInfo.MethInfosUseIdenticalDefinitions md1 md2
         | _ -> false
  
     /// Describes the sequence order of the introduction of an extension method. Extension methods that are introduced
     /// later through 'open' get priority in overload resolution.
     member x.Priority = 
  
negative.code:     let g = infoReader.g
      let amap = infoReader.amap
      // NOTE: multiple "open"'s push multiple duplicate values into eIndexedExtensionMembers, hence setify.
      let seen = HashSet(ExtensionMember.Comparer g)
      let propCollector = new PropertyCollector(g,amap,m,declaringTy,optFilter,ad)
      for emem in extMemInfos do
          if seen.Add emem then
              match emem with 
              | FSExtMem (vref,_pri) -> 
                  match vref.MemberInfo with 
                  | None -> ()
                  | Some membInfo -> propCollector.Collect(membInfo,vref)
              | ILExtMem _ -> 
                  // No extension properties coming from .NET
                  ()
      propCollector.Close()
  
  /// Query the available extension properties of a type (including extension properties for inherited types)
  