a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
799 lines
23 KiB
C#
799 lines
23 KiB
C#
//
|
|
// MetadataRowWriter.cs
|
|
//
|
|
// Author:
|
|
// Jb Evain (jbevain@gmail.com)
|
|
//
|
|
// Generated by /CodeGen/cecil-gen.rb do not edit
|
|
// Sat Feb 16 23:24:17 +0100 2008
|
|
//
|
|
// (C) 2005 Jb Evain
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining
|
|
// a copy of this software and associated documentation files (the
|
|
// "Software"), to deal in the Software without restriction, including
|
|
// without limitation the rights to use, copy, modify, merge, publish,
|
|
// distribute, sublicense, and/or sell copies of the Software, and to
|
|
// permit persons to whom the Software is furnished to do so, subject to
|
|
// the following conditions:
|
|
//
|
|
// The above copyright notice and this permission notice shall be
|
|
// included in all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
//
|
|
|
|
namespace Mono.Cecil.Metadata {
|
|
|
|
using System;
|
|
using System.Collections;
|
|
|
|
using Mono.Cecil.Binary;
|
|
|
|
sealed class MetadataRowWriter : BaseMetadataRowVisitor {
|
|
|
|
MetadataRoot m_root;
|
|
MemoryBinaryWriter m_binaryWriter;
|
|
|
|
Utilities.TableRowCounter m_counter;
|
|
int [] m_ciCache;
|
|
|
|
int m_blobHeapIdxSz;
|
|
int m_stringsHeapIdxSz;
|
|
int m_guidHeapIdxSz;
|
|
|
|
public MetadataRowWriter (MetadataTableWriter mtwv)
|
|
{
|
|
m_binaryWriter = mtwv.GetWriter ();
|
|
m_root = mtwv.GetMetadataRoot ();
|
|
m_ciCache = new int [13];
|
|
m_counter = new Utilities.TableRowCounter (GetNumberOfRows);
|
|
}
|
|
|
|
void WriteBlobPointer (uint pointer)
|
|
{
|
|
WriteByIndexSize (pointer, m_blobHeapIdxSz);
|
|
}
|
|
|
|
void WriteStringPointer (uint pointer)
|
|
{
|
|
WriteByIndexSize (pointer, m_stringsHeapIdxSz);
|
|
}
|
|
|
|
void WriteGuidPointer (uint pointer)
|
|
{
|
|
WriteByIndexSize (pointer, m_guidHeapIdxSz);
|
|
}
|
|
|
|
void WriteTablePointer (uint pointer, int rid)
|
|
{
|
|
WriteByIndexSize (pointer, GetNumberOfRows (rid) < (1 << 16) ? 2 : 4);
|
|
}
|
|
|
|
void WriteMetadataToken (MetadataToken token, CodedIndex ci)
|
|
{
|
|
WriteByIndexSize (Utilities.CompressMetadataToken (ci, token),
|
|
Utilities.GetCodedIndexSize (ci, m_counter, m_ciCache));
|
|
}
|
|
|
|
int GetNumberOfRows (int rid)
|
|
{
|
|
IMetadataTable t = m_root.Streams.TablesHeap [rid];
|
|
if (t == null || t.Rows == null)
|
|
return 0;
|
|
return t.Rows.Count;
|
|
}
|
|
|
|
void WriteByIndexSize (uint value, int size)
|
|
{
|
|
if (size == 4)
|
|
m_binaryWriter.Write (value);
|
|
else if (size == 2)
|
|
m_binaryWriter.Write ((ushort) value);
|
|
else
|
|
throw new MetadataFormatException ("Non valid size for indexing");
|
|
}
|
|
|
|
public AssemblyRow CreateAssemblyRow (AssemblyHashAlgorithm _hashAlgId, ushort _majorVersion, ushort _minorVersion, ushort _buildNumber, ushort _revisionNumber, AssemblyFlags _flags, uint _publicKey, uint _name, uint _culture)
|
|
{
|
|
AssemblyRow row = new AssemblyRow ();
|
|
row.HashAlgId = _hashAlgId;
|
|
row.MajorVersion = _majorVersion;
|
|
row.MinorVersion = _minorVersion;
|
|
row.BuildNumber = _buildNumber;
|
|
row.RevisionNumber = _revisionNumber;
|
|
row.Flags = _flags;
|
|
row.PublicKey = _publicKey;
|
|
row.Name = _name;
|
|
row.Culture = _culture;
|
|
return row;
|
|
}
|
|
|
|
public AssemblyOSRow CreateAssemblyOSRow (uint _oSPlatformID, uint _oSMajorVersion, uint _oSMinorVersion)
|
|
{
|
|
AssemblyOSRow row = new AssemblyOSRow ();
|
|
row.OSPlatformID = _oSPlatformID;
|
|
row.OSMajorVersion = _oSMajorVersion;
|
|
row.OSMinorVersion = _oSMinorVersion;
|
|
return row;
|
|
}
|
|
|
|
public AssemblyProcessorRow CreateAssemblyProcessorRow (uint _processor)
|
|
{
|
|
AssemblyProcessorRow row = new AssemblyProcessorRow ();
|
|
row.Processor = _processor;
|
|
return row;
|
|
}
|
|
|
|
public AssemblyRefRow CreateAssemblyRefRow (ushort _majorVersion, ushort _minorVersion, ushort _buildNumber, ushort _revisionNumber, AssemblyFlags _flags, uint _publicKeyOrToken, uint _name, uint _culture, uint _hashValue)
|
|
{
|
|
AssemblyRefRow row = new AssemblyRefRow ();
|
|
row.MajorVersion = _majorVersion;
|
|
row.MinorVersion = _minorVersion;
|
|
row.BuildNumber = _buildNumber;
|
|
row.RevisionNumber = _revisionNumber;
|
|
row.Flags = _flags;
|
|
row.PublicKeyOrToken = _publicKeyOrToken;
|
|
row.Name = _name;
|
|
row.Culture = _culture;
|
|
row.HashValue = _hashValue;
|
|
return row;
|
|
}
|
|
|
|
public AssemblyRefOSRow CreateAssemblyRefOSRow (uint _oSPlatformID, uint _oSMajorVersion, uint _oSMinorVersion, uint _assemblyRef)
|
|
{
|
|
AssemblyRefOSRow row = new AssemblyRefOSRow ();
|
|
row.OSPlatformID = _oSPlatformID;
|
|
row.OSMajorVersion = _oSMajorVersion;
|
|
row.OSMinorVersion = _oSMinorVersion;
|
|
row.AssemblyRef = _assemblyRef;
|
|
return row;
|
|
}
|
|
|
|
public AssemblyRefProcessorRow CreateAssemblyRefProcessorRow (uint _processor, uint _assemblyRef)
|
|
{
|
|
AssemblyRefProcessorRow row = new AssemblyRefProcessorRow ();
|
|
row.Processor = _processor;
|
|
row.AssemblyRef = _assemblyRef;
|
|
return row;
|
|
}
|
|
|
|
public ClassLayoutRow CreateClassLayoutRow (ushort _packingSize, uint _classSize, uint _parent)
|
|
{
|
|
ClassLayoutRow row = new ClassLayoutRow ();
|
|
row.PackingSize = _packingSize;
|
|
row.ClassSize = _classSize;
|
|
row.Parent = _parent;
|
|
return row;
|
|
}
|
|
|
|
public ConstantRow CreateConstantRow (ElementType _type, MetadataToken _parent, uint _value)
|
|
{
|
|
ConstantRow row = new ConstantRow ();
|
|
row.Type = _type;
|
|
row.Parent = _parent;
|
|
row.Value = _value;
|
|
return row;
|
|
}
|
|
|
|
public CustomAttributeRow CreateCustomAttributeRow (MetadataToken _parent, MetadataToken _type, uint _value)
|
|
{
|
|
CustomAttributeRow row = new CustomAttributeRow ();
|
|
row.Parent = _parent;
|
|
row.Type = _type;
|
|
row.Value = _value;
|
|
return row;
|
|
}
|
|
|
|
public DeclSecurityRow CreateDeclSecurityRow (SecurityAction _action, MetadataToken _parent, uint _permissionSet)
|
|
{
|
|
DeclSecurityRow row = new DeclSecurityRow ();
|
|
row.Action = _action;
|
|
row.Parent = _parent;
|
|
row.PermissionSet = _permissionSet;
|
|
return row;
|
|
}
|
|
|
|
public EventRow CreateEventRow (EventAttributes _eventFlags, uint _name, MetadataToken _eventType)
|
|
{
|
|
EventRow row = new EventRow ();
|
|
row.EventFlags = _eventFlags;
|
|
row.Name = _name;
|
|
row.EventType = _eventType;
|
|
return row;
|
|
}
|
|
|
|
public EventMapRow CreateEventMapRow (uint _parent, uint _eventList)
|
|
{
|
|
EventMapRow row = new EventMapRow ();
|
|
row.Parent = _parent;
|
|
row.EventList = _eventList;
|
|
return row;
|
|
}
|
|
|
|
public EventPtrRow CreateEventPtrRow (uint _event)
|
|
{
|
|
EventPtrRow row = new EventPtrRow ();
|
|
row.Event = _event;
|
|
return row;
|
|
}
|
|
|
|
public ExportedTypeRow CreateExportedTypeRow (TypeAttributes _flags, uint _typeDefId, uint _typeName, uint _typeNamespace, MetadataToken _implementation)
|
|
{
|
|
ExportedTypeRow row = new ExportedTypeRow ();
|
|
row.Flags = _flags;
|
|
row.TypeDefId = _typeDefId;
|
|
row.TypeName = _typeName;
|
|
row.TypeNamespace = _typeNamespace;
|
|
row.Implementation = _implementation;
|
|
return row;
|
|
}
|
|
|
|
public FieldRow CreateFieldRow (FieldAttributes _flags, uint _name, uint _signature)
|
|
{
|
|
FieldRow row = new FieldRow ();
|
|
row.Flags = _flags;
|
|
row.Name = _name;
|
|
row.Signature = _signature;
|
|
return row;
|
|
}
|
|
|
|
public FieldLayoutRow CreateFieldLayoutRow (uint _offset, uint _field)
|
|
{
|
|
FieldLayoutRow row = new FieldLayoutRow ();
|
|
row.Offset = _offset;
|
|
row.Field = _field;
|
|
return row;
|
|
}
|
|
|
|
public FieldMarshalRow CreateFieldMarshalRow (MetadataToken _parent, uint _nativeType)
|
|
{
|
|
FieldMarshalRow row = new FieldMarshalRow ();
|
|
row.Parent = _parent;
|
|
row.NativeType = _nativeType;
|
|
return row;
|
|
}
|
|
|
|
public FieldPtrRow CreateFieldPtrRow (uint _field)
|
|
{
|
|
FieldPtrRow row = new FieldPtrRow ();
|
|
row.Field = _field;
|
|
return row;
|
|
}
|
|
|
|
public FieldRVARow CreateFieldRVARow (RVA _rVA, uint _field)
|
|
{
|
|
FieldRVARow row = new FieldRVARow ();
|
|
row.RVA = _rVA;
|
|
row.Field = _field;
|
|
return row;
|
|
}
|
|
|
|
public FileRow CreateFileRow (FileAttributes _flags, uint _name, uint _hashValue)
|
|
{
|
|
FileRow row = new FileRow ();
|
|
row.Flags = _flags;
|
|
row.Name = _name;
|
|
row.HashValue = _hashValue;
|
|
return row;
|
|
}
|
|
|
|
public GenericParamRow CreateGenericParamRow (ushort _number, GenericParameterAttributes _flags, MetadataToken _owner, uint _name)
|
|
{
|
|
GenericParamRow row = new GenericParamRow ();
|
|
row.Number = _number;
|
|
row.Flags = _flags;
|
|
row.Owner = _owner;
|
|
row.Name = _name;
|
|
return row;
|
|
}
|
|
|
|
public GenericParamConstraintRow CreateGenericParamConstraintRow (uint _owner, MetadataToken _constraint)
|
|
{
|
|
GenericParamConstraintRow row = new GenericParamConstraintRow ();
|
|
row.Owner = _owner;
|
|
row.Constraint = _constraint;
|
|
return row;
|
|
}
|
|
|
|
public ImplMapRow CreateImplMapRow (PInvokeAttributes _mappingFlags, MetadataToken _memberForwarded, uint _importName, uint _importScope)
|
|
{
|
|
ImplMapRow row = new ImplMapRow ();
|
|
row.MappingFlags = _mappingFlags;
|
|
row.MemberForwarded = _memberForwarded;
|
|
row.ImportName = _importName;
|
|
row.ImportScope = _importScope;
|
|
return row;
|
|
}
|
|
|
|
public InterfaceImplRow CreateInterfaceImplRow (uint _class, MetadataToken _interface)
|
|
{
|
|
InterfaceImplRow row = new InterfaceImplRow ();
|
|
row.Class = _class;
|
|
row.Interface = _interface;
|
|
return row;
|
|
}
|
|
|
|
public ManifestResourceRow CreateManifestResourceRow (uint _offset, ManifestResourceAttributes _flags, uint _name, MetadataToken _implementation)
|
|
{
|
|
ManifestResourceRow row = new ManifestResourceRow ();
|
|
row.Offset = _offset;
|
|
row.Flags = _flags;
|
|
row.Name = _name;
|
|
row.Implementation = _implementation;
|
|
return row;
|
|
}
|
|
|
|
public MemberRefRow CreateMemberRefRow (MetadataToken _class, uint _name, uint _signature)
|
|
{
|
|
MemberRefRow row = new MemberRefRow ();
|
|
row.Class = _class;
|
|
row.Name = _name;
|
|
row.Signature = _signature;
|
|
return row;
|
|
}
|
|
|
|
public MethodRow CreateMethodRow (RVA _rVA, MethodImplAttributes _implFlags, MethodAttributes _flags, uint _name, uint _signature, uint _paramList)
|
|
{
|
|
MethodRow row = new MethodRow ();
|
|
row.RVA = _rVA;
|
|
row.ImplFlags = _implFlags;
|
|
row.Flags = _flags;
|
|
row.Name = _name;
|
|
row.Signature = _signature;
|
|
row.ParamList = _paramList;
|
|
return row;
|
|
}
|
|
|
|
public MethodImplRow CreateMethodImplRow (uint _class, MetadataToken _methodBody, MetadataToken _methodDeclaration)
|
|
{
|
|
MethodImplRow row = new MethodImplRow ();
|
|
row.Class = _class;
|
|
row.MethodBody = _methodBody;
|
|
row.MethodDeclaration = _methodDeclaration;
|
|
return row;
|
|
}
|
|
|
|
public MethodPtrRow CreateMethodPtrRow (uint _method)
|
|
{
|
|
MethodPtrRow row = new MethodPtrRow ();
|
|
row.Method = _method;
|
|
return row;
|
|
}
|
|
|
|
public MethodSemanticsRow CreateMethodSemanticsRow (MethodSemanticsAttributes _semantics, uint _method, MetadataToken _association)
|
|
{
|
|
MethodSemanticsRow row = new MethodSemanticsRow ();
|
|
row.Semantics = _semantics;
|
|
row.Method = _method;
|
|
row.Association = _association;
|
|
return row;
|
|
}
|
|
|
|
public MethodSpecRow CreateMethodSpecRow (MetadataToken _method, uint _instantiation)
|
|
{
|
|
MethodSpecRow row = new MethodSpecRow ();
|
|
row.Method = _method;
|
|
row.Instantiation = _instantiation;
|
|
return row;
|
|
}
|
|
|
|
public ModuleRow CreateModuleRow (ushort _generation, uint _name, uint _mvid, uint _encId, uint _encBaseId)
|
|
{
|
|
ModuleRow row = new ModuleRow ();
|
|
row.Generation = _generation;
|
|
row.Name = _name;
|
|
row.Mvid = _mvid;
|
|
row.EncId = _encId;
|
|
row.EncBaseId = _encBaseId;
|
|
return row;
|
|
}
|
|
|
|
public ModuleRefRow CreateModuleRefRow (uint _name)
|
|
{
|
|
ModuleRefRow row = new ModuleRefRow ();
|
|
row.Name = _name;
|
|
return row;
|
|
}
|
|
|
|
public NestedClassRow CreateNestedClassRow (uint _nestedClass, uint _enclosingClass)
|
|
{
|
|
NestedClassRow row = new NestedClassRow ();
|
|
row.NestedClass = _nestedClass;
|
|
row.EnclosingClass = _enclosingClass;
|
|
return row;
|
|
}
|
|
|
|
public ParamRow CreateParamRow (ParameterAttributes _flags, ushort _sequence, uint _name)
|
|
{
|
|
ParamRow row = new ParamRow ();
|
|
row.Flags = _flags;
|
|
row.Sequence = _sequence;
|
|
row.Name = _name;
|
|
return row;
|
|
}
|
|
|
|
public ParamPtrRow CreateParamPtrRow (uint _param)
|
|
{
|
|
ParamPtrRow row = new ParamPtrRow ();
|
|
row.Param = _param;
|
|
return row;
|
|
}
|
|
|
|
public PropertyRow CreatePropertyRow (PropertyAttributes _flags, uint _name, uint _type)
|
|
{
|
|
PropertyRow row = new PropertyRow ();
|
|
row.Flags = _flags;
|
|
row.Name = _name;
|
|
row.Type = _type;
|
|
return row;
|
|
}
|
|
|
|
public PropertyMapRow CreatePropertyMapRow (uint _parent, uint _propertyList)
|
|
{
|
|
PropertyMapRow row = new PropertyMapRow ();
|
|
row.Parent = _parent;
|
|
row.PropertyList = _propertyList;
|
|
return row;
|
|
}
|
|
|
|
public PropertyPtrRow CreatePropertyPtrRow (uint _property)
|
|
{
|
|
PropertyPtrRow row = new PropertyPtrRow ();
|
|
row.Property = _property;
|
|
return row;
|
|
}
|
|
|
|
public StandAloneSigRow CreateStandAloneSigRow (uint _signature)
|
|
{
|
|
StandAloneSigRow row = new StandAloneSigRow ();
|
|
row.Signature = _signature;
|
|
return row;
|
|
}
|
|
|
|
public TypeDefRow CreateTypeDefRow (TypeAttributes _flags, uint _name, uint _namespace, MetadataToken _extends, uint _fieldList, uint _methodList)
|
|
{
|
|
TypeDefRow row = new TypeDefRow ();
|
|
row.Flags = _flags;
|
|
row.Name = _name;
|
|
row.Namespace = _namespace;
|
|
row.Extends = _extends;
|
|
row.FieldList = _fieldList;
|
|
row.MethodList = _methodList;
|
|
return row;
|
|
}
|
|
|
|
public TypeRefRow CreateTypeRefRow (MetadataToken _resolutionScope, uint _name, uint _namespace)
|
|
{
|
|
TypeRefRow row = new TypeRefRow ();
|
|
row.ResolutionScope = _resolutionScope;
|
|
row.Name = _name;
|
|
row.Namespace = _namespace;
|
|
return row;
|
|
}
|
|
|
|
public TypeSpecRow CreateTypeSpecRow (uint _signature)
|
|
{
|
|
TypeSpecRow row = new TypeSpecRow ();
|
|
row.Signature = _signature;
|
|
return row;
|
|
}
|
|
|
|
public override void VisitRowCollection (RowCollection coll)
|
|
{
|
|
m_blobHeapIdxSz = m_root.Streams.BlobHeap != null ?
|
|
m_root.Streams.BlobHeap.IndexSize : 2;
|
|
m_stringsHeapIdxSz = m_root.Streams.StringsHeap != null ?
|
|
m_root.Streams.StringsHeap.IndexSize : 2;
|
|
m_guidHeapIdxSz = m_root.Streams.GuidHeap != null ?
|
|
m_root.Streams.GuidHeap.IndexSize : 2;
|
|
}
|
|
|
|
public override void VisitAssemblyRow (AssemblyRow row)
|
|
{
|
|
m_binaryWriter.Write ((uint) row.HashAlgId);
|
|
m_binaryWriter.Write (row.MajorVersion);
|
|
m_binaryWriter.Write (row.MinorVersion);
|
|
m_binaryWriter.Write (row.BuildNumber);
|
|
m_binaryWriter.Write (row.RevisionNumber);
|
|
m_binaryWriter.Write ((uint) row.Flags);
|
|
WriteBlobPointer (row.PublicKey);
|
|
WriteStringPointer (row.Name);
|
|
WriteStringPointer (row.Culture);
|
|
}
|
|
|
|
public override void VisitAssemblyOSRow (AssemblyOSRow row)
|
|
{
|
|
m_binaryWriter.Write (row.OSPlatformID);
|
|
m_binaryWriter.Write (row.OSMajorVersion);
|
|
m_binaryWriter.Write (row.OSMinorVersion);
|
|
}
|
|
|
|
public override void VisitAssemblyProcessorRow (AssemblyProcessorRow row)
|
|
{
|
|
m_binaryWriter.Write (row.Processor);
|
|
}
|
|
|
|
public override void VisitAssemblyRefRow (AssemblyRefRow row)
|
|
{
|
|
m_binaryWriter.Write (row.MajorVersion);
|
|
m_binaryWriter.Write (row.MinorVersion);
|
|
m_binaryWriter.Write (row.BuildNumber);
|
|
m_binaryWriter.Write (row.RevisionNumber);
|
|
m_binaryWriter.Write ((uint) row.Flags);
|
|
WriteBlobPointer (row.PublicKeyOrToken);
|
|
WriteStringPointer (row.Name);
|
|
WriteStringPointer (row.Culture);
|
|
WriteBlobPointer (row.HashValue);
|
|
}
|
|
|
|
public override void VisitAssemblyRefOSRow (AssemblyRefOSRow row)
|
|
{
|
|
m_binaryWriter.Write (row.OSPlatformID);
|
|
m_binaryWriter.Write (row.OSMajorVersion);
|
|
m_binaryWriter.Write (row.OSMinorVersion);
|
|
WriteTablePointer (row.AssemblyRef, AssemblyRefTable.RId);
|
|
}
|
|
|
|
public override void VisitAssemblyRefProcessorRow (AssemblyRefProcessorRow row)
|
|
{
|
|
m_binaryWriter.Write (row.Processor);
|
|
WriteTablePointer (row.AssemblyRef, AssemblyRefTable.RId);
|
|
}
|
|
|
|
public override void VisitClassLayoutRow (ClassLayoutRow row)
|
|
{
|
|
m_binaryWriter.Write (row.PackingSize);
|
|
m_binaryWriter.Write (row.ClassSize);
|
|
WriteTablePointer (row.Parent, TypeDefTable.RId);
|
|
}
|
|
|
|
public override void VisitConstantRow (ConstantRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.Type);
|
|
WriteMetadataToken (row.Parent, CodedIndex.HasConstant);
|
|
WriteBlobPointer (row.Value);
|
|
}
|
|
|
|
public override void VisitCustomAttributeRow (CustomAttributeRow row)
|
|
{
|
|
WriteMetadataToken (row.Parent, CodedIndex.HasCustomAttribute);
|
|
WriteMetadataToken (row.Type, CodedIndex.CustomAttributeType);
|
|
WriteBlobPointer (row.Value);
|
|
}
|
|
|
|
public override void VisitDeclSecurityRow (DeclSecurityRow row)
|
|
{
|
|
m_binaryWriter.Write ((short) row.Action);
|
|
WriteMetadataToken (row.Parent, CodedIndex.HasDeclSecurity);
|
|
WriteBlobPointer (row.PermissionSet);
|
|
}
|
|
|
|
public override void VisitEventRow (EventRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.EventFlags);
|
|
WriteStringPointer (row.Name);
|
|
WriteMetadataToken (row.EventType, CodedIndex.TypeDefOrRef);
|
|
}
|
|
|
|
public override void VisitEventMapRow (EventMapRow row)
|
|
{
|
|
WriteTablePointer (row.Parent, TypeDefTable.RId);
|
|
WriteTablePointer (row.EventList, EventTable.RId);
|
|
}
|
|
|
|
public override void VisitEventPtrRow (EventPtrRow row)
|
|
{
|
|
WriteTablePointer (row.Event, EventTable.RId);
|
|
}
|
|
|
|
public override void VisitExportedTypeRow (ExportedTypeRow row)
|
|
{
|
|
m_binaryWriter.Write ((uint) row.Flags);
|
|
m_binaryWriter.Write (row.TypeDefId);
|
|
WriteStringPointer (row.TypeName);
|
|
WriteStringPointer (row.TypeNamespace);
|
|
WriteMetadataToken (row.Implementation, CodedIndex.Implementation);
|
|
}
|
|
|
|
public override void VisitFieldRow (FieldRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.Flags);
|
|
WriteStringPointer (row.Name);
|
|
WriteBlobPointer (row.Signature);
|
|
}
|
|
|
|
public override void VisitFieldLayoutRow (FieldLayoutRow row)
|
|
{
|
|
m_binaryWriter.Write (row.Offset);
|
|
WriteTablePointer (row.Field, FieldTable.RId);
|
|
}
|
|
|
|
public override void VisitFieldMarshalRow (FieldMarshalRow row)
|
|
{
|
|
WriteMetadataToken (row.Parent, CodedIndex.HasFieldMarshal);
|
|
WriteBlobPointer (row.NativeType);
|
|
}
|
|
|
|
public override void VisitFieldPtrRow (FieldPtrRow row)
|
|
{
|
|
WriteTablePointer (row.Field, FieldTable.RId);
|
|
}
|
|
|
|
public override void VisitFieldRVARow (FieldRVARow row)
|
|
{
|
|
m_binaryWriter.Write (row.RVA.Value);
|
|
WriteTablePointer (row.Field, FieldTable.RId);
|
|
}
|
|
|
|
public override void VisitFileRow (FileRow row)
|
|
{
|
|
m_binaryWriter.Write ((uint) row.Flags);
|
|
WriteStringPointer (row.Name);
|
|
WriteBlobPointer (row.HashValue);
|
|
}
|
|
|
|
public override void VisitGenericParamRow (GenericParamRow row)
|
|
{
|
|
m_binaryWriter.Write (row.Number);
|
|
m_binaryWriter.Write ((ushort) row.Flags);
|
|
WriteMetadataToken (row.Owner, CodedIndex.TypeOrMethodDef);
|
|
WriteStringPointer (row.Name);
|
|
}
|
|
|
|
public override void VisitGenericParamConstraintRow (GenericParamConstraintRow row)
|
|
{
|
|
WriteTablePointer (row.Owner, GenericParamTable.RId);
|
|
WriteMetadataToken (row.Constraint, CodedIndex.TypeDefOrRef);
|
|
}
|
|
|
|
public override void VisitImplMapRow (ImplMapRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.MappingFlags);
|
|
WriteMetadataToken (row.MemberForwarded, CodedIndex.MemberForwarded);
|
|
WriteStringPointer (row.ImportName);
|
|
WriteTablePointer (row.ImportScope, ModuleRefTable.RId);
|
|
}
|
|
|
|
public override void VisitInterfaceImplRow (InterfaceImplRow row)
|
|
{
|
|
WriteTablePointer (row.Class, TypeDefTable.RId);
|
|
WriteMetadataToken (row.Interface, CodedIndex.TypeDefOrRef);
|
|
}
|
|
|
|
public override void VisitManifestResourceRow (ManifestResourceRow row)
|
|
{
|
|
m_binaryWriter.Write (row.Offset);
|
|
m_binaryWriter.Write ((uint) row.Flags);
|
|
WriteStringPointer (row.Name);
|
|
WriteMetadataToken (row.Implementation, CodedIndex.Implementation);
|
|
}
|
|
|
|
public override void VisitMemberRefRow (MemberRefRow row)
|
|
{
|
|
WriteMetadataToken (row.Class, CodedIndex.MemberRefParent);
|
|
WriteStringPointer (row.Name);
|
|
WriteBlobPointer (row.Signature);
|
|
}
|
|
|
|
public override void VisitMethodRow (MethodRow row)
|
|
{
|
|
m_binaryWriter.Write (row.RVA.Value);
|
|
m_binaryWriter.Write ((ushort) row.ImplFlags);
|
|
m_binaryWriter.Write ((ushort) row.Flags);
|
|
WriteStringPointer (row.Name);
|
|
WriteBlobPointer (row.Signature);
|
|
WriteTablePointer (row.ParamList, ParamTable.RId);
|
|
}
|
|
|
|
public override void VisitMethodImplRow (MethodImplRow row)
|
|
{
|
|
WriteTablePointer (row.Class, TypeDefTable.RId);
|
|
WriteMetadataToken (row.MethodBody, CodedIndex.MethodDefOrRef);
|
|
WriteMetadataToken (row.MethodDeclaration, CodedIndex.MethodDefOrRef);
|
|
}
|
|
|
|
public override void VisitMethodPtrRow (MethodPtrRow row)
|
|
{
|
|
WriteTablePointer (row.Method, MethodTable.RId);
|
|
}
|
|
|
|
public override void VisitMethodSemanticsRow (MethodSemanticsRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.Semantics);
|
|
WriteTablePointer (row.Method, MethodTable.RId);
|
|
WriteMetadataToken (row.Association, CodedIndex.HasSemantics);
|
|
}
|
|
|
|
public override void VisitMethodSpecRow (MethodSpecRow row)
|
|
{
|
|
WriteMetadataToken (row.Method, CodedIndex.MethodDefOrRef);
|
|
WriteBlobPointer (row.Instantiation);
|
|
}
|
|
|
|
public override void VisitModuleRow (ModuleRow row)
|
|
{
|
|
m_binaryWriter.Write (row.Generation);
|
|
WriteStringPointer (row.Name);
|
|
WriteGuidPointer (row.Mvid);
|
|
WriteGuidPointer (row.EncId);
|
|
WriteGuidPointer (row.EncBaseId);
|
|
}
|
|
|
|
public override void VisitModuleRefRow (ModuleRefRow row)
|
|
{
|
|
WriteStringPointer (row.Name);
|
|
}
|
|
|
|
public override void VisitNestedClassRow (NestedClassRow row)
|
|
{
|
|
WriteTablePointer (row.NestedClass, TypeDefTable.RId);
|
|
WriteTablePointer (row.EnclosingClass, TypeDefTable.RId);
|
|
}
|
|
|
|
public override void VisitParamRow (ParamRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.Flags);
|
|
m_binaryWriter.Write (row.Sequence);
|
|
WriteStringPointer (row.Name);
|
|
}
|
|
|
|
public override void VisitParamPtrRow (ParamPtrRow row)
|
|
{
|
|
WriteTablePointer (row.Param, ParamTable.RId);
|
|
}
|
|
|
|
public override void VisitPropertyRow (PropertyRow row)
|
|
{
|
|
m_binaryWriter.Write ((ushort) row.Flags);
|
|
WriteStringPointer (row.Name);
|
|
WriteBlobPointer (row.Type);
|
|
}
|
|
|
|
public override void VisitPropertyMapRow (PropertyMapRow row)
|
|
{
|
|
WriteTablePointer (row.Parent, TypeDefTable.RId);
|
|
WriteTablePointer (row.PropertyList, PropertyTable.RId);
|
|
}
|
|
|
|
public override void VisitPropertyPtrRow (PropertyPtrRow row)
|
|
{
|
|
WriteTablePointer (row.Property, PropertyTable.RId);
|
|
}
|
|
|
|
public override void VisitStandAloneSigRow (StandAloneSigRow row)
|
|
{
|
|
WriteBlobPointer (row.Signature);
|
|
}
|
|
|
|
public override void VisitTypeDefRow (TypeDefRow row)
|
|
{
|
|
m_binaryWriter.Write ((uint) row.Flags);
|
|
WriteStringPointer (row.Name);
|
|
WriteStringPointer (row.Namespace);
|
|
WriteMetadataToken (row.Extends, CodedIndex.TypeDefOrRef);
|
|
WriteTablePointer (row.FieldList, FieldTable.RId);
|
|
WriteTablePointer (row.MethodList, MethodTable.RId);
|
|
}
|
|
|
|
public override void VisitTypeRefRow (TypeRefRow row)
|
|
{
|
|
WriteMetadataToken (row.ResolutionScope, CodedIndex.ResolutionScope);
|
|
WriteStringPointer (row.Name);
|
|
WriteStringPointer (row.Namespace);
|
|
}
|
|
|
|
public override void VisitTypeSpecRow (TypeSpecRow row)
|
|
{
|
|
WriteBlobPointer (row.Signature);
|
|
}
|
|
|
|
}
|
|
}
|