Skip to content

Commit a3fd93a

Browse files
authored
Support non core types for signature and other type references (#85112)
* Support non core types for signature and other type references * Add handle to TypeBuilderImpl and implement MetadataToken, remove callbacks * Remove unnecessary MetadataHelper type
1 parent 39b5b8e commit a3fd93a

File tree

10 files changed

+181
-214
lines changed

10 files changed

+181
-214
lines changed

src/libraries/System.Reflection.Emit/System.Reflection.Emit.sln

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reflection.Metadata"
4343
EndProject
4444
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime", "..\System.Runtime\src\System.Runtime.csproj", "{BB96A2BA-44E9-43FA-91B1-CCEE212C6A8A}"
4545
EndProject
46-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.CodeDom", "..\System.CodeDom\src\System.CodeDom.csproj", "{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}"
47-
EndProject
4846
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reflection.MetadataLoadContext", "..\System.Reflection.MetadataLoadContext\src\System.Reflection.MetadataLoadContext.csproj", "{9F3970FF-F138-4F23-A2F8-2387858E723D}"
4947
EndProject
5048
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Collections.Immutable", "..\System.Collections.Immutable\src\System.Collections.Immutable.csproj", "{C2FF5BC7-825E-437E-92C3-F505EB6D1D40}"
@@ -53,8 +51,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Collections.Immutabl
5351
EndProject
5452
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reflection.MetadataLoadContext", "..\System.Reflection.MetadataLoadContext\ref\System.Reflection.MetadataLoadContext.csproj", "{B2FAA0B4-2976-4742-B186-9C4928BCF9AF}"
5553
EndProject
56-
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.CodeDom", "..\System.CodeDom\ref\System.CodeDom.csproj", "{501C1EA6-F7DB-4D3E-A212-F06689A831CD}"
57-
EndProject
5854
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Reflection.Metadata", "..\System.Reflection.Metadata\ref\System.Reflection.Metadata.csproj", "{E468274C-8F7E-49FC-BC2A-82C8B9E5B026}"
5955
EndProject
6056
Global
@@ -319,24 +315,6 @@ Global
319315
{BB96A2BA-44E9-43FA-91B1-CCEE212C6A8A}.Release|x64.Build.0 = Release|Any CPU
320316
{BB96A2BA-44E9-43FA-91B1-CCEE212C6A8A}.Release|x86.ActiveCfg = Release|Any CPU
321317
{BB96A2BA-44E9-43FA-91B1-CCEE212C6A8A}.Release|x86.Build.0 = Release|Any CPU
322-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
323-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Checked|Any CPU.Build.0 = Debug|Any CPU
324-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Checked|x64.ActiveCfg = Debug|Any CPU
325-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Checked|x64.Build.0 = Debug|Any CPU
326-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Checked|x86.ActiveCfg = Debug|Any CPU
327-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Checked|x86.Build.0 = Debug|Any CPU
328-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
329-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Debug|Any CPU.Build.0 = Debug|Any CPU
330-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Debug|x64.ActiveCfg = Debug|Any CPU
331-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Debug|x64.Build.0 = Debug|Any CPU
332-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Debug|x86.ActiveCfg = Debug|Any CPU
333-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Debug|x86.Build.0 = Debug|Any CPU
334-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Release|Any CPU.ActiveCfg = Release|Any CPU
335-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Release|Any CPU.Build.0 = Release|Any CPU
336-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Release|x64.ActiveCfg = Release|Any CPU
337-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Release|x64.Build.0 = Release|Any CPU
338-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Release|x86.ActiveCfg = Release|Any CPU
339-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E}.Release|x86.Build.0 = Release|Any CPU
340318
{9F3970FF-F138-4F23-A2F8-2387858E723D}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
341319
{9F3970FF-F138-4F23-A2F8-2387858E723D}.Checked|Any CPU.Build.0 = Debug|Any CPU
342320
{9F3970FF-F138-4F23-A2F8-2387858E723D}.Checked|x64.ActiveCfg = Debug|Any CPU
@@ -409,24 +387,6 @@ Global
409387
{B2FAA0B4-2976-4742-B186-9C4928BCF9AF}.Release|x64.Build.0 = Release|Any CPU
410388
{B2FAA0B4-2976-4742-B186-9C4928BCF9AF}.Release|x86.ActiveCfg = Release|Any CPU
411389
{B2FAA0B4-2976-4742-B186-9C4928BCF9AF}.Release|x86.Build.0 = Release|Any CPU
412-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
413-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Checked|Any CPU.Build.0 = Debug|Any CPU
414-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Checked|x64.ActiveCfg = Debug|Any CPU
415-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Checked|x64.Build.0 = Debug|Any CPU
416-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Checked|x86.ActiveCfg = Debug|Any CPU
417-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Checked|x86.Build.0 = Debug|Any CPU
418-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
419-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
420-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Debug|x64.ActiveCfg = Debug|Any CPU
421-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Debug|x64.Build.0 = Debug|Any CPU
422-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Debug|x86.ActiveCfg = Debug|Any CPU
423-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Debug|x86.Build.0 = Debug|Any CPU
424-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
425-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Release|Any CPU.Build.0 = Release|Any CPU
426-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Release|x64.ActiveCfg = Release|Any CPU
427-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Release|x64.Build.0 = Release|Any CPU
428-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Release|x86.ActiveCfg = Release|Any CPU
429-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD}.Release|x86.Build.0 = Release|Any CPU
430390
{E468274C-8F7E-49FC-BC2A-82C8B9E5B026}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
431391
{E468274C-8F7E-49FC-BC2A-82C8B9E5B026}.Checked|Any CPU.Build.0 = Debug|Any CPU
432392
{E468274C-8F7E-49FC-BC2A-82C8B9E5B026}.Checked|x64.ActiveCfg = Debug|Any CPU
@@ -466,12 +426,10 @@ Global
466426
{613C42F2-847A-42B3-9F5E-F5A670356BF7} = {C36D185D-9B3D-42E5-985F-E21B3BAF3B6D}
467427
{F33093A8-FF33-4F95-B256-F2AB712C956A} = {74F4AB97-3DBC-48FB-A2EA-2B4141749800}
468428
{BB96A2BA-44E9-43FA-91B1-CCEE212C6A8A} = {74F4AB97-3DBC-48FB-A2EA-2B4141749800}
469-
{D13E80A9-A4E9-4399-A2C2-3008DA1C3B4E} = {2FC35C2F-76DB-4D84-B421-9700BEA4D161}
470429
{9F3970FF-F138-4F23-A2F8-2387858E723D} = {2FC35C2F-76DB-4D84-B421-9700BEA4D161}
471430
{C2FF5BC7-825E-437E-92C3-F505EB6D1D40} = {74F4AB97-3DBC-48FB-A2EA-2B4141749800}
472431
{DE04D45B-7E15-409D-A176-985D814A6AEB} = {C36D185D-9B3D-42E5-985F-E21B3BAF3B6D}
473432
{B2FAA0B4-2976-4742-B186-9C4928BCF9AF} = {C36D185D-9B3D-42E5-985F-E21B3BAF3B6D}
474-
{501C1EA6-F7DB-4D3E-A212-F06689A831CD} = {C36D185D-9B3D-42E5-985F-E21B3BAF3B6D}
475433
{E468274C-8F7E-49FC-BC2A-82C8B9E5B026} = {C36D185D-9B3D-42E5-985F-E21B3BAF3B6D}
476434
EndGlobalSection
477435
GlobalSection(ExtensibilityGlobals) = postSolution

src/libraries/System.Reflection.Emit/src/System.Reflection.Emit.csproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
<ContractTypesPartiallyMoved>true</ContractTypesPartiallyMoved>
66
</PropertyGroup>
77
<ItemGroup>
8-
<Compile Include="System\Reflection\Emit\MetadataHelper.cs" />
98
<Compile Include="System\Reflection\Emit\AssemblyBuilderImpl.cs" />
109
<Compile Include="System\Reflection\Emit\FieldBuilderImpl.cs" />
1110
<Compile Include="System\Reflection\Emit\MethodBuilderImpl.cs" />

src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/AssemblyBuilderImpl.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ namespace System.Reflection.Emit
1111
{
1212
internal sealed class AssemblyBuilderImpl : AssemblyBuilder
1313
{
14-
private bool _previouslySaved;
1514
private readonly AssemblyName _assemblyName;
1615
private readonly Assembly _coreAssembly;
16+
private readonly MetadataBuilder _metadataBuilder;
1717
private ModuleBuilderImpl? _module;
18+
private bool _previouslySaved;
1819

1920
internal AssemblyBuilderImpl(AssemblyName name, Assembly coreAssembly, IEnumerable<CustomAttributeBuilder>? assemblyAttributes)
2021
{
@@ -29,6 +30,7 @@ internal AssemblyBuilderImpl(AssemblyName name, Assembly coreAssembly, IEnumerab
2930

3031
_assemblyName = name;
3132
_coreAssembly = coreAssembly;
33+
_metadataBuilder = new MetadataBuilder();
3234

3335
if (assemblyAttributes != null)
3436
{
@@ -42,7 +44,7 @@ internal AssemblyBuilderImpl(AssemblyName name, Assembly coreAssembly, IEnumerab
4244
internal static AssemblyBuilderImpl DefinePersistedAssembly(AssemblyName name, Assembly coreAssembly, IEnumerable<CustomAttributeBuilder>? assemblyAttributes)
4345
=> new AssemblyBuilderImpl(name, coreAssembly, assemblyAttributes);
4446

45-
private static void WritePEImage(Stream peStream, MetadataBuilder metadataBuilder, BlobBuilder ilBuilder)
47+
private void WritePEImage(Stream peStream, BlobBuilder ilBuilder)
4648
{
4749
// Create executable with the managed metadata from the specified MetadataBuilder.
4850
var peHeaderBuilder = new PEHeaderBuilder(
@@ -51,7 +53,7 @@ private static void WritePEImage(Stream peStream, MetadataBuilder metadataBuilde
5153

5254
var peBuilder = new ManagedPEBuilder(
5355
peHeaderBuilder,
54-
new MetadataRootBuilder(metadataBuilder),
56+
new MetadataRootBuilder(_metadataBuilder),
5557
ilBuilder);
5658

5759
// Write executable into the specified stream.
@@ -75,24 +77,22 @@ internal void Save(Stream stream)
7577
}
7678

7779
// Add assembly metadata
78-
var metadata = new MetadataBuilder();
79-
80-
metadata.AddAssembly(
81-
metadata.GetOrAddString(value: _assemblyName.Name!),
80+
_metadataBuilder.AddAssembly(
81+
_metadataBuilder.GetOrAddString(value: _assemblyName.Name!),
8282
version: _assemblyName.Version ?? new Version(0, 0, 0, 0),
83-
culture: _assemblyName.CultureName == null ? default : metadata.GetOrAddString(value: _assemblyName.CultureName),
84-
publicKey: _assemblyName.GetPublicKey() is byte[] publicKey ? metadata.GetOrAddBlob(value: publicKey) : default,
83+
culture: _assemblyName.CultureName == null ? default : _metadataBuilder.GetOrAddString(value: _assemblyName.CultureName),
84+
publicKey: _assemblyName.GetPublicKey() is byte[] publicKey ? _metadataBuilder.GetOrAddBlob(value: publicKey) : default,
8585
flags: AddContentType((AssemblyFlags)_assemblyName.Flags, _assemblyName.ContentType),
8686
#pragma warning disable SYSLIB0037 // Type or member is obsolete
8787
hashAlgorithm: (AssemblyHashAlgorithm)_assemblyName.HashAlgorithm
8888
#pragma warning restore SYSLIB0037
8989
);
9090

9191
// Add module's metadata
92-
_module.AppendMetadata(metadata);
92+
_module.AppendMetadata();
9393

9494
var ilBuilder = new BlobBuilder();
95-
WritePEImage(stream, metadata, ilBuilder);
95+
WritePEImage(stream, ilBuilder);
9696
_previouslySaved = true;
9797
}
9898

@@ -114,7 +114,7 @@ protected override ModuleBuilder DefineDynamicModuleCore(string name)
114114
throw new InvalidOperationException(SR.InvalidOperation_NoMultiModuleAssembly);
115115
}
116116

117-
_module = new ModuleBuilderImpl(name, _coreAssembly);
117+
_module = new ModuleBuilderImpl(name, _coreAssembly, _metadataBuilder);
118118
return _module;
119119
}
120120

src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/MetadataHelper.cs

Lines changed: 0 additions & 78 deletions
This file was deleted.

src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/MethodBuilderImpl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ internal MethodBuilderImpl(string name, MethodAttributes attributes, CallingConv
3838
}
3939

4040
internal BlobBuilder GetMethodSignatureBlob() =>
41-
MetadataSignatureHelper.MethodSignatureEncoder(_module, _parameterTypes, ReturnType, IsStatic);
41+
MetadataSignatureHelper.MethodSignatureEncoder(_module, _parameterTypes, ReturnType, !IsStatic);
4242

4343
protected override bool InitLocalsCore { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
4444
protected override GenericTypeParameterBuilder[] DefineGenericParametersCore(params string[] names) => throw new NotImplementedException();

0 commit comments

Comments
 (0)