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.MetadataTransform
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.MetadataTransform')
-rw-r--r--src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Method.cs8
-rw-r--r--src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Parameter.cs20
-rw-r--r--src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Property.cs3
-rw-r--r--src/ILCompiler.MetadataTransform/tests/SimpleTests.cs4
4 files changed, 5 insertions, 30 deletions
diff --git a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Method.cs b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Method.cs
index e724da05e..38b2c3abf 100644
--- a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Method.cs
+++ b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Method.cs
@@ -158,18 +158,14 @@ namespace ILCompiler.Metadata
{
CallingConvention = GetSignatureCallingConvention(signature),
GenericParameterCount = signature.GenericParameterCount,
- ReturnType = new ReturnTypeSignature
- {
- // TODO: CustomModifiers
- Type = HandleType(signature.ReturnType)
- },
+ ReturnType = HandleType(signature.ReturnType),
// TODO-NICE: VarArgParameters
};
result.Parameters.Capacity = signature.Length;
for (int i = 0; i < signature.Length; i++)
{
- result.Parameters.Add(HandleParameterTypeSignature(signature[i]));
+ result.Parameters.Add(HandleType(signature[i]));
}
return result;
diff --git a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Parameter.cs b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Parameter.cs
index 38c58e981..0f8002b1c 100644
--- a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Parameter.cs
+++ b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Parameter.cs
@@ -3,7 +3,6 @@
// See the LICENSE file in the project root for more information.
using System;
-using System.Collections.Generic;
using Internal.Metadata.NativeFormat.Writer;
using Cts = Internal.TypeSystem;
@@ -15,23 +14,6 @@ namespace ILCompiler.Metadata
{
partial class Transform<TPolicy>
{
- private EntityMap<Cts.TypeDesc, ParameterTypeSignature> _paramSigs =
- new EntityMap<Cts.TypeDesc, ParameterTypeSignature>(EqualityComparer<Cts.TypeDesc>.Default);
- private Action<Cts.TypeDesc, ParameterTypeSignature> _initParamSig;
-
- private ParameterTypeSignature HandleParameterTypeSignature(Cts.TypeDesc parameter)
- {
- return _paramSigs.GetOrCreate(parameter, _initParamSig ?? (_initParamSig = InitializeParameterTypeSignature));
- }
-
- private void InitializeParameterTypeSignature(Cts.TypeDesc entity, ParameterTypeSignature record)
- {
- // TODO: CustomModifiers
- record.Type = HandleType(entity);
- }
-
- #region Generic Parameters
-
private GenericParameter HandleGenericParameter(Cts.GenericParameterDesc genParam)
{
var result = new GenericParameter
@@ -66,7 +48,5 @@ namespace ILCompiler.Metadata
return result;
}
-
- #endregion
}
}
diff --git a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Property.cs b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Property.cs
index af3f737a3..7b71185dc 100644
--- a/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Property.cs
+++ b/src/ILCompiler.MetadataTransform/src/ILCompiler/Metadata/Transform.Property.cs
@@ -43,14 +43,13 @@ namespace ILCompiler.Metadata
Signature = new PropertySignature
{
CallingConvention = sig.IsStatic ? CallingConventions.Standard : CallingConventions.HasThis,
- // TODO: CustomModifiers
Type = HandleType(sig.ReturnType)
},
};
result.Signature.Parameters.Capacity = sig.Length;
for (int i = 0; i < sig.Length; i++)
- result.Signature.Parameters.Add(HandleParameterTypeSignature(sig[i]));
+ result.Signature.Parameters.Add(HandleType(sig[i]));
if (getterHasMetadata)
{
diff --git a/src/ILCompiler.MetadataTransform/tests/SimpleTests.cs b/src/ILCompiler.MetadataTransform/tests/SimpleTests.cs
index 87156bfc0..900488123 100644
--- a/src/ILCompiler.MetadataTransform/tests/SimpleTests.cs
+++ b/src/ILCompiler.MetadataTransform/tests/SimpleTests.cs
@@ -77,9 +77,9 @@ namespace MetadataTransformTests
var sigRecord = transformResult.Transform.HandleMethodSignature(sig);
// Verify the signature is connected to the existing transformResult world
- Assert.Same(stringRecord, sigRecord.ReturnType.Type);
+ Assert.Same(stringRecord, sigRecord.ReturnType);
Assert.Equal(1, sigRecord.Parameters.Count);
- Assert.Same(singleRecord, sigRecord.Parameters[0].Type);
+ Assert.Same(singleRecord, sigRecord.Parameters[0]);
}
[Fact]