anchor.diff:            nextCodeAddr = cilStartAddress
             data = ByteBuffer.Create 200
             resources = ByteBuffer.Create 200
  -          tables= Array.init 64 (fun i -> MetadataTable<_>.New ("row table "+string i,System.Collections.Generic.EqualityComparer.Default))
  -          AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",System.Collections.Generic.EqualityComparer.Default)
  -          documents=MetadataTable<_>.New("pdbdocs",System.Collections.Generic.EqualityComparer.Default)
  +          tables= 
  +              Array.init 64 (fun i -> 
  +                  if (i = TableNames.AssemblyRef.Index ||
  +                      i = TableNames.MemberRef.Index ||
  +                      i = TableNames.ModuleRef.Index ||
  +                      i = TableNames.File.Index ||
  +                      i = TableNames.TypeRef.Index ||
  +                      i = TableNames.TypeSpec.Index ||
  +                      i = TableNames.MethodSpec.Index ||
  +                      i = TableNames.StandAloneSig.Index ||
  +                      i = TableNames.GenericParam.Index) then 
  +                      MetadataTable.Shared (MetadataTable<SharedRow>.New ("row table "+string i,EqualityComparer.Default))
  +                    else
  +                      MetadataTable.Unshared (MetadataTable<UnsharedRow>.New ("row table "+string i,EqualityComparer.Default)))
  +
  +          AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",EqualityComparer.Default)
  +          documents=MetadataTable<_>.New("pdbdocs",EqualityComparer.Default)
             trefCache=new Dictionary<_,_>(100)
             pdbinfo= new ResizeArray<_>(200)
             moduleGuid= Array.zeroCreate 16
  -          fieldDefs= MetadataTable<_>.New("field defs",System.Collections.Generic.EqualityComparer.Default)
  -          methodDefIdxsByKey = MetadataTable<_>.New("method defs",System.Collections.Generic.EqualityComparer.Default)
  +          fieldDefs= MetadataTable<_>.New("field defs",EqualityComparer.Default)
  +          methodDefIdxsByKey = MetadataTable<_>.New("method defs",EqualityComparer.Default)
             // This uses reference identity on ILMethodDef objects
             methodDefIdxs = new Dictionary<_,_>(100, HashIdentity.Reference)
  -          propertyDefs = MetadataTable<_>.New("property defs",System.Collections.Generic.EqualityComparer.Default)
  -          eventDefs = MetadataTable<_>.New("event defs",System.Collections.Generic.EqualityComparer.Default)
  -          typeDefs = MetadataTable<_>.New("type defs",System.Collections.Generic.EqualityComparer.Default)
  +          propertyDefs = MetadataTable<_>.New("property defs",EqualityComparer.Default)
  +          eventDefs = MetadataTable<_>.New("event defs",EqualityComparer.Default)
  +          typeDefs = MetadataTable<_>.New("type defs",EqualityComparer.Default)
             entrypoint=None
             generatePdb=generatePdb
             // These must use structural comparison since they are keyed by arrays
             guids=MetadataTable<_>.New("guids",HashIdentity.Structural)
             blobs= MetadataTable<_>.New("blobs",HashIdentity.Structural)
  -          strings= MetadataTable<_>.New("strings",System.Collections.Generic.EqualityComparer.Default) 
  -          userStrings= MetadataTable<_>.New("user strings",System.Collections.Generic.EqualityComparer.Default) }
  +          strings= MetadataTable<_>.New("strings",EqualityComparer.Default) 
  +          userStrings= MetadataTable<_>.New("user strings",EqualityComparer.Default) }
   
       // Now the main compilation step 
       GenModule cenv  m
  
positive.code:             bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST
              bb.EmitZ32 minst.Length
              minst |> ILList.iter (EmitType cenv env bb))
      FindOrAddRow cenv TableNames.MethodSpec 
        (SimpleSharedRow 
            [| MethodDefOrRef (mdorTag,mdorRow)
               Blob (GetBytesAsBlobIdx cenv blob) |])
  
  
negative.code: // The Writer Context
  //---------------------------------------------------------------------
  
  [<NoComparison; NoEquality; RequireQualifiedAccess>]
  type MetadataTable =
      | Shared of MetadataTable<SharedRow>
      | Unshared of MetadataTable<UnsharedRow>
      member t.FindOrAddSharedEntry(x) = match t with Shared u -> u.FindOrAddSharedEntry(x) | _ -> failwith "incorrect table kind"
      member t.AddSharedEntry(x) = match t with | Shared u -> u.AddSharedEntry(x) | _ -> failwith "incorrect table kind"
      member t.AddUnsharedEntry(x) = match t with Unshared u -> u.AddUnsharedEntry(x) | _ -> failwith "shared"
      member t.EntriesAsArray = match t with Shared u -> u.EntriesAsArray | _ -> failwith "incorrect table kind"
      member t.SetRowsOfTable rows = match t with Shared u -> u.SetRowsOfTable rows | _ -> failwith "incorrect table kind"
      member t.Count = match t with Unshared u -> u.Count | Shared u -> u.Count 
  
  
  [<NoEquality; NoComparison>]
  type cenv = 
      { primaryAssembly: ILScopeRef
  