[Add] FishNet
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal sealed class BlobHeap : Heap
|
||||
{
|
||||
public BlobHeap(byte[] data) : base(data) { }
|
||||
|
||||
public byte[] Read(uint index)
|
||||
{
|
||||
if (index == 0 || index > data.Length - 1)
|
||||
return Empty<byte>.Array;
|
||||
|
||||
int position = (int)index;
|
||||
int length = (int)data.ReadCompressedUInt32(ref position);
|
||||
|
||||
if (length > data.Length - position)
|
||||
return Empty<byte>.Array;
|
||||
|
||||
byte[] buffer = new byte [length];
|
||||
|
||||
Buffer.BlockCopy(data, position, buffer, 0, length);
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
public void GetView(uint signature, out byte[] buffer, out int index, out int length)
|
||||
{
|
||||
if (signature == 0 || signature > data.Length - 1)
|
||||
{
|
||||
buffer = null;
|
||||
index = length = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
buffer = data;
|
||||
|
||||
index = (int)signature;
|
||||
length = (int)buffer.ReadCompressedUInt32(ref index);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 33eef67f4a74e1c40a6bdb3da9d22d00
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/BlobHeap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,489 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using MonoFN.Cecil.PE;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using RVA = System.UInt32;
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal sealed class TableHeapBuffer : HeapBuffer
|
||||
{
|
||||
private readonly ModuleDefinition module;
|
||||
private readonly MetadataBuilder metadata;
|
||||
internal readonly TableInformation[] table_infos = new TableInformation [Mixin.TableCount];
|
||||
internal readonly MetadataTable[] tables = new MetadataTable [Mixin.TableCount];
|
||||
private bool large_string;
|
||||
private bool large_blob;
|
||||
private bool large_guid;
|
||||
private readonly int[] coded_index_sizes = new int [Mixin.CodedIndexCount];
|
||||
private readonly Func<Table, int> counter;
|
||||
internal uint[] string_offsets;
|
||||
public override bool IsEmpty
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public TableHeapBuffer(ModuleDefinition module, MetadataBuilder metadata) : base(24)
|
||||
{
|
||||
this.module = module;
|
||||
this.metadata = metadata;
|
||||
counter = GetTableLength;
|
||||
}
|
||||
|
||||
private int GetTableLength(Table table)
|
||||
{
|
||||
return (int)table_infos[(int)table].Length;
|
||||
}
|
||||
|
||||
public TTable GetTable<TTable>(Table table) where TTable : MetadataTable, new()
|
||||
{
|
||||
TTable md_table = (TTable)tables[(int)table];
|
||||
if (md_table != null)
|
||||
return md_table;
|
||||
|
||||
md_table = new();
|
||||
tables[(int)table] = md_table;
|
||||
return md_table;
|
||||
}
|
||||
|
||||
public void WriteBySize(uint value, int size)
|
||||
{
|
||||
if (size == 4)
|
||||
WriteUInt32(value);
|
||||
else
|
||||
WriteUInt16((ushort)value);
|
||||
}
|
||||
|
||||
public void WriteBySize(uint value, bool large)
|
||||
{
|
||||
if (large)
|
||||
WriteUInt32(value);
|
||||
else
|
||||
WriteUInt16((ushort)value);
|
||||
}
|
||||
|
||||
public void WriteString(uint @string)
|
||||
{
|
||||
WriteBySize(string_offsets[@string], large_string);
|
||||
}
|
||||
|
||||
public void WriteBlob(uint blob)
|
||||
{
|
||||
WriteBySize(blob, large_blob);
|
||||
}
|
||||
|
||||
public void WriteGuid(uint guid)
|
||||
{
|
||||
WriteBySize(guid, large_guid);
|
||||
}
|
||||
|
||||
public void WriteRID(uint rid, Table table)
|
||||
{
|
||||
WriteBySize(rid, table_infos[(int)table].IsLarge);
|
||||
}
|
||||
|
||||
private int GetCodedIndexSize(CodedIndex coded_index)
|
||||
{
|
||||
int index = (int)coded_index;
|
||||
int size = coded_index_sizes[index];
|
||||
if (size != 0)
|
||||
return size;
|
||||
|
||||
return coded_index_sizes[index] = coded_index.GetSize(counter);
|
||||
}
|
||||
|
||||
public void WriteCodedRID(uint rid, CodedIndex coded_index)
|
||||
{
|
||||
WriteBySize(rid, GetCodedIndexSize(coded_index));
|
||||
}
|
||||
|
||||
public void WriteTableHeap()
|
||||
{
|
||||
WriteUInt32(0); // Reserved
|
||||
WriteByte(GetTableHeapVersion()); // MajorVersion
|
||||
WriteByte(0); // MinorVersion
|
||||
WriteByte(GetHeapSizes()); // HeapSizes
|
||||
WriteByte(10); // Reserved2
|
||||
WriteUInt64(GetValid()); // Valid
|
||||
WriteUInt64(0xc416003301fa00); // Sorted
|
||||
|
||||
WriteRowCount();
|
||||
WriteTables();
|
||||
}
|
||||
|
||||
private void WriteRowCount()
|
||||
{
|
||||
for (int i = 0; i < tables.Length; i++)
|
||||
{
|
||||
MetadataTable table = tables[i];
|
||||
if (table == null || table.Length == 0)
|
||||
continue;
|
||||
|
||||
WriteUInt32((uint)table.Length);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteTables()
|
||||
{
|
||||
for (int i = 0; i < tables.Length; i++)
|
||||
{
|
||||
MetadataTable table = tables[i];
|
||||
if (table == null || table.Length == 0)
|
||||
continue;
|
||||
|
||||
table.Write(this);
|
||||
}
|
||||
}
|
||||
|
||||
private ulong GetValid()
|
||||
{
|
||||
ulong valid = 0;
|
||||
|
||||
for (int i = 0; i < tables.Length; i++)
|
||||
{
|
||||
MetadataTable table = tables[i];
|
||||
if (table == null || table.Length == 0)
|
||||
continue;
|
||||
|
||||
table.Sort();
|
||||
valid |= 1UL << i;
|
||||
}
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
public void ComputeTableInformations()
|
||||
{
|
||||
if (metadata.metadata_builder != null)
|
||||
ComputeTableInformations(metadata.metadata_builder.table_heap);
|
||||
|
||||
ComputeTableInformations(metadata.table_heap);
|
||||
}
|
||||
|
||||
private void ComputeTableInformations(TableHeapBuffer table_heap)
|
||||
{
|
||||
MetadataTable[] tables = table_heap.tables;
|
||||
for (int i = 0; i < tables.Length; i++)
|
||||
{
|
||||
MetadataTable table = tables[i];
|
||||
if (table != null && table.Length > 0)
|
||||
table_infos[i].Length = (uint)table.Length;
|
||||
}
|
||||
}
|
||||
|
||||
private byte GetHeapSizes()
|
||||
{
|
||||
byte heap_sizes = 0;
|
||||
|
||||
if (metadata.string_heap.IsLarge)
|
||||
{
|
||||
large_string = true;
|
||||
heap_sizes |= 0x01;
|
||||
}
|
||||
|
||||
if (metadata.guid_heap.IsLarge)
|
||||
{
|
||||
large_guid = true;
|
||||
heap_sizes |= 0x02;
|
||||
}
|
||||
|
||||
if (metadata.blob_heap.IsLarge)
|
||||
{
|
||||
large_blob = true;
|
||||
heap_sizes |= 0x04;
|
||||
}
|
||||
|
||||
return heap_sizes;
|
||||
}
|
||||
|
||||
private byte GetTableHeapVersion()
|
||||
{
|
||||
switch (module.Runtime)
|
||||
{
|
||||
case TargetRuntime.Net_1_0:
|
||||
case TargetRuntime.Net_1_1:
|
||||
return 1;
|
||||
default:
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
public void FixupData(RVA data_rva)
|
||||
{
|
||||
FieldRVATable table = GetTable<FieldRVATable>(Table.FieldRVA);
|
||||
if (table.length == 0)
|
||||
return;
|
||||
|
||||
int field_idx_size = GetTable<FieldTable>(Table.Field).IsLarge ? 4 : 2;
|
||||
int previous = position;
|
||||
|
||||
position = table.position;
|
||||
for (int i = 0; i < table.length; i++)
|
||||
{
|
||||
uint rva = ReadUInt32();
|
||||
position -= 4;
|
||||
WriteUInt32(rva + data_rva);
|
||||
position += field_idx_size;
|
||||
}
|
||||
|
||||
position = previous;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class ResourceBuffer : ByteBuffer
|
||||
{
|
||||
public ResourceBuffer() : base(0) { }
|
||||
|
||||
public uint AddResource(byte[] resource)
|
||||
{
|
||||
uint offset = (uint)position;
|
||||
WriteInt32(resource.Length);
|
||||
WriteBytes(resource);
|
||||
return offset;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class DataBuffer : ByteBuffer
|
||||
{
|
||||
public DataBuffer() : base(0) { }
|
||||
|
||||
public RVA AddData(byte[] data)
|
||||
{
|
||||
RVA rva = (RVA)position;
|
||||
WriteBytes(data);
|
||||
return rva;
|
||||
}
|
||||
}
|
||||
|
||||
internal abstract class HeapBuffer : ByteBuffer
|
||||
{
|
||||
public bool IsLarge
|
||||
{
|
||||
get { return length > 65535; }
|
||||
}
|
||||
public abstract bool IsEmpty { get; }
|
||||
protected HeapBuffer(int length) : base(length) { }
|
||||
}
|
||||
|
||||
internal sealed class GuidHeapBuffer : HeapBuffer
|
||||
{
|
||||
private readonly Dictionary<Guid, uint> guids = new();
|
||||
public override bool IsEmpty
|
||||
{
|
||||
get { return length == 0; }
|
||||
}
|
||||
public GuidHeapBuffer() : base(16) { }
|
||||
|
||||
public uint GetGuidIndex(Guid guid)
|
||||
{
|
||||
uint index;
|
||||
if (guids.TryGetValue(guid, out index))
|
||||
return index;
|
||||
|
||||
index = (uint)guids.Count + 1;
|
||||
WriteGuid(guid);
|
||||
guids.Add(guid, index);
|
||||
return index;
|
||||
}
|
||||
|
||||
private void WriteGuid(Guid guid)
|
||||
{
|
||||
WriteBytes(guid.ToByteArray());
|
||||
}
|
||||
}
|
||||
|
||||
internal class StringHeapBuffer : HeapBuffer
|
||||
{
|
||||
protected Dictionary<string, uint> strings = new(StringComparer.Ordinal);
|
||||
public sealed override bool IsEmpty
|
||||
{
|
||||
get { return length <= 1; }
|
||||
}
|
||||
|
||||
public StringHeapBuffer() : base(1)
|
||||
{
|
||||
WriteByte(0);
|
||||
}
|
||||
|
||||
public virtual uint GetStringIndex(string @string)
|
||||
{
|
||||
uint index;
|
||||
if (strings.TryGetValue(@string, out index))
|
||||
return index;
|
||||
|
||||
index = (uint)strings.Count + 1;
|
||||
strings.Add(@string, index);
|
||||
return index;
|
||||
}
|
||||
|
||||
public uint[] WriteStrings()
|
||||
{
|
||||
List<KeyValuePair<string, uint>> sorted = SortStrings(strings);
|
||||
strings = null;
|
||||
|
||||
// Add 1 for empty string whose index and offset are both 0
|
||||
uint[] string_offsets = new uint [sorted.Count + 1];
|
||||
string_offsets[0] = 0;
|
||||
|
||||
// Find strings that can be folded
|
||||
string previous = string.Empty;
|
||||
foreach (KeyValuePair<string, uint> entry in sorted)
|
||||
{
|
||||
string @string = entry.Key;
|
||||
uint index = entry.Value;
|
||||
int position = this.position;
|
||||
|
||||
if (previous.EndsWith(@string, StringComparison.Ordinal) && !IsLowSurrogateChar(entry.Key[0]))
|
||||
{
|
||||
// Map over the tail of prev string. Watch for null-terminator of prev string.
|
||||
string_offsets[index] = (uint)(position - (Encoding.UTF8.GetByteCount(entry.Key) + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
string_offsets[index] = (uint)position;
|
||||
WriteString(@string);
|
||||
}
|
||||
|
||||
previous = entry.Key;
|
||||
}
|
||||
|
||||
return string_offsets;
|
||||
}
|
||||
|
||||
private static List<KeyValuePair<string, uint>> SortStrings(Dictionary<string, uint> strings)
|
||||
{
|
||||
List<KeyValuePair<string, uint>> sorted = new(strings);
|
||||
sorted.Sort(new SuffixSort());
|
||||
return sorted;
|
||||
}
|
||||
|
||||
private static bool IsLowSurrogateChar(int c)
|
||||
{
|
||||
return unchecked((uint)(c - 0xDC00)) <= 0xDFFF - 0xDC00;
|
||||
}
|
||||
|
||||
protected virtual void WriteString(string @string)
|
||||
{
|
||||
WriteBytes(Encoding.UTF8.GetBytes(@string));
|
||||
WriteByte(0);
|
||||
}
|
||||
|
||||
// Sorts strings such that a string is followed immediately by all strings
|
||||
// that are a suffix of it.
|
||||
private class SuffixSort : IComparer<KeyValuePair<string, uint>>
|
||||
{
|
||||
public int Compare(KeyValuePair<string, uint> xPair, KeyValuePair<string, uint> yPair)
|
||||
{
|
||||
string x = xPair.Key;
|
||||
string y = yPair.Key;
|
||||
|
||||
for (int i = x.Length - 1, j = y.Length - 1; (i >= 0) & (j >= 0); i--, j--)
|
||||
{
|
||||
if (x[i] < y[j])
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (x[i] > y[j])
|
||||
{
|
||||
return +1;
|
||||
}
|
||||
}
|
||||
|
||||
return y.Length.CompareTo(x.Length);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class BlobHeapBuffer : HeapBuffer
|
||||
{
|
||||
private readonly Dictionary<ByteBuffer, uint> blobs = new(new ByteBufferEqualityComparer());
|
||||
public override bool IsEmpty
|
||||
{
|
||||
get { return length <= 1; }
|
||||
}
|
||||
|
||||
public BlobHeapBuffer() : base(1)
|
||||
{
|
||||
WriteByte(0);
|
||||
}
|
||||
|
||||
public uint GetBlobIndex(ByteBuffer blob)
|
||||
{
|
||||
uint index;
|
||||
if (blobs.TryGetValue(blob, out index))
|
||||
return index;
|
||||
|
||||
index = (uint)position;
|
||||
WriteBlob(blob);
|
||||
blobs.Add(blob, index);
|
||||
return index;
|
||||
}
|
||||
|
||||
private void WriteBlob(ByteBuffer blob)
|
||||
{
|
||||
WriteCompressedUInt32((uint)blob.length);
|
||||
WriteBytes(blob);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class UserStringHeapBuffer : StringHeapBuffer
|
||||
{
|
||||
public override uint GetStringIndex(string @string)
|
||||
{
|
||||
uint index;
|
||||
if (strings.TryGetValue(@string, out index))
|
||||
return index;
|
||||
|
||||
index = (uint)position;
|
||||
WriteString(@string);
|
||||
strings.Add(@string, index);
|
||||
return index;
|
||||
}
|
||||
|
||||
protected override void WriteString(string @string)
|
||||
{
|
||||
WriteCompressedUInt32((uint)@string.Length * 2 + 1);
|
||||
|
||||
byte special = 0;
|
||||
|
||||
for (int i = 0; i < @string.Length; i++)
|
||||
{
|
||||
char @char = @string[i];
|
||||
WriteUInt16(@char);
|
||||
|
||||
if (special == 1)
|
||||
continue;
|
||||
|
||||
if (@char < 0x20 || @char > 0x7e)
|
||||
{
|
||||
if (@char > 0x7e || (@char >= 0x01 && @char <= 0x08) || (@char >= 0x0e && @char <= 0x1f) || @char == 0x27 || @char == 0x2d)
|
||||
{
|
||||
special = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WriteByte(special);
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class PdbHeapBuffer : HeapBuffer
|
||||
{
|
||||
public override bool IsEmpty
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
public PdbHeapBuffer() : base(0) { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4b1d0a81b66e78341ab77acdd3b15234
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/Buffers.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,30 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal enum CodedIndex
|
||||
{
|
||||
TypeDefOrRef,
|
||||
HasConstant,
|
||||
HasCustomAttribute,
|
||||
HasFieldMarshal,
|
||||
HasDeclSecurity,
|
||||
MemberRefParent,
|
||||
HasSemantics,
|
||||
MethodDefOrRef,
|
||||
MemberForwarded,
|
||||
Implementation,
|
||||
CustomAttributeType,
|
||||
ResolutionScope,
|
||||
TypeOrMethodDef,
|
||||
HasCustomDebugInformation
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dd50ffa8272dac444831e33b1b9d7f56
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/CodedIndex.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,56 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal enum ElementType : byte
|
||||
{
|
||||
None = 0x00,
|
||||
Void = 0x01,
|
||||
Boolean = 0x02,
|
||||
Char = 0x03,
|
||||
I1 = 0x04,
|
||||
U1 = 0x05,
|
||||
I2 = 0x06,
|
||||
U2 = 0x07,
|
||||
I4 = 0x08,
|
||||
U4 = 0x09,
|
||||
I8 = 0x0a,
|
||||
U8 = 0x0b,
|
||||
R4 = 0x0c,
|
||||
R8 = 0x0d,
|
||||
String = 0x0e,
|
||||
Ptr = 0x0f, // Followed by <type> token
|
||||
ByRef = 0x10, // Followed by <type> token
|
||||
ValueType = 0x11, // Followed by <type> token
|
||||
Class = 0x12, // Followed by <type> token
|
||||
Var = 0x13, // Followed by generic parameter number
|
||||
Array = 0x14, // <type> <rank> <boundsCount> <bound1> <loCount> <lo1>
|
||||
GenericInst = 0x15, // <type> <type-arg-count> <type-1> ... <type-n> */
|
||||
TypedByRef = 0x16,
|
||||
I = 0x18, // System.IntPtr
|
||||
U = 0x19, // System.UIntPtr
|
||||
FnPtr = 0x1b, // Followed by full method signature
|
||||
Object = 0x1c, // System.Object
|
||||
SzArray = 0x1d, // Single-dim array with 0 lower bound
|
||||
MVar = 0x1e, // Followed by generic parameter number
|
||||
CModReqD = 0x1f, // Required modifier : followed by a TypeDef or TypeRef token
|
||||
CModOpt = 0x20, // Optional modifier : followed by a TypeDef or TypeRef token
|
||||
Internal = 0x21, // Implemented within the CLI
|
||||
Modifier = 0x40, // Or'd with following element types
|
||||
Sentinel = 0x41, // Sentinel for varargs method signature
|
||||
Pinned = 0x45, // Denotes a local variable that points at a pinned object
|
||||
|
||||
// special undocumented constants
|
||||
Type = 0x50,
|
||||
Boxed = 0x51,
|
||||
Enum = 0x55
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 94c4cb498ef60034d83bb60d3f743832
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/ElementType.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal sealed class GuidHeap : Heap
|
||||
{
|
||||
public GuidHeap(byte[] data) : base(data) { }
|
||||
|
||||
public Guid Read(uint index)
|
||||
{
|
||||
const int guid_size = 16;
|
||||
|
||||
if (index == 0 || index - 1 + guid_size > data.Length)
|
||||
return new();
|
||||
|
||||
byte[] buffer = new byte [guid_size];
|
||||
|
||||
Buffer.BlockCopy(data, (int)((index - 1) * guid_size), buffer, 0, guid_size);
|
||||
|
||||
return new(buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4bb39ab6484eb114b91a85d4b53f0f28
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/GuidHeap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,23 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal abstract class Heap
|
||||
{
|
||||
public int IndexSize;
|
||||
internal readonly byte[] data;
|
||||
|
||||
protected Heap(byte[] data)
|
||||
{
|
||||
this.data = data;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c343466f40d68574499155a2acd05e6b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/Heap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,91 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System;
|
||||
|
||||
namespace MonoFN.Cecil
|
||||
{
|
||||
public struct MetadataToken : IEquatable<MetadataToken>
|
||||
{
|
||||
private readonly uint token;
|
||||
public uint RID
|
||||
{
|
||||
get { return token & 0x00ffffff; }
|
||||
}
|
||||
public TokenType TokenType
|
||||
{
|
||||
get { return (TokenType)(token & 0xff000000); }
|
||||
}
|
||||
public static readonly MetadataToken Zero = new((uint)0);
|
||||
|
||||
public MetadataToken(uint token)
|
||||
{
|
||||
this.token = token;
|
||||
}
|
||||
|
||||
public MetadataToken(TokenType type) : this(type, 0) { }
|
||||
|
||||
public MetadataToken(TokenType type, uint rid)
|
||||
{
|
||||
token = (uint)type | rid;
|
||||
}
|
||||
|
||||
public MetadataToken(TokenType type, int rid)
|
||||
{
|
||||
token = (uint)type | (uint)rid;
|
||||
}
|
||||
|
||||
public int ToInt32()
|
||||
{
|
||||
return (int)token;
|
||||
}
|
||||
|
||||
public uint ToUInt32()
|
||||
{
|
||||
return token;
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return (int)token;
|
||||
}
|
||||
|
||||
public bool Equals(MetadataToken other)
|
||||
{
|
||||
return other.token == token;
|
||||
}
|
||||
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj is MetadataToken)
|
||||
{
|
||||
MetadataToken other = (MetadataToken)obj;
|
||||
return other.token == token;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool operator ==(MetadataToken one, MetadataToken other)
|
||||
{
|
||||
return one.token == other.token;
|
||||
}
|
||||
|
||||
public static bool operator !=(MetadataToken one, MetadataToken other)
|
||||
{
|
||||
return one.token != other.token;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format("[{0}:0x{1}]", TokenType, RID.ToString("x4"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 755d1954236c374458be77d93493faf8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/MetadataToken.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using RID = System.UInt32;
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal sealed class PdbHeap : Heap
|
||||
{
|
||||
public byte[] Id;
|
||||
public RID EntryPoint;
|
||||
public long TypeSystemTables;
|
||||
public uint[] TypeSystemTableRows;
|
||||
public PdbHeap(byte[] data) : base(data) { }
|
||||
|
||||
public bool HasTable(Table table)
|
||||
{
|
||||
return (TypeSystemTables & (1L << (int)table)) != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c64dd6e20a2b11c44ad424d29380c14c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/PdbHeap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,154 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal struct Row<T1, T2>
|
||||
{
|
||||
internal T1 Col1;
|
||||
internal T2 Col2;
|
||||
|
||||
public Row(T1 col1, T2 col2)
|
||||
{
|
||||
Col1 = col1;
|
||||
Col2 = col2;
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Row<T1, T2, T3>
|
||||
{
|
||||
internal T1 Col1;
|
||||
internal T2 Col2;
|
||||
internal T3 Col3;
|
||||
|
||||
public Row(T1 col1, T2 col2, T3 col3)
|
||||
{
|
||||
Col1 = col1;
|
||||
Col2 = col2;
|
||||
Col3 = col3;
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Row<T1, T2, T3, T4>
|
||||
{
|
||||
internal T1 Col1;
|
||||
internal T2 Col2;
|
||||
internal T3 Col3;
|
||||
internal T4 Col4;
|
||||
|
||||
public Row(T1 col1, T2 col2, T3 col3, T4 col4)
|
||||
{
|
||||
Col1 = col1;
|
||||
Col2 = col2;
|
||||
Col3 = col3;
|
||||
Col4 = col4;
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Row<T1, T2, T3, T4, T5>
|
||||
{
|
||||
internal T1 Col1;
|
||||
internal T2 Col2;
|
||||
internal T3 Col3;
|
||||
internal T4 Col4;
|
||||
internal T5 Col5;
|
||||
|
||||
public Row(T1 col1, T2 col2, T3 col3, T4 col4, T5 col5)
|
||||
{
|
||||
Col1 = col1;
|
||||
Col2 = col2;
|
||||
Col3 = col3;
|
||||
Col4 = col4;
|
||||
Col5 = col5;
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Row<T1, T2, T3, T4, T5, T6>
|
||||
{
|
||||
internal T1 Col1;
|
||||
internal T2 Col2;
|
||||
internal T3 Col3;
|
||||
internal T4 Col4;
|
||||
internal T5 Col5;
|
||||
internal T6 Col6;
|
||||
|
||||
public Row(T1 col1, T2 col2, T3 col3, T4 col4, T5 col5, T6 col6)
|
||||
{
|
||||
Col1 = col1;
|
||||
Col2 = col2;
|
||||
Col3 = col3;
|
||||
Col4 = col4;
|
||||
Col5 = col5;
|
||||
Col6 = col6;
|
||||
}
|
||||
}
|
||||
|
||||
internal struct Row<T1, T2, T3, T4, T5, T6, T7, T8, T9>
|
||||
{
|
||||
internal T1 Col1;
|
||||
internal T2 Col2;
|
||||
internal T3 Col3;
|
||||
internal T4 Col4;
|
||||
internal T5 Col5;
|
||||
internal T6 Col6;
|
||||
internal T7 Col7;
|
||||
internal T8 Col8;
|
||||
internal T9 Col9;
|
||||
|
||||
public Row(T1 col1, T2 col2, T3 col3, T4 col4, T5 col5, T6 col6, T7 col7, T8 col8, T9 col9)
|
||||
{
|
||||
Col1 = col1;
|
||||
Col2 = col2;
|
||||
Col3 = col3;
|
||||
Col4 = col4;
|
||||
Col5 = col5;
|
||||
Col6 = col6;
|
||||
Col7 = col7;
|
||||
Col8 = col8;
|
||||
Col9 = col9;
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class RowEqualityComparer : IEqualityComparer<Row<string, string>>, IEqualityComparer<Row<uint, uint>>, IEqualityComparer<Row<uint, uint, uint>>
|
||||
{
|
||||
public bool Equals(Row<string, string> x, Row<string, string> y)
|
||||
{
|
||||
return x.Col1 == y.Col1 && x.Col2 == y.Col2;
|
||||
}
|
||||
|
||||
public int GetHashCode(Row<string, string> obj)
|
||||
{
|
||||
string x = obj.Col1, y = obj.Col2;
|
||||
return (x != null ? x.GetHashCode() : 0) ^ (y != null ? y.GetHashCode() : 0);
|
||||
}
|
||||
|
||||
public bool Equals(Row<uint, uint> x, Row<uint, uint> y)
|
||||
{
|
||||
return x.Col1 == y.Col1 && x.Col2 == y.Col2;
|
||||
}
|
||||
|
||||
public int GetHashCode(Row<uint, uint> obj)
|
||||
{
|
||||
return (int)(obj.Col1 ^ obj.Col2);
|
||||
}
|
||||
|
||||
public bool Equals(Row<uint, uint, uint> x, Row<uint, uint, uint> y)
|
||||
{
|
||||
return x.Col1 == y.Col1 && x.Col2 == y.Col2 && x.Col3 == y.Col3;
|
||||
}
|
||||
|
||||
public int GetHashCode(Row<uint, uint, uint> obj)
|
||||
{
|
||||
return (int)(obj.Col1 ^ obj.Col2 ^ obj.Col3);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89fd184bcc2b97840a2c0dfeec671be2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/Row.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,56 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal class StringHeap : Heap
|
||||
{
|
||||
private readonly Dictionary<uint, string> strings = new();
|
||||
public StringHeap(byte[] data) : base(data) { }
|
||||
|
||||
public string Read(uint index)
|
||||
{
|
||||
if (index == 0)
|
||||
return string.Empty;
|
||||
|
||||
string @string;
|
||||
if (strings.TryGetValue(index, out @string))
|
||||
return @string;
|
||||
|
||||
if (index > data.Length - 1)
|
||||
return string.Empty;
|
||||
|
||||
@string = ReadStringAt(index);
|
||||
if (@string.Length != 0)
|
||||
strings.Add(index, @string);
|
||||
|
||||
return @string;
|
||||
}
|
||||
|
||||
protected virtual string ReadStringAt(uint index)
|
||||
{
|
||||
int length = 0;
|
||||
int start = (int)index;
|
||||
|
||||
for (int i = start;; i++)
|
||||
{
|
||||
if (data[i] == 0)
|
||||
break;
|
||||
|
||||
length++;
|
||||
}
|
||||
|
||||
return Encoding.UTF8.GetString(data, start, length);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e0fc64863ca825b4e994640b0be9a938
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/StringHeap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,97 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal enum Table : byte
|
||||
{
|
||||
Module = 0x00,
|
||||
TypeRef = 0x01,
|
||||
TypeDef = 0x02,
|
||||
FieldPtr = 0x03,
|
||||
Field = 0x04,
|
||||
MethodPtr = 0x05,
|
||||
Method = 0x06,
|
||||
ParamPtr = 0x07,
|
||||
Param = 0x08,
|
||||
InterfaceImpl = 0x09,
|
||||
MemberRef = 0x0a,
|
||||
Constant = 0x0b,
|
||||
CustomAttribute = 0x0c,
|
||||
FieldMarshal = 0x0d,
|
||||
DeclSecurity = 0x0e,
|
||||
ClassLayout = 0x0f,
|
||||
FieldLayout = 0x10,
|
||||
StandAloneSig = 0x11,
|
||||
EventMap = 0x12,
|
||||
EventPtr = 0x13,
|
||||
Event = 0x14,
|
||||
PropertyMap = 0x15,
|
||||
PropertyPtr = 0x16,
|
||||
Property = 0x17,
|
||||
MethodSemantics = 0x18,
|
||||
MethodImpl = 0x19,
|
||||
ModuleRef = 0x1a,
|
||||
TypeSpec = 0x1b,
|
||||
ImplMap = 0x1c,
|
||||
FieldRVA = 0x1d,
|
||||
EncLog = 0x1e,
|
||||
EncMap = 0x1f,
|
||||
Assembly = 0x20,
|
||||
AssemblyProcessor = 0x21,
|
||||
AssemblyOS = 0x22,
|
||||
AssemblyRef = 0x23,
|
||||
AssemblyRefProcessor = 0x24,
|
||||
AssemblyRefOS = 0x25,
|
||||
File = 0x26,
|
||||
ExportedType = 0x27,
|
||||
ManifestResource = 0x28,
|
||||
NestedClass = 0x29,
|
||||
GenericParam = 0x2a,
|
||||
MethodSpec = 0x2b,
|
||||
GenericParamConstraint = 0x2c,
|
||||
Document = 0x30,
|
||||
MethodDebugInformation = 0x31,
|
||||
LocalScope = 0x32,
|
||||
LocalVariable = 0x33,
|
||||
LocalConstant = 0x34,
|
||||
ImportScope = 0x35,
|
||||
StateMachineMethod = 0x36,
|
||||
CustomDebugInformation = 0x37
|
||||
}
|
||||
|
||||
internal struct TableInformation
|
||||
{
|
||||
public uint Offset;
|
||||
public uint Length;
|
||||
public uint RowSize;
|
||||
public bool IsLarge
|
||||
{
|
||||
get { return Length > ushort.MaxValue; }
|
||||
}
|
||||
}
|
||||
|
||||
internal sealed class TableHeap : Heap
|
||||
{
|
||||
public long Valid;
|
||||
public long Sorted;
|
||||
public readonly TableInformation[] Tables = new TableInformation [Mixin.TableCount];
|
||||
public TableInformation this[Table table]
|
||||
{
|
||||
get { return Tables[(int)table]; }
|
||||
}
|
||||
public TableHeap(byte[] data) : base(data) { }
|
||||
|
||||
public bool HasTable(Table table)
|
||||
{
|
||||
return (Valid & (1L << (int)table)) != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 978b1609b2ddc0c4baf628cc608456a9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/TableHeap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace MonoFN.Cecil
|
||||
{
|
||||
public enum TokenType : uint
|
||||
{
|
||||
Module = 0x00000000,
|
||||
TypeRef = 0x01000000,
|
||||
TypeDef = 0x02000000,
|
||||
Field = 0x04000000,
|
||||
Method = 0x06000000,
|
||||
Param = 0x08000000,
|
||||
InterfaceImpl = 0x09000000,
|
||||
MemberRef = 0x0a000000,
|
||||
CustomAttribute = 0x0c000000,
|
||||
Permission = 0x0e000000,
|
||||
Signature = 0x11000000,
|
||||
Event = 0x14000000,
|
||||
Property = 0x17000000,
|
||||
ModuleRef = 0x1a000000,
|
||||
TypeSpec = 0x1b000000,
|
||||
Assembly = 0x20000000,
|
||||
AssemblyRef = 0x23000000,
|
||||
File = 0x26000000,
|
||||
ExportedType = 0x27000000,
|
||||
ManifestResource = 0x28000000,
|
||||
GenericParam = 0x2a000000,
|
||||
MethodSpec = 0x2b000000,
|
||||
GenericParamConstraint = 0x2c000000,
|
||||
Document = 0x30000000,
|
||||
MethodDebugInformation = 0x31000000,
|
||||
LocalScope = 0x32000000,
|
||||
LocalVariable = 0x33000000,
|
||||
LocalConstant = 0x34000000,
|
||||
ImportScope = 0x35000000,
|
||||
StateMachineMethod = 0x36000000,
|
||||
CustomDebugInformation = 0x37000000,
|
||||
String = 0x70000000
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dba0af6138c6a084b8787e88b20b142a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/TokenType.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
namespace MonoFN.Cecil.Metadata
|
||||
{
|
||||
internal sealed class UserStringHeap : StringHeap
|
||||
{
|
||||
public UserStringHeap(byte[] data) : base(data) { }
|
||||
|
||||
protected override string ReadStringAt(uint index)
|
||||
{
|
||||
int start = (int)index;
|
||||
|
||||
uint length = (uint)(data.ReadCompressedUInt32(ref start) & ~1);
|
||||
if (length < 1)
|
||||
return string.Empty;
|
||||
|
||||
char[] chars = new char [length / 2];
|
||||
|
||||
for (int i = start, j = 0; i < start + length; i += 2)
|
||||
chars[j++] = (char)(data[i] | (data[i + 1] << 8));
|
||||
|
||||
return new(chars);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d89100b382ef8e4ea67917917d04db6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/UserStringHeap.cs
|
||||
uploadId: 866910
|
||||
@@ -0,0 +1,771 @@
|
||||
//
|
||||
// Author:
|
||||
// Jb Evain (jbevain@gmail.com)
|
||||
//
|
||||
// Copyright (c) 2008 - 2015 Jb Evain
|
||||
// Copyright (c) 2008 - 2011 Novell, Inc.
|
||||
//
|
||||
// Licensed under the MIT/X11 license.
|
||||
//
|
||||
|
||||
using MonoFN.Cecil.Metadata;
|
||||
using System;
|
||||
|
||||
namespace MonoFN.Cecil
|
||||
{
|
||||
internal static partial class Mixin
|
||||
{
|
||||
public const int TableCount = 58;
|
||||
public const int CodedIndexCount = 14;
|
||||
|
||||
public static uint ReadCompressedUInt32(this byte[] data, ref int position)
|
||||
{
|
||||
uint integer;
|
||||
if ((data[position] & 0x80) == 0)
|
||||
{
|
||||
integer = data[position];
|
||||
position++;
|
||||
}
|
||||
else if ((data[position] & 0x40) == 0)
|
||||
{
|
||||
integer = (uint)(data[position] & ~0x80) << 8;
|
||||
integer |= data[position + 1];
|
||||
position += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
integer = (uint)(data[position] & ~0xc0) << 24;
|
||||
integer |= (uint)data[position + 1] << 16;
|
||||
integer |= (uint)data[position + 2] << 8;
|
||||
integer |= (uint)data[position + 3];
|
||||
position += 4;
|
||||
}
|
||||
return integer;
|
||||
}
|
||||
|
||||
public static MetadataToken GetMetadataToken(this CodedIndex self, uint data)
|
||||
{
|
||||
uint rid;
|
||||
TokenType token_type;
|
||||
switch (self)
|
||||
{
|
||||
case CodedIndex.TypeDefOrRef:
|
||||
rid = data >> 2;
|
||||
switch (data & 3)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.TypeDef;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.TypeRef;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.TypeSpec;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasConstant:
|
||||
rid = data >> 2;
|
||||
switch (data & 3)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Field;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Param;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.Property;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasCustomAttribute:
|
||||
rid = data >> 5;
|
||||
switch (data & 31)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Field;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.TypeRef;
|
||||
goto ret;
|
||||
case 3:
|
||||
token_type = TokenType.TypeDef;
|
||||
goto ret;
|
||||
case 4:
|
||||
token_type = TokenType.Param;
|
||||
goto ret;
|
||||
case 5:
|
||||
token_type = TokenType.InterfaceImpl;
|
||||
goto ret;
|
||||
case 6:
|
||||
token_type = TokenType.MemberRef;
|
||||
goto ret;
|
||||
case 7:
|
||||
token_type = TokenType.Module;
|
||||
goto ret;
|
||||
case 8:
|
||||
token_type = TokenType.Permission;
|
||||
goto ret;
|
||||
case 9:
|
||||
token_type = TokenType.Property;
|
||||
goto ret;
|
||||
case 10:
|
||||
token_type = TokenType.Event;
|
||||
goto ret;
|
||||
case 11:
|
||||
token_type = TokenType.Signature;
|
||||
goto ret;
|
||||
case 12:
|
||||
token_type = TokenType.ModuleRef;
|
||||
goto ret;
|
||||
case 13:
|
||||
token_type = TokenType.TypeSpec;
|
||||
goto ret;
|
||||
case 14:
|
||||
token_type = TokenType.Assembly;
|
||||
goto ret;
|
||||
case 15:
|
||||
token_type = TokenType.AssemblyRef;
|
||||
goto ret;
|
||||
case 16:
|
||||
token_type = TokenType.File;
|
||||
goto ret;
|
||||
case 17:
|
||||
token_type = TokenType.ExportedType;
|
||||
goto ret;
|
||||
case 18:
|
||||
token_type = TokenType.ManifestResource;
|
||||
goto ret;
|
||||
case 19:
|
||||
token_type = TokenType.GenericParam;
|
||||
goto ret;
|
||||
case 20:
|
||||
token_type = TokenType.GenericParamConstraint;
|
||||
goto ret;
|
||||
case 21:
|
||||
token_type = TokenType.MethodSpec;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasFieldMarshal:
|
||||
rid = data >> 1;
|
||||
switch (data & 1)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Field;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Param;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasDeclSecurity:
|
||||
rid = data >> 2;
|
||||
switch (data & 3)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.TypeDef;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.Assembly;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.MemberRefParent:
|
||||
rid = data >> 3;
|
||||
switch (data & 7)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.TypeDef;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.TypeRef;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.ModuleRef;
|
||||
goto ret;
|
||||
case 3:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
case 4:
|
||||
token_type = TokenType.TypeSpec;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasSemantics:
|
||||
rid = data >> 1;
|
||||
switch (data & 1)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Event;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Property;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.MethodDefOrRef:
|
||||
rid = data >> 1;
|
||||
switch (data & 1)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.MemberRef;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.MemberForwarded:
|
||||
rid = data >> 1;
|
||||
switch (data & 1)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Field;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.Implementation:
|
||||
rid = data >> 2;
|
||||
switch (data & 3)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.File;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.AssemblyRef;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.ExportedType;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.CustomAttributeType:
|
||||
rid = data >> 3;
|
||||
switch (data & 7)
|
||||
{
|
||||
case 2:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
case 3:
|
||||
token_type = TokenType.MemberRef;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.ResolutionScope:
|
||||
rid = data >> 2;
|
||||
switch (data & 3)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Module;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.ModuleRef;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.AssemblyRef;
|
||||
goto ret;
|
||||
case 3:
|
||||
token_type = TokenType.TypeRef;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.TypeOrMethodDef:
|
||||
rid = data >> 1;
|
||||
switch (data & 1)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.TypeDef;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasCustomDebugInformation:
|
||||
rid = data >> 5;
|
||||
switch (data & 31)
|
||||
{
|
||||
case 0:
|
||||
token_type = TokenType.Method;
|
||||
goto ret;
|
||||
case 1:
|
||||
token_type = TokenType.Field;
|
||||
goto ret;
|
||||
case 2:
|
||||
token_type = TokenType.TypeRef;
|
||||
goto ret;
|
||||
case 3:
|
||||
token_type = TokenType.TypeDef;
|
||||
goto ret;
|
||||
case 4:
|
||||
token_type = TokenType.Param;
|
||||
goto ret;
|
||||
case 5:
|
||||
token_type = TokenType.InterfaceImpl;
|
||||
goto ret;
|
||||
case 6:
|
||||
token_type = TokenType.MemberRef;
|
||||
goto ret;
|
||||
case 7:
|
||||
token_type = TokenType.Module;
|
||||
goto ret;
|
||||
case 8:
|
||||
token_type = TokenType.Permission;
|
||||
goto ret;
|
||||
case 9:
|
||||
token_type = TokenType.Property;
|
||||
goto ret;
|
||||
case 10:
|
||||
token_type = TokenType.Event;
|
||||
goto ret;
|
||||
case 11:
|
||||
token_type = TokenType.Signature;
|
||||
goto ret;
|
||||
case 12:
|
||||
token_type = TokenType.ModuleRef;
|
||||
goto ret;
|
||||
case 13:
|
||||
token_type = TokenType.TypeSpec;
|
||||
goto ret;
|
||||
case 14:
|
||||
token_type = TokenType.Assembly;
|
||||
goto ret;
|
||||
case 15:
|
||||
token_type = TokenType.AssemblyRef;
|
||||
goto ret;
|
||||
case 16:
|
||||
token_type = TokenType.File;
|
||||
goto ret;
|
||||
case 17:
|
||||
token_type = TokenType.ExportedType;
|
||||
goto ret;
|
||||
case 18:
|
||||
token_type = TokenType.ManifestResource;
|
||||
goto ret;
|
||||
case 19:
|
||||
token_type = TokenType.GenericParam;
|
||||
goto ret;
|
||||
case 20:
|
||||
token_type = TokenType.GenericParamConstraint;
|
||||
goto ret;
|
||||
case 21:
|
||||
token_type = TokenType.MethodSpec;
|
||||
goto ret;
|
||||
case 22:
|
||||
token_type = TokenType.Document;
|
||||
goto ret;
|
||||
case 23:
|
||||
token_type = TokenType.LocalScope;
|
||||
goto ret;
|
||||
case 24:
|
||||
token_type = TokenType.LocalVariable;
|
||||
goto ret;
|
||||
case 25:
|
||||
token_type = TokenType.LocalConstant;
|
||||
goto ret;
|
||||
case 26:
|
||||
token_type = TokenType.ImportScope;
|
||||
goto ret;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
ret:
|
||||
return new(token_type, rid);
|
||||
exit:
|
||||
return MetadataToken.Zero;
|
||||
}
|
||||
|
||||
public static uint CompressMetadataToken(this CodedIndex self, MetadataToken token)
|
||||
{
|
||||
uint ret = 0;
|
||||
if (token.RID == 0)
|
||||
return ret;
|
||||
switch (self)
|
||||
{
|
||||
case CodedIndex.TypeDefOrRef:
|
||||
ret = token.RID << 2;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.TypeDef:
|
||||
return ret | 0;
|
||||
case TokenType.TypeRef:
|
||||
return ret | 1;
|
||||
case TokenType.TypeSpec:
|
||||
return ret | 2;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasConstant:
|
||||
ret = token.RID << 2;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Field:
|
||||
return ret | 0;
|
||||
case TokenType.Param:
|
||||
return ret | 1;
|
||||
case TokenType.Property:
|
||||
return ret | 2;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasCustomAttribute:
|
||||
ret = token.RID << 5;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Method:
|
||||
return ret | 0;
|
||||
case TokenType.Field:
|
||||
return ret | 1;
|
||||
case TokenType.TypeRef:
|
||||
return ret | 2;
|
||||
case TokenType.TypeDef:
|
||||
return ret | 3;
|
||||
case TokenType.Param:
|
||||
return ret | 4;
|
||||
case TokenType.InterfaceImpl:
|
||||
return ret | 5;
|
||||
case TokenType.MemberRef:
|
||||
return ret | 6;
|
||||
case TokenType.Module:
|
||||
return ret | 7;
|
||||
case TokenType.Permission:
|
||||
return ret | 8;
|
||||
case TokenType.Property:
|
||||
return ret | 9;
|
||||
case TokenType.Event:
|
||||
return ret | 10;
|
||||
case TokenType.Signature:
|
||||
return ret | 11;
|
||||
case TokenType.ModuleRef:
|
||||
return ret | 12;
|
||||
case TokenType.TypeSpec:
|
||||
return ret | 13;
|
||||
case TokenType.Assembly:
|
||||
return ret | 14;
|
||||
case TokenType.AssemblyRef:
|
||||
return ret | 15;
|
||||
case TokenType.File:
|
||||
return ret | 16;
|
||||
case TokenType.ExportedType:
|
||||
return ret | 17;
|
||||
case TokenType.ManifestResource:
|
||||
return ret | 18;
|
||||
case TokenType.GenericParam:
|
||||
return ret | 19;
|
||||
case TokenType.GenericParamConstraint:
|
||||
return ret | 20;
|
||||
case TokenType.MethodSpec:
|
||||
return ret | 21;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasFieldMarshal:
|
||||
ret = token.RID << 1;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Field:
|
||||
return ret | 0;
|
||||
case TokenType.Param:
|
||||
return ret | 1;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasDeclSecurity:
|
||||
ret = token.RID << 2;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.TypeDef:
|
||||
return ret | 0;
|
||||
case TokenType.Method:
|
||||
return ret | 1;
|
||||
case TokenType.Assembly:
|
||||
return ret | 2;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.MemberRefParent:
|
||||
ret = token.RID << 3;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.TypeDef:
|
||||
return ret | 0;
|
||||
case TokenType.TypeRef:
|
||||
return ret | 1;
|
||||
case TokenType.ModuleRef:
|
||||
return ret | 2;
|
||||
case TokenType.Method:
|
||||
return ret | 3;
|
||||
case TokenType.TypeSpec:
|
||||
return ret | 4;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasSemantics:
|
||||
ret = token.RID << 1;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Event:
|
||||
return ret | 0;
|
||||
case TokenType.Property:
|
||||
return ret | 1;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.MethodDefOrRef:
|
||||
ret = token.RID << 1;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Method:
|
||||
return ret | 0;
|
||||
case TokenType.MemberRef:
|
||||
return ret | 1;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.MemberForwarded:
|
||||
ret = token.RID << 1;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Field:
|
||||
return ret | 0;
|
||||
case TokenType.Method:
|
||||
return ret | 1;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.Implementation:
|
||||
ret = token.RID << 2;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.File:
|
||||
return ret | 0;
|
||||
case TokenType.AssemblyRef:
|
||||
return ret | 1;
|
||||
case TokenType.ExportedType:
|
||||
return ret | 2;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.CustomAttributeType:
|
||||
ret = token.RID << 3;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Method:
|
||||
return ret | 2;
|
||||
case TokenType.MemberRef:
|
||||
return ret | 3;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.ResolutionScope:
|
||||
ret = token.RID << 2;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Module:
|
||||
return ret | 0;
|
||||
case TokenType.ModuleRef:
|
||||
return ret | 1;
|
||||
case TokenType.AssemblyRef:
|
||||
return ret | 2;
|
||||
case TokenType.TypeRef:
|
||||
return ret | 3;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.TypeOrMethodDef:
|
||||
ret = token.RID << 1;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.TypeDef:
|
||||
return ret | 0;
|
||||
case TokenType.Method:
|
||||
return ret | 1;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
case CodedIndex.HasCustomDebugInformation:
|
||||
ret = token.RID << 5;
|
||||
switch (token.TokenType)
|
||||
{
|
||||
case TokenType.Method:
|
||||
return ret | 0;
|
||||
case TokenType.Field:
|
||||
return ret | 1;
|
||||
case TokenType.TypeRef:
|
||||
return ret | 2;
|
||||
case TokenType.TypeDef:
|
||||
return ret | 3;
|
||||
case TokenType.Param:
|
||||
return ret | 4;
|
||||
case TokenType.InterfaceImpl:
|
||||
return ret | 5;
|
||||
case TokenType.MemberRef:
|
||||
return ret | 6;
|
||||
case TokenType.Module:
|
||||
return ret | 7;
|
||||
case TokenType.Permission:
|
||||
return ret | 8;
|
||||
case TokenType.Property:
|
||||
return ret | 9;
|
||||
case TokenType.Event:
|
||||
return ret | 10;
|
||||
case TokenType.Signature:
|
||||
return ret | 11;
|
||||
case TokenType.ModuleRef:
|
||||
return ret | 12;
|
||||
case TokenType.TypeSpec:
|
||||
return ret | 13;
|
||||
case TokenType.Assembly:
|
||||
return ret | 14;
|
||||
case TokenType.AssemblyRef:
|
||||
return ret | 15;
|
||||
case TokenType.File:
|
||||
return ret | 16;
|
||||
case TokenType.ExportedType:
|
||||
return ret | 17;
|
||||
case TokenType.ManifestResource:
|
||||
return ret | 18;
|
||||
case TokenType.GenericParam:
|
||||
return ret | 19;
|
||||
case TokenType.GenericParamConstraint:
|
||||
return ret | 20;
|
||||
case TokenType.MethodSpec:
|
||||
return ret | 21;
|
||||
case TokenType.Document:
|
||||
return ret | 22;
|
||||
case TokenType.LocalScope:
|
||||
return ret | 23;
|
||||
case TokenType.LocalVariable:
|
||||
return ret | 24;
|
||||
case TokenType.LocalConstant:
|
||||
return ret | 25;
|
||||
case TokenType.ImportScope:
|
||||
return ret | 26;
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
default:
|
||||
goto exit;
|
||||
}
|
||||
exit:
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
||||
public static int GetSize(this CodedIndex self, Func<Table, int> counter)
|
||||
{
|
||||
int bits;
|
||||
Table[] tables;
|
||||
|
||||
switch (self)
|
||||
{
|
||||
case CodedIndex.TypeDefOrRef:
|
||||
bits = 2;
|
||||
tables = new[] { Table.TypeDef, Table.TypeRef, Table.TypeSpec };
|
||||
break;
|
||||
case CodedIndex.HasConstant:
|
||||
bits = 2;
|
||||
tables = new[] { Table.Field, Table.Param, Table.Property };
|
||||
break;
|
||||
case CodedIndex.HasCustomAttribute:
|
||||
bits = 5;
|
||||
tables = new[]
|
||||
{
|
||||
Table.Method, Table.Field, Table.TypeRef, Table.TypeDef, Table.Param, Table.InterfaceImpl, Table.MemberRef,
|
||||
Table.Module, Table.DeclSecurity, Table.Property, Table.Event, Table.StandAloneSig, Table.ModuleRef,
|
||||
Table.TypeSpec, Table.Assembly, Table.AssemblyRef, Table.File, Table.ExportedType,
|
||||
Table.ManifestResource, Table.GenericParam, Table.GenericParamConstraint, Table.MethodSpec
|
||||
};
|
||||
break;
|
||||
case CodedIndex.HasFieldMarshal:
|
||||
bits = 1;
|
||||
tables = new[] { Table.Field, Table.Param };
|
||||
break;
|
||||
case CodedIndex.HasDeclSecurity:
|
||||
bits = 2;
|
||||
tables = new[] { Table.TypeDef, Table.Method, Table.Assembly };
|
||||
break;
|
||||
case CodedIndex.MemberRefParent:
|
||||
bits = 3;
|
||||
tables = new[] { Table.TypeDef, Table.TypeRef, Table.ModuleRef, Table.Method, Table.TypeSpec };
|
||||
break;
|
||||
case CodedIndex.HasSemantics:
|
||||
bits = 1;
|
||||
tables = new[] { Table.Event, Table.Property };
|
||||
break;
|
||||
case CodedIndex.MethodDefOrRef:
|
||||
bits = 1;
|
||||
tables = new[] { Table.Method, Table.MemberRef };
|
||||
break;
|
||||
case CodedIndex.MemberForwarded:
|
||||
bits = 1;
|
||||
tables = new[] { Table.Field, Table.Method };
|
||||
break;
|
||||
case CodedIndex.Implementation:
|
||||
bits = 2;
|
||||
tables = new[] { Table.File, Table.AssemblyRef, Table.ExportedType };
|
||||
break;
|
||||
case CodedIndex.CustomAttributeType:
|
||||
bits = 3;
|
||||
tables = new[] { Table.Method, Table.MemberRef };
|
||||
break;
|
||||
case CodedIndex.ResolutionScope:
|
||||
bits = 2;
|
||||
tables = new[] { Table.Module, Table.ModuleRef, Table.AssemblyRef, Table.TypeRef };
|
||||
break;
|
||||
case CodedIndex.TypeOrMethodDef:
|
||||
bits = 1;
|
||||
tables = new[] { Table.TypeDef, Table.Method };
|
||||
break;
|
||||
case CodedIndex.HasCustomDebugInformation:
|
||||
bits = 5;
|
||||
tables = new[]
|
||||
{
|
||||
Table.Method, Table.Field, Table.TypeRef, Table.TypeDef, Table.Param, Table.InterfaceImpl, Table.MemberRef,
|
||||
Table.Module, Table.DeclSecurity, Table.Property, Table.Event, Table.StandAloneSig, Table.ModuleRef,
|
||||
Table.TypeSpec, Table.Assembly, Table.AssemblyRef, Table.File, Table.ExportedType,
|
||||
Table.ManifestResource, Table.GenericParam, Table.GenericParamConstraint, Table.MethodSpec,
|
||||
Table.Document, Table.LocalScope, Table.LocalVariable, Table.LocalConstant, Table.ImportScope
|
||||
};
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentException();
|
||||
}
|
||||
|
||||
int max = 0;
|
||||
|
||||
for (int i = 0; i < tables.Length; i++)
|
||||
{
|
||||
max = Math.Max(counter(tables[i]), max);
|
||||
}
|
||||
|
||||
return max < 1 << (16 - bits) ? 2 : 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4785957c0c546de4680e1196a57f66d2
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 207815
|
||||
packageName: 'FishNet: Networking Evolved'
|
||||
packageVersion: 4.6.22R
|
||||
assetPath: Assets/FishNet/CodeGenerating/cecil-0.11.4/Mono.Cecil.Metadata/Utilities.cs
|
||||
uploadId: 866910
|
||||
Reference in New Issue
Block a user