diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs
index 667bd0d54a022d..c78d8da5a9a07f 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Emit/RuntimeModuleBuilder.cs
@@ -829,7 +829,7 @@ protected override void CreateGlobalFunctionsCore()
if (_hasGlobalBeenCreated)
{
// cannot create globals twice
- throw new InvalidOperationException(SR.InvalidOperation_NotADebugModule);
+ throw new InvalidOperationException(SR.InvalidOperation_GlobalsHaveBeenCreated);
}
_globalTypeBuilder.CreateType();
_hasGlobalBeenCreated = true;
diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RtFieldInfo.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RtFieldInfo.cs
index 15ce2971bed747..6a8aaf6898b834 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/RtFieldInfo.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/RtFieldInfo.cs
@@ -256,12 +256,12 @@ private RuntimeType InitializeFieldType()
public override Type[] GetRequiredCustomModifiers()
{
- return GetSignature().GetCustomModifiers(1, true);
+ return GetSignature().GetCustomModifiers(0, true);
}
public override Type[] GetOptionalCustomModifiers()
{
- return GetSignature().GetCustomModifiers(1, false);
+ return GetSignature().GetCustomModifiers(0, false);
}
internal Signature GetSignature() => new Signature(this, m_declaringType);
diff --git a/src/libraries/System.Reflection.Emit/src/Resources/Strings.resx b/src/libraries/System.Reflection.Emit/src/Resources/Strings.resx
index 84f91988b3ba99..7a27f2807a39e6 100644
--- a/src/libraries/System.Reflection.Emit/src/Resources/Strings.resx
+++ b/src/libraries/System.Reflection.Emit/src/Resources/Strings.resx
@@ -267,4 +267,25 @@
Label defined multiple times.
+
+ PInvoke methods must be static and native and cannot be abstract.
+
+
+ PInvoke methods cannot exist on interfaces.
+
+
+ Method has been already defined.
+
+
+ Global members must be static.
+
+
+ Type definition of the global function has been completed.
+
+
+ Data size must be > 1 and < 0x3f0000.
+
+
+ MetadataToken for the member is not generated until the assembly saved.
+
\ No newline at end of file
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/AssemblyBuilderImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/AssemblyBuilderImpl.cs
index 8f252ace10fd7a..834d8612a949e0 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/AssemblyBuilderImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/AssemblyBuilderImpl.cs
@@ -44,7 +44,7 @@ internal static AssemblyBuilderImpl DefinePersistedAssembly(AssemblyName name, A
IEnumerable? assemblyAttributes)
=> new AssemblyBuilderImpl(name, coreAssembly, assemblyAttributes);
- private void WritePEImage(Stream peStream, BlobBuilder ilBuilder)
+ private void WritePEImage(Stream peStream, BlobBuilder ilBuilder, BlobBuilder fieldData)
{
var peHeaderBuilder = new PEHeaderBuilder(
// For now only support DLL, DLL files are considered executable files
@@ -55,6 +55,7 @@ private void WritePEImage(Stream peStream, BlobBuilder ilBuilder)
header: peHeaderBuilder,
metadataRootBuilder: new MetadataRootBuilder(_metadataBuilder),
ilStream: ilBuilder,
+ mappedFieldData: fieldData,
strongNameSignatureSize: 0);
// Write executable into the specified stream.
@@ -91,10 +92,11 @@ internal void Save(Stream stream)
_module.WriteCustomAttributes(_customAttributes, assemblyHandle);
var ilBuilder = new BlobBuilder();
+ var fieldDataBuilder = new BlobBuilder();
MethodBodyStreamEncoder methodBodyEncoder = new MethodBodyStreamEncoder(ilBuilder);
- _module.AppendMetadata(methodBodyEncoder);
+ _module.AppendMetadata(methodBodyEncoder, fieldDataBuilder);
- WritePEImage(stream, ilBuilder);
+ WritePEImage(stream, ilBuilder, fieldDataBuilder);
_previouslySaved = true;
}
@@ -137,5 +139,9 @@ protected override void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan
}
public override string? FullName => _assemblyName.FullName;
+
+ public override Module ManifestModule => _module ?? throw new InvalidOperationException(SR.InvalidOperation_AModuleRequired);
+
+ public override AssemblyName GetName(bool copiedName) => (AssemblyName)_assemblyName.Clone();
}
}
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ConstructorBuilderImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ConstructorBuilderImpl.cs
index 9fca44c0a608a6..5ea3676039c88a 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ConstructorBuilderImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ConstructorBuilderImpl.cs
@@ -10,10 +10,11 @@ internal sealed class ConstructorBuilderImpl : ConstructorBuilder
internal readonly MethodBuilderImpl _methodBuilder;
internal bool _isDefaultConstructor;
- public ConstructorBuilderImpl(string name, MethodAttributes attributes, CallingConventions callingConvention,
- Type[]? parameterTypes, ModuleBuilderImpl mod, TypeBuilderImpl type)
+ public ConstructorBuilderImpl(string name, MethodAttributes attributes, CallingConventions callingConvention, Type[]? parameterTypes,
+ Type[][]? requiredCustomModifiers, Type[][]? optionalCustomModifiers, ModuleBuilderImpl module, TypeBuilderImpl type)
{
- _methodBuilder = new MethodBuilderImpl(name, attributes, callingConvention, null, parameterTypes, mod, type);
+ _methodBuilder = new MethodBuilderImpl(name, attributes, callingConvention, returnType: null, returnTypeRequiredCustomModifiers: null,
+ returnTypeOptionalCustomModifiers: null, parameterTypes, requiredCustomModifiers, optionalCustomModifiers, module, type);
type._methodDefinitions.Add(_methodBuilder);
}
@@ -60,7 +61,7 @@ public override CallingConventions CallingConvention
}
}
- public override TypeBuilder DeclaringType => _methodBuilder.DeclaringType;
+ public override Type DeclaringType => _methodBuilder.DeclaringType!;
public override Module Module => _methodBuilder.Module;
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/FieldBuilderImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/FieldBuilderImpl.cs
index dc507fcc679963..35b8e40784d0ec 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/FieldBuilderImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/FieldBuilderImpl.cs
@@ -15,6 +15,8 @@ internal sealed class FieldBuilderImpl : FieldBuilder
private readonly TypeBuilderImpl _typeBuilder;
private readonly string _fieldName;
private readonly Type _fieldType;
+ private readonly Type[]? _requiredCustomModifiers;
+ private readonly Type[]? _optionalCustomModifiers;
private FieldAttributes _attributes;
internal MarshallingData? _marshallingData;
@@ -22,14 +24,17 @@ internal sealed class FieldBuilderImpl : FieldBuilder
internal List? _customAttributes;
internal object? _defaultValue = DBNull.Value;
internal FieldDefinitionHandle _handle;
+ internal byte[]? _rvaData;
- internal FieldBuilderImpl(TypeBuilderImpl typeBuilder, string fieldName, Type type, FieldAttributes attributes)
+ internal FieldBuilderImpl(TypeBuilderImpl typeBuilder, string fieldName, Type type, FieldAttributes attributes, Type[]? requiredCustomModifiers, Type[]? optionalCustomModifiers)
{
_fieldName = fieldName;
_typeBuilder = typeBuilder;
_fieldType = type;
_attributes = attributes & ~FieldAttributes.ReservedMask;
_offset = -1;
+ _requiredCustomModifiers = requiredCustomModifiers;
+ _optionalCustomModifiers = optionalCustomModifiers;
}
protected override void SetConstantCore(object? defaultValue)
@@ -37,6 +42,7 @@ protected override void SetConstantCore(object? defaultValue)
_typeBuilder.ThrowIfCreated();
ValidateDefaultValueType(defaultValue, _fieldType);
_defaultValue = defaultValue;
+ _attributes |= FieldAttributes.HasDefault;
}
internal static void ValidateDefaultValueType(object? defaultValue, Type destinationType)
@@ -100,6 +106,12 @@ internal static void ValidateDefaultValueType(object? defaultValue, Type destina
}
}
+ internal void SetData(byte[] data)
+ {
+ _rvaData = data;
+ _attributes |= FieldAttributes.HasFieldRVA;
+ }
+
protected override void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan binaryAttribute)
{
// Handle pseudo custom attributes
@@ -142,9 +154,9 @@ protected override void SetOffsetCore(int iOffset)
public override string Name => _fieldName;
- public override Type? DeclaringType => _typeBuilder;
+ public override Type? DeclaringType => _typeBuilder._isHiddenGlobalType ? null : _typeBuilder;
- public override Type? ReflectedType => _typeBuilder;
+ public override Type? ReflectedType => DeclaringType;
#endregion
@@ -159,6 +171,10 @@ public override void SetValue(object? obj, object? val, BindingFlags invokeAttr,
public override FieldAttributes Attributes => _attributes;
+ public override Type[] GetRequiredCustomModifiers() => _requiredCustomModifiers ?? Type.EmptyTypes;
+
+ public override Type[] GetOptionalCustomModifiers() => _optionalCustomModifiers ?? Type.EmptyTypes;
+
#endregion
#region ICustomAttributeProvider Implementation
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/GenericTypeParameterBuilderImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/GenericTypeParameterBuilderImpl.cs
index 7fa928d22b689a..fccd56de74e79a 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/GenericTypeParameterBuilderImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/GenericTypeParameterBuilderImpl.cs
@@ -29,12 +29,12 @@ internal GenericTypeParameterBuilderImpl(string name, int genParamPosition, Type
_type = typeBuilder;
}
- public GenericTypeParameterBuilderImpl(string name, int genParamPosition, MethodBuilderImpl methodBuilder)
+ public GenericTypeParameterBuilderImpl(string name, int genParamPosition, MethodBuilderImpl methodBuilder, TypeBuilderImpl typeBuilder)
{
_name = name;
_genParamPosition = genParamPosition;
_methodBuilder = methodBuilder;
- _type = methodBuilder.DeclaringType;
+ _type = typeBuilder;
}
protected override void SetBaseTypeConstraintCore([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type? baseTypeConstraint)
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ILGeneratorImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ILGeneratorImpl.cs
index 6a424d04aad5b9..2862b8774e2959 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ILGeneratorImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ILGeneratorImpl.cs
@@ -418,12 +418,12 @@ public override void Emit(OpCode opcode, ConstructorInfo con)
EmitOpcode(opcode);
UpdateStackSize(stackChange);
- WriteOrReserveToken(_moduleBuilder.GetMethodMetadataToken(con), con);
+ WriteOrReserveToken(_moduleBuilder.GetConstructorHandle(con), con);
}
- private void WriteOrReserveToken(int token, object member)
+ private void WriteOrReserveToken(EntityHandle handle, object member)
{
- if (token == -1)
+ if (handle.IsNil)
{
// The member is a `***BuilderImpl` and its token is not yet defined.
// Reserve the token bytes and write them later when its ready
@@ -432,7 +432,7 @@ private void WriteOrReserveToken(int token, object member)
}
else
{
- _il.Token(token);
+ _il.Token(MetadataTokens.GetToken(handle));
}
}
@@ -553,7 +553,7 @@ public override void Emit(OpCode opcode, FieldInfo field)
ArgumentNullException.ThrowIfNull(field);
EmitOpcode(opcode);
- WriteOrReserveToken(_moduleBuilder.GetFieldMetadataToken(field), field);
+ WriteOrReserveToken(_moduleBuilder.GetFieldHandle(field), field);
}
public override void Emit(OpCode opcode, MethodInfo meth)
@@ -567,7 +567,7 @@ public override void Emit(OpCode opcode, MethodInfo meth)
else
{
EmitOpcode(opcode);
- WriteOrReserveToken(_moduleBuilder.GetMethodMetadataToken(meth), meth);
+ WriteOrReserveToken(_moduleBuilder.GetMethodHandle(meth), meth);
}
}
@@ -576,7 +576,7 @@ public override void Emit(OpCode opcode, Type cls)
ArgumentNullException.ThrowIfNull(cls);
EmitOpcode(opcode);
- WriteOrReserveToken(_moduleBuilder.GetTypeMetadataToken(cls), cls);
+ WriteOrReserveToken(_moduleBuilder.GetTypeHandle(cls), cls);
}
public override void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? optionalParameterTypes)
@@ -592,11 +592,11 @@ public override void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? opti
UpdateStackSize(GetStackChange(opcode, methodInfo, optionalParameterTypes));
if (optionalParameterTypes == null || optionalParameterTypes.Length == 0)
{
- WriteOrReserveToken(_moduleBuilder.GetMethodMetadataToken(methodInfo), methodInfo);
+ WriteOrReserveToken(_moduleBuilder.GetMethodHandle(methodInfo), methodInfo);
}
else
{
- WriteOrReserveToken(_moduleBuilder.GetMethodMetadataToken(methodInfo, optionalParameterTypes),
+ WriteOrReserveToken(_moduleBuilder.GetMethodHandle(methodInfo, optionalParameterTypes),
new KeyValuePair(methodInfo, optionalParameterTypes));
}
}
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/MethodBuilderImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/MethodBuilderImpl.cs
index 8ecc173cc109f5..a20e067e6b006a 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/MethodBuilderImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/MethodBuilderImpl.cs
@@ -7,6 +7,7 @@
using System.Globalization;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
+using System.Runtime.InteropServices;
namespace System.Reflection.Emit
{
@@ -23,6 +24,10 @@ internal sealed class MethodBuilderImpl : MethodBuilder
private GenericTypeParameterBuilderImpl[]? _typeParameters;
private ILGeneratorImpl? _ilGenerator;
private bool _initLocals;
+ internal Type[]? _returnTypeRequiredModifiers;
+ internal Type[]? _returnTypeOptionalCustomModifiers;
+ internal Type[][]? _parameterTypeRequiredCustomModifiers;
+ internal Type[][]? _parameterTypeOptionalCustomModifiers;
internal bool _canBeRuntimeImpl;
internal DllImportData? _dllImportData;
@@ -30,8 +35,10 @@ internal sealed class MethodBuilderImpl : MethodBuilder
internal ParameterBuilderImpl[]? _parameterBuilders;
internal MethodDefinitionHandle _handle;
- internal MethodBuilderImpl(string name, MethodAttributes attributes, CallingConventions callingConventions, Type? returnType,
- Type[]? parameterTypes, ModuleBuilderImpl module, TypeBuilderImpl declaringType)
+ internal MethodBuilderImpl(string name, MethodAttributes attributes, CallingConventions callingConventions,
+ Type? returnType, Type[]? returnTypeRequiredCustomModifiers, Type[]? returnTypeOptionalCustomModifiers,
+ Type[]? parameterTypes, Type[][]? parameterTypeRequiredCustomModifiers, Type[][]? parameterTypeOptionalCustomModifiers,
+ ModuleBuilderImpl module, TypeBuilderImpl declaringType)
{
_module = module;
_returnType = returnType ?? _module.GetTypeFromCoreAssembly(CoreTypeId.Void);
@@ -50,9 +57,13 @@ internal MethodBuilderImpl(string name, MethodAttributes attributes, CallingConv
_callingConventions = callingConventions;
_declaringType = declaringType;
+ _returnTypeRequiredModifiers = returnTypeRequiredCustomModifiers;
+ _returnTypeOptionalCustomModifiers = returnTypeOptionalCustomModifiers;
if (parameterTypes != null)
{
+ _parameterTypeRequiredCustomModifiers = parameterTypeRequiredCustomModifiers;
+ _parameterTypeOptionalCustomModifiers = parameterTypeOptionalCustomModifiers;
_parameterTypes = new Type[parameterTypes.Length];
_parameterBuilders = new ParameterBuilderImpl[parameterTypes.Length + 1]; // parameter 0 reserved for return type
for (int i = 0; i < parameterTypes.Length; i++)
@@ -65,6 +76,11 @@ internal MethodBuilderImpl(string name, MethodAttributes attributes, CallingConv
_initLocals = true;
}
+ internal void CreateDllImportData(string dllName, string entryName, CallingConvention nativeCallConv, CharSet nativeCharSet)
+ {
+ _dllImportData = DllImportData.Create(dllName, entryName, nativeCallConv, nativeCharSet);
+ }
+
internal int ParameterCount => _parameterTypes == null ? 0 : _parameterTypes.Length;
internal Type[]? ParameterTypes => _parameterTypes;
@@ -85,32 +101,8 @@ internal MethodBuilderImpl(string name, MethodAttributes attributes, CallingConv
}
internal BlobBuilder GetMethodSignatureBlob() => MetadataSignatureHelper.GetMethodSignature(_module, _parameterTypes,
- _returnType, GetSignatureConvention(_callingConventions, _dllImportData), GetGenericArguments().Length, !IsStatic);
-
- internal static SignatureCallingConvention GetSignatureConvention(CallingConventions callingConvention, DllImportData? dllImportData = null)
- {
- SignatureCallingConvention convention = SignatureCallingConvention.Default;
-
- if ((callingConvention & CallingConventions.VarArgs) != 0)
- {
- convention = SignatureCallingConvention.VarArgs;
- }
-
- if (dllImportData != null)
- {
- // Set native call signature
- convention = dllImportData.Flags switch
- {
- MethodImportAttributes.CallingConventionCDecl => SignatureCallingConvention.CDecl,
- MethodImportAttributes.CallingConventionStdCall => SignatureCallingConvention.StdCall,
- MethodImportAttributes.CallingConventionThisCall => SignatureCallingConvention.ThisCall,
- MethodImportAttributes.CallingConventionFastCall => SignatureCallingConvention.FastCall,
- _ => SignatureCallingConvention.Unmanaged,
- };
- }
-
- return convention;
- }
+ _returnType, ModuleBuilderImpl.GetSignatureConvention(_callingConventions), GetGenericArguments().Length, !IsStatic, optionalParameterTypes: null,
+ _returnTypeRequiredModifiers, _returnTypeOptionalCustomModifiers, _parameterTypeRequiredCustomModifiers, _parameterTypeOptionalCustomModifiers);
protected override bool InitLocalsCore
{
@@ -130,7 +122,7 @@ protected override GenericTypeParameterBuilder[] DefineGenericParametersCore(par
{
string name = names[i];
ArgumentNullException.ThrowIfNull(names, nameof(names));
- typeParameters[i] = new GenericTypeParameterBuilderImpl(name, i, this);
+ typeParameters[i] = new GenericTypeParameterBuilderImpl(name, i, this, _declaringType);
}
return _typeParameters = typeParameters;
@@ -190,7 +182,7 @@ protected override void SetCustomAttributeCore(ConstructorInfo con, ReadOnlySpan
return;
case "System.Runtime.InteropServices.DllImportAttribute":
{
- _dllImportData = DllImportData.CreateDllImportData(CustomAttributeInfo.DecodeCustomAttribute(con, binaryAttribute), out var preserveSig);
+ _dllImportData = DllImportData.Create(CustomAttributeInfo.DecodeCustomAttribute(con, binaryAttribute), out var preserveSig);
_attributes |= MethodAttributes.PinvokeImpl;
_canBeRuntimeImpl = true;
if (preserveSig)
@@ -228,6 +220,8 @@ protected override void SetSignatureCore(Type? returnType, Type[]? returnTypeReq
if (returnType != null)
{
_returnType = returnType;
+ _returnTypeOptionalCustomModifiers = returnTypeOptionalCustomModifiers;
+ _returnTypeRequiredModifiers = returnTypeRequiredCustomModifiers;
}
if (parameterTypes != null)
@@ -238,14 +232,16 @@ protected override void SetSignatureCore(Type? returnType, Type[]? returnTypeReq
{
ArgumentNullException.ThrowIfNull(_parameterTypes[i] = parameterTypes[i], nameof(parameterTypes));
}
+
+ _parameterTypeOptionalCustomModifiers = parameterTypeOptionalCustomModifiers;
+ _parameterTypeRequiredCustomModifiers = parameterTypeRequiredCustomModifiers;
}
- // TODO: Add support for other parameters: returnTypeRequiredCustomModifiers, returnTypeOptionalCustomModifiers, parameterTypeRequiredCustomModifiers and parameterTypeOptionalCustomModifiers
}
public override string Name => _name;
public override MethodAttributes Attributes => _attributes;
public override CallingConventions CallingConvention => _callingConventions;
- public override TypeBuilder DeclaringType => _declaringType;
+ public override Type? DeclaringType => _declaringType._isHiddenGlobalType ? null : _declaringType;
public override Module Module => _module;
public override bool ContainsGenericParameters => throw new NotSupportedException();
public override bool IsGenericMethod => _typeParameters != null;
@@ -255,7 +251,7 @@ protected override void SetSignatureCore(Type? returnType, Type[]? returnTypeReq
public override bool IsSecurityTransparent => false;
public override int MetadataToken => _handle == default ? 0 : MetadataTokens.GetToken(_handle);
public override RuntimeMethodHandle MethodHandle => throw new NotSupportedException(SR.NotSupported_DynamicModule);
- public override Type? ReflectedType => _declaringType;
+ public override Type? ReflectedType => DeclaringType;
public override ParameterInfo ReturnParameter { get => throw new NotImplementedException(); }
public override Type ReturnType => _returnType;
public override ICustomAttributeProvider ReturnTypeCustomAttributes { get => throw new NotImplementedException(); }
diff --git a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ModuleBuilderImpl.cs b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ModuleBuilderImpl.cs
index 2232bd17c61c34..cf0725c9673e04 100644
--- a/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ModuleBuilderImpl.cs
+++ b/src/libraries/System.Reflection.Emit/src/System/Reflection/Emit/ModuleBuilderImpl.cs
@@ -6,6 +6,7 @@
using System.Diagnostics.CodeAnalysis;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
+using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
namespace System.Reflection.Emit
@@ -16,6 +17,7 @@ internal sealed class ModuleBuilderImpl : ModuleBuilder
private readonly string _name;
private readonly MetadataBuilder _metadataBuilder;
private readonly AssemblyBuilderImpl _assemblyBuilder;
+ private readonly TypeBuilderImpl _globalTypeBuilder;
private readonly Dictionary _assemblyReferences = new();
private readonly Dictionary _typeReferences = new();
private readonly Dictionary