Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Strehovsky <michals@microsoft.com>2016-08-15 19:28:45 +0300
committerMichal Strehovsky <michals@microsoft.com>2016-08-15 19:28:45 +0300
commit3e7951828f41d3d1e46239f279701e29e8979eb9 (patch)
treefe18137e5338a8a79a22474859610ceb80330e93 /src/ILCompiler.MetadataWriter
parent498888c96e8fdd15b460c2c61cdea3345443c79e (diff)
Fix representation of modified types in the native metadata
This is actually a simple change, but touches a lot of files. ECMA-335 allows placing custom modifiers on element types of vectors and unmanaged pointers, but the native metadata format didn't allow it. I'm fixing that. As part of the fix, I'm getting rid of the ReturnTypeSignature and ParameterTypeSignature records. Their only purpose was to allow putting a modifier on types. Instead, I'm introducing a ModifiedType record type that can show up in many places where TypeDefOrRefOrSpec does. This way, we're not paying a 1 byte penalty just to say "this parameter has no modifiers". I'm not emitting the modifiers in either transform since there's nobody who would consume them. I'm doing this because besides fixing correctness, this also has a size/perf benefit - makes SharedLibrary.dll 10 kB smaller. [tfs-changeset: 1622393]
Diffstat (limited to 'src/ILCompiler.MetadataWriter')
-rw-r--r--src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/MdBinaryWriterGen.cs74
-rw-r--r--src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeFormatWriterGen.cs346
-rw-r--r--src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeMetadataWriter.cs25
3 files changed, 134 insertions, 311 deletions
diff --git a/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/MdBinaryWriterGen.cs b/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/MdBinaryWriterGen.cs
index 35467976c..2767c25ae 100644
--- a/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/MdBinaryWriterGen.cs
+++ b/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/MdBinaryWriterGen.cs
@@ -998,28 +998,6 @@ namespace Internal.Metadata.NativeFormat.Writer
}
} // Write
- public static void Write(this NativeWriter writer, CustomModifier record)
- {
- if (record != null)
- writer.WriteUnsigned((uint)record.Handle.Offset);
- else
- writer.WriteUnsigned(0);
- } // Write
-
- public static void Write(this NativeWriter writer, List<CustomModifier> values)
- {
- if (values == null)
- {
- writer.WriteUnsigned(0);
- return;
- }
- writer.WriteUnsigned((uint)values.Count);
- foreach (CustomModifier value in values)
- {
- writer.Write(value);
- }
- } // Write
-
public static void Write(this NativeWriter writer, Event record)
{
if (record != null)
@@ -1284,7 +1262,7 @@ namespace Internal.Metadata.NativeFormat.Writer
}
} // Write
- public static void Write(this NativeWriter writer, NamedArgument record)
+ public static void Write(this NativeWriter writer, ModifiedType record)
{
if (record != null)
writer.WriteUnsigned((uint)record.Handle.Offset);
@@ -1292,7 +1270,7 @@ namespace Internal.Metadata.NativeFormat.Writer
writer.WriteUnsigned(0);
} // Write
- public static void Write(this NativeWriter writer, List<NamedArgument> values)
+ public static void Write(this NativeWriter writer, List<ModifiedType> values)
{
if (values == null)
{
@@ -1300,13 +1278,13 @@ namespace Internal.Metadata.NativeFormat.Writer
return;
}
writer.WriteUnsigned((uint)values.Count);
- foreach (NamedArgument value in values)
+ foreach (ModifiedType value in values)
{
writer.Write(value);
}
} // Write
- public static void Write(this NativeWriter writer, NamespaceDefinition record)
+ public static void Write(this NativeWriter writer, NamedArgument record)
{
if (record != null)
writer.WriteUnsigned((uint)record.Handle.Offset);
@@ -1314,7 +1292,7 @@ namespace Internal.Metadata.NativeFormat.Writer
writer.WriteUnsigned(0);
} // Write
- public static void Write(this NativeWriter writer, List<NamespaceDefinition> values)
+ public static void Write(this NativeWriter writer, List<NamedArgument> values)
{
if (values == null)
{
@@ -1322,13 +1300,13 @@ namespace Internal.Metadata.NativeFormat.Writer
return;
}
writer.WriteUnsigned((uint)values.Count);
- foreach (NamespaceDefinition value in values)
+ foreach (NamedArgument value in values)
{
writer.Write(value);
}
} // Write
- public static void Write(this NativeWriter writer, NamespaceReference record)
+ public static void Write(this NativeWriter writer, NamespaceDefinition record)
{
if (record != null)
writer.WriteUnsigned((uint)record.Handle.Offset);
@@ -1336,7 +1314,7 @@ namespace Internal.Metadata.NativeFormat.Writer
writer.WriteUnsigned(0);
} // Write
- public static void Write(this NativeWriter writer, List<NamespaceReference> values)
+ public static void Write(this NativeWriter writer, List<NamespaceDefinition> values)
{
if (values == null)
{
@@ -1344,13 +1322,13 @@ namespace Internal.Metadata.NativeFormat.Writer
return;
}
writer.WriteUnsigned((uint)values.Count);
- foreach (NamespaceReference value in values)
+ foreach (NamespaceDefinition value in values)
{
writer.Write(value);
}
} // Write
- public static void Write(this NativeWriter writer, Parameter record)
+ public static void Write(this NativeWriter writer, NamespaceReference record)
{
if (record != null)
writer.WriteUnsigned((uint)record.Handle.Offset);
@@ -1358,7 +1336,7 @@ namespace Internal.Metadata.NativeFormat.Writer
writer.WriteUnsigned(0);
} // Write
- public static void Write(this NativeWriter writer, List<Parameter> values)
+ public static void Write(this NativeWriter writer, List<NamespaceReference> values)
{
if (values == null)
{
@@ -1366,13 +1344,13 @@ namespace Internal.Metadata.NativeFormat.Writer
return;
}
writer.WriteUnsigned((uint)values.Count);
- foreach (Parameter value in values)
+ foreach (NamespaceReference value in values)
{
writer.Write(value);
}
} // Write
- public static void Write(this NativeWriter writer, ParameterTypeSignature record)
+ public static void Write(this NativeWriter writer, Parameter record)
{
if (record != null)
writer.WriteUnsigned((uint)record.Handle.Offset);
@@ -1380,7 +1358,7 @@ namespace Internal.Metadata.NativeFormat.Writer
writer.WriteUnsigned(0);
} // Write
- public static void Write(this NativeWriter writer, List<ParameterTypeSignature> values)
+ public static void Write(this NativeWriter writer, List<Parameter> values)
{
if (values == null)
{
@@ -1388,7 +1366,7 @@ namespace Internal.Metadata.NativeFormat.Writer
return;
}
writer.WriteUnsigned((uint)values.Count);
- foreach (ParameterTypeSignature value in values)
+ foreach (Parameter value in values)
{
writer.Write(value);
}
@@ -1504,28 +1482,6 @@ namespace Internal.Metadata.NativeFormat.Writer
}
} // Write
- public static void Write(this NativeWriter writer, ReturnTypeSignature record)
- {
- if (record != null)
- writer.WriteUnsigned((uint)record.Handle.Offset);
- else
- writer.WriteUnsigned(0);
- } // Write
-
- public static void Write(this NativeWriter writer, List<ReturnTypeSignature> values)
- {
- if (values == null)
- {
- writer.WriteUnsigned(0);
- return;
- }
- writer.WriteUnsigned((uint)values.Count);
- foreach (ReturnTypeSignature value in values)
- {
- writer.Write(value);
- }
- } // Write
-
public static void Write(this NativeWriter writer, SZArraySignature record)
{
if (record != null)
diff --git a/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeFormatWriterGen.cs b/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeFormatWriterGen.cs
index e1502999c..5b2e42af0 100644
--- a/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeFormatWriterGen.cs
+++ b/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeFormatWriterGen.cs
@@ -2210,78 +2210,6 @@ namespace Internal.Metadata.NativeFormat.Writer
public List<NamedArgument> NamedArguments = new List<NamedArgument>();
} // CustomAttribute
- public partial class CustomModifier : MetadataRecord
- {
- public override HandleType HandleType
- {
- get
- {
- return HandleType.CustomModifier;
- }
- } // HandleType
-
- internal override void Visit(IRecordVisitor visitor)
- {
- Type = visitor.Visit(this, Type);
- } // Visit
-
- public override sealed bool Equals(Object obj)
- {
- if (Object.ReferenceEquals(this, obj)) return true;
- var other = obj as CustomModifier;
- if (other == null) return false;
- if (IsOptional != other.IsOptional) return false;
- if (!Object.Equals(Type, other.Type)) return false;
- return true;
- } // Equals
-
- public override sealed int GetHashCode()
- {
- if (_hash != 0)
- return _hash;
- EnterGetHashCode();
- int hash = -282314442;
- hash = ((hash << 13) - (hash >> 19)) ^ IsOptional.GetHashCode();
- hash = ((hash << 13) - (hash >> 19)) ^ (Type == null ? 0 : Type.GetHashCode());
- LeaveGetHashCode();
- _hash = hash;
- return _hash;
- } // GetHashCode
-
- internal override void Save(NativeWriter writer)
- {
- writer.Write(IsOptional);
- Debug.Assert(Type == null ||
- Type.HandleType == HandleType.TypeDefinition ||
- Type.HandleType == HandleType.TypeReference ||
- Type.HandleType == HandleType.TypeSpecification);
- writer.Write(Type);
- } // Save
-
- internal static CustomModifierHandle AsHandle(CustomModifier record)
- {
- if (record == null)
- {
- return new CustomModifierHandle(0);
- }
- else
- {
- return record.Handle;
- }
- } // AsHandle
-
- internal new CustomModifierHandle Handle
- {
- get
- {
- return new CustomModifierHandle(HandleOffset);
- }
- } // Handle
-
- public bool IsOptional;
- public MetadataRecord Type;
- } // CustomModifier
-
public partial class Event : MetadataRecord
{
public override HandleType HandleType
@@ -2519,7 +2447,6 @@ namespace Internal.Metadata.NativeFormat.Writer
internal override void Visit(IRecordVisitor visitor)
{
Type = visitor.Visit(this, Type);
- CustomModifiers = visitor.Visit(this, CustomModifiers);
} // Visit
public override sealed bool Equals(Object obj)
@@ -2528,7 +2455,6 @@ namespace Internal.Metadata.NativeFormat.Writer
var other = obj as FieldSignature;
if (other == null) return false;
if (!Object.Equals(Type, other.Type)) return false;
- if (!CustomModifiers.SequenceEqual(other.CustomModifiers)) return false;
return true;
} // Equals
@@ -2549,9 +2475,9 @@ namespace Internal.Metadata.NativeFormat.Writer
Debug.Assert(Type == null ||
Type.HandleType == HandleType.TypeDefinition ||
Type.HandleType == HandleType.TypeReference ||
- Type.HandleType == HandleType.TypeSpecification);
+ Type.HandleType == HandleType.TypeSpecification ||
+ Type.HandleType == HandleType.ModifiedType);
writer.Write(Type);
- writer.Write(CustomModifiers);
} // Save
internal static FieldSignatureHandle AsHandle(FieldSignature record)
@@ -2575,7 +2501,6 @@ namespace Internal.Metadata.NativeFormat.Writer
} // Handle
public MetadataRecord Type;
- public List<CustomModifier> CustomModifiers = new List<CustomModifier>();
} // FieldSignature
public partial class FixedArgument : MetadataRecord
@@ -3254,8 +3179,23 @@ namespace Internal.Metadata.NativeFormat.Writer
{
writer.Write(CallingConvention);
writer.Write(GenericParameterCount);
+ Debug.Assert(ReturnType == null ||
+ ReturnType.HandleType == HandleType.TypeDefinition ||
+ ReturnType.HandleType == HandleType.TypeReference ||
+ ReturnType.HandleType == HandleType.TypeSpecification ||
+ ReturnType.HandleType == HandleType.ModifiedType);
writer.Write(ReturnType);
+ Debug.Assert(Parameters.TrueForAll(handle => handle == null ||
+ handle.HandleType == HandleType.TypeDefinition ||
+ handle.HandleType == HandleType.TypeReference ||
+ handle.HandleType == HandleType.TypeSpecification ||
+ handle.HandleType == HandleType.ModifiedType));
writer.Write(Parameters);
+ Debug.Assert(VarArgParameters.TrueForAll(handle => handle == null ||
+ handle.HandleType == HandleType.TypeDefinition ||
+ handle.HandleType == HandleType.TypeReference ||
+ handle.HandleType == HandleType.TypeSpecification ||
+ handle.HandleType == HandleType.ModifiedType));
writer.Write(VarArgParameters);
} // Save
@@ -3281,9 +3221,9 @@ namespace Internal.Metadata.NativeFormat.Writer
public CallingConventions CallingConvention;
public int GenericParameterCount;
- public ReturnTypeSignature ReturnType;
- public List<ParameterTypeSignature> Parameters = new List<ParameterTypeSignature>();
- public List<ParameterTypeSignature> VarArgParameters = new List<ParameterTypeSignature>();
+ public MetadataRecord ReturnType;
+ public List<MetadataRecord> Parameters = new List<MetadataRecord>();
+ public List<MetadataRecord> VarArgParameters = new List<MetadataRecord>();
} // MethodSignature
public partial class MethodTypeVariableSignature : MetadataRecord
@@ -3349,6 +3289,88 @@ namespace Internal.Metadata.NativeFormat.Writer
public int Number;
} // MethodTypeVariableSignature
+ public partial class ModifiedType : MetadataRecord
+ {
+ public override HandleType HandleType
+ {
+ get
+ {
+ return HandleType.ModifiedType;
+ }
+ } // HandleType
+
+ internal override void Visit(IRecordVisitor visitor)
+ {
+ ModifierType = visitor.Visit(this, ModifierType);
+ Type = visitor.Visit(this, Type);
+ } // Visit
+
+ public override sealed bool Equals(Object obj)
+ {
+ if (Object.ReferenceEquals(this, obj)) return true;
+ var other = obj as ModifiedType;
+ if (other == null) return false;
+ if (IsOptional != other.IsOptional) return false;
+ if (!Object.Equals(ModifierType, other.ModifierType)) return false;
+ if (!Object.Equals(Type, other.Type)) return false;
+ return true;
+ } // Equals
+
+ public override sealed int GetHashCode()
+ {
+ if (_hash != 0)
+ return _hash;
+ EnterGetHashCode();
+ int hash = -613299238;
+ hash = ((hash << 13) - (hash >> 19)) ^ IsOptional.GetHashCode();
+ hash = ((hash << 13) - (hash >> 19)) ^ (ModifierType == null ? 0 : ModifierType.GetHashCode());
+ hash = ((hash << 13) - (hash >> 19)) ^ (Type == null ? 0 : Type.GetHashCode());
+ LeaveGetHashCode();
+ _hash = hash;
+ return _hash;
+ } // GetHashCode
+
+ internal override void Save(NativeWriter writer)
+ {
+ writer.Write(IsOptional);
+ Debug.Assert(ModifierType == null ||
+ ModifierType.HandleType == HandleType.TypeDefinition ||
+ ModifierType.HandleType == HandleType.TypeReference ||
+ ModifierType.HandleType == HandleType.TypeSpecification);
+ writer.Write(ModifierType);
+ Debug.Assert(Type == null ||
+ Type.HandleType == HandleType.TypeDefinition ||
+ Type.HandleType == HandleType.TypeReference ||
+ Type.HandleType == HandleType.TypeSpecification ||
+ Type.HandleType == HandleType.ModifiedType);
+ writer.Write(Type);
+ } // Save
+
+ internal static ModifiedTypeHandle AsHandle(ModifiedType record)
+ {
+ if (record == null)
+ {
+ return new ModifiedTypeHandle(0);
+ }
+ else
+ {
+ return record.Handle;
+ }
+ } // AsHandle
+
+ internal new ModifiedTypeHandle Handle
+ {
+ get
+ {
+ return new ModifiedTypeHandle(HandleOffset);
+ }
+ } // Handle
+
+ public bool IsOptional;
+ public MetadataRecord ModifierType;
+ public MetadataRecord Type;
+ } // ModifiedType
+
public partial class NamedArgument : MetadataRecord
{
public override HandleType HandleType
@@ -3688,78 +3710,6 @@ namespace Internal.Metadata.NativeFormat.Writer
public List<CustomAttribute> CustomAttributes = new List<CustomAttribute>();
} // Parameter
- public partial class ParameterTypeSignature : MetadataRecord
- {
- public override HandleType HandleType
- {
- get
- {
- return HandleType.ParameterTypeSignature;
- }
- } // HandleType
-
- internal override void Visit(IRecordVisitor visitor)
- {
- CustomModifiers = visitor.Visit(this, CustomModifiers);
- Type = visitor.Visit(this, Type);
- } // Visit
-
- public override sealed bool Equals(Object obj)
- {
- if (Object.ReferenceEquals(this, obj)) return true;
- var other = obj as ParameterTypeSignature;
- if (other == null) return false;
- if (!CustomModifiers.SequenceEqual(other.CustomModifiers)) return false;
- if (!Object.Equals(Type, other.Type)) return false;
- return true;
- } // Equals
-
- public override sealed int GetHashCode()
- {
- if (_hash != 0)
- return _hash;
- EnterGetHashCode();
- int hash = -637529837;
- hash = ((hash << 13) - (hash >> 19)) ^ (Type == null ? 0 : Type.GetHashCode());
- LeaveGetHashCode();
- _hash = hash;
- return _hash;
- } // GetHashCode
-
- internal override void Save(NativeWriter writer)
- {
- writer.Write(CustomModifiers);
- Debug.Assert(Type == null ||
- Type.HandleType == HandleType.TypeDefinition ||
- Type.HandleType == HandleType.TypeReference ||
- Type.HandleType == HandleType.TypeSpecification);
- writer.Write(Type);
- } // Save
-
- internal static ParameterTypeSignatureHandle AsHandle(ParameterTypeSignature record)
- {
- if (record == null)
- {
- return new ParameterTypeSignatureHandle(0);
- }
- else
- {
- return record.Handle;
- }
- } // AsHandle
-
- internal new ParameterTypeSignatureHandle Handle
- {
- get
- {
- return new ParameterTypeSignatureHandle(HandleOffset);
- }
- } // Handle
-
- public List<CustomModifier> CustomModifiers = new List<CustomModifier>();
- public MetadataRecord Type;
- } // ParameterTypeSignature
-
public partial class PointerSignature : MetadataRecord
{
public override HandleType HandleType
@@ -3801,7 +3751,8 @@ namespace Internal.Metadata.NativeFormat.Writer
Debug.Assert(Type == null ||
Type.HandleType == HandleType.TypeDefinition ||
Type.HandleType == HandleType.TypeReference ||
- Type.HandleType == HandleType.TypeSpecification);
+ Type.HandleType == HandleType.TypeSpecification ||
+ Type.HandleType == HandleType.ModifiedType);
writer.Write(Type);
} // Save
@@ -3972,7 +3923,6 @@ namespace Internal.Metadata.NativeFormat.Writer
internal override void Visit(IRecordVisitor visitor)
{
- CustomModifiers = visitor.Visit(this, CustomModifiers);
Type = visitor.Visit(this, Type);
Parameters = visitor.Visit(this, Parameters);
} // Visit
@@ -3983,7 +3933,6 @@ namespace Internal.Metadata.NativeFormat.Writer
var other = obj as PropertySignature;
if (other == null) return false;
if (CallingConvention != other.CallingConvention) return false;
- if (!CustomModifiers.SequenceEqual(other.CustomModifiers)) return false;
if (!Object.Equals(Type, other.Type)) return false;
if (!Parameters.SequenceEqual(other.Parameters)) return false;
return true;
@@ -4012,12 +3961,17 @@ namespace Internal.Metadata.NativeFormat.Writer
internal override void Save(NativeWriter writer)
{
writer.Write(CallingConvention);
- writer.Write(CustomModifiers);
Debug.Assert(Type == null ||
Type.HandleType == HandleType.TypeDefinition ||
Type.HandleType == HandleType.TypeReference ||
- Type.HandleType == HandleType.TypeSpecification);
+ Type.HandleType == HandleType.TypeSpecification ||
+ Type.HandleType == HandleType.ModifiedType);
writer.Write(Type);
+ Debug.Assert(Parameters.TrueForAll(handle => handle == null ||
+ handle.HandleType == HandleType.TypeDefinition ||
+ handle.HandleType == HandleType.TypeReference ||
+ handle.HandleType == HandleType.TypeSpecification ||
+ handle.HandleType == HandleType.ModifiedType));
writer.Write(Parameters);
} // Save
@@ -4042,9 +3996,8 @@ namespace Internal.Metadata.NativeFormat.Writer
} // Handle
public CallingConventions CallingConvention;
- public List<CustomModifier> CustomModifiers = new List<CustomModifier>();
public MetadataRecord Type;
- public List<ParameterTypeSignature> Parameters = new List<ParameterTypeSignature>();
+ public List<MetadataRecord> Parameters = new List<MetadataRecord>();
} // PropertySignature
public partial class QualifiedField : MetadataRecord
@@ -4185,78 +4138,6 @@ namespace Internal.Metadata.NativeFormat.Writer
public TypeDefinition EnclosingType;
} // QualifiedMethod
- public partial class ReturnTypeSignature : MetadataRecord
- {
- public override HandleType HandleType
- {
- get
- {
- return HandleType.ReturnTypeSignature;
- }
- } // HandleType
-
- internal override void Visit(IRecordVisitor visitor)
- {
- CustomModifiers = visitor.Visit(this, CustomModifiers);
- Type = visitor.Visit(this, Type);
- } // Visit
-
- public override sealed bool Equals(Object obj)
- {
- if (Object.ReferenceEquals(this, obj)) return true;
- var other = obj as ReturnTypeSignature;
- if (other == null) return false;
- if (!CustomModifiers.SequenceEqual(other.CustomModifiers)) return false;
- if (!Object.Equals(Type, other.Type)) return false;
- return true;
- } // Equals
-
- public override sealed int GetHashCode()
- {
- if (_hash != 0)
- return _hash;
- EnterGetHashCode();
- int hash = 2015635549;
- hash = ((hash << 13) - (hash >> 19)) ^ (Type == null ? 0 : Type.GetHashCode());
- LeaveGetHashCode();
- _hash = hash;
- return _hash;
- } // GetHashCode
-
- internal override void Save(NativeWriter writer)
- {
- writer.Write(CustomModifiers);
- Debug.Assert(Type == null ||
- Type.HandleType == HandleType.TypeDefinition ||
- Type.HandleType == HandleType.TypeReference ||
- Type.HandleType == HandleType.TypeSpecification);
- writer.Write(Type);
- } // Save
-
- internal static ReturnTypeSignatureHandle AsHandle(ReturnTypeSignature record)
- {
- if (record == null)
- {
- return new ReturnTypeSignatureHandle(0);
- }
- else
- {
- return record.Handle;
- }
- } // AsHandle
-
- internal new ReturnTypeSignatureHandle Handle
- {
- get
- {
- return new ReturnTypeSignatureHandle(HandleOffset);
- }
- } // Handle
-
- public List<CustomModifier> CustomModifiers = new List<CustomModifier>();
- public MetadataRecord Type;
- } // ReturnTypeSignature
-
public partial class SZArraySignature : MetadataRecord
{
public override HandleType HandleType
@@ -4298,7 +4179,8 @@ namespace Internal.Metadata.NativeFormat.Writer
Debug.Assert(ElementType == null ||
ElementType.HandleType == HandleType.TypeDefinition ||
ElementType.HandleType == HandleType.TypeReference ||
- ElementType.HandleType == HandleType.TypeSpecification);
+ ElementType.HandleType == HandleType.TypeSpecification ||
+ ElementType.HandleType == HandleType.ModifiedType);
writer.Write(ElementType);
} // Save
diff --git a/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeMetadataWriter.cs b/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeMetadataWriter.cs
index 7ce4c4af6..0dec3aad3 100644
--- a/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeMetadataWriter.cs
+++ b/src/ILCompiler.MetadataWriter/src/Internal/Metadata/NativeFormat/Writer/NativeMetadataWriter.cs
@@ -838,14 +838,6 @@ namespace Internal.Metadata.NativeFormat.Writer
}
}
- public partial class ParameterTypeSignature
- {
- public override string ToString()
- {
- return Type.ToString();
- }
- }
-
public partial class ByReferenceSignature
{
public override string ToString()
@@ -854,14 +846,6 @@ namespace Internal.Metadata.NativeFormat.Writer
}
}
- public partial class ReturnTypeSignature
- {
- public override string ToString()
- {
- return Type.ToString();
- }
- }
-
public partial class CustomAttribute
{
public override string ToString()
@@ -955,7 +939,7 @@ namespace Internal.Metadata.NativeFormat.Writer
public override string ToString()
{
return String.Join(" ", Enum.GetName(typeof(CallingConventions), CallingConvention),
- ToString(CustomModifiers, " "), Type.ToString()) + "(" + ToString(Parameters) + ")";
+ Type.ToString()) + "(" + ToString(Parameters) + ")";
}
}
@@ -963,15 +947,16 @@ namespace Internal.Metadata.NativeFormat.Writer
{
public override string ToString()
{
- return ToString(CustomModifiers, " ") + Type.ToString();
+ return Type.ToString();
}
}
- public partial class CustomModifier
+ public partial class ModifiedType
{
public override string ToString()
{
- return "[" + (IsOptional ? "opt : " : "req : ") + Type.ToString() + "]";
+ return "[" + (IsOptional ? "opt : " : "req : ") + ModifierType.ToString() + "] " +
+ Type.ToString();
}
}