From b72b13e598dc8ad2637a2d0580272ad0f2482c5f Mon Sep 17 00:00:00 2001 From: Steve Harter Date: Thu, 15 Oct 2020 08:35:52 -0500 Subject: [PATCH] Add MetadataToken getter override to builder classes (#43330) --- .../System/Reflection/Emit/AssemblyBuilder.cs | 2 +- .../Reflection/Emit/ConstructorBuilder.cs | 9 +- .../Reflection/Emit/CustomAttributeBuilder.cs | 2 +- .../src/System/Reflection/Emit/EnumBuilder.cs | 2 +- .../System/Reflection/Emit/EventBuilder.cs | 16 +-- .../System/Reflection/Emit/FieldBuilder.cs | 22 +-- .../Emit/GenericTypeParameterBuilder.cs | 2 +- .../src/System/Reflection/Emit/ILGenerator.cs | 16 +-- .../System/Reflection/Emit/MethodBuilder.cs | 48 +++---- .../System/Reflection/Emit/ModuleBuilder.cs | 126 ++++++++---------- .../Reflection/Emit/ParameterBuilder.cs | 18 +-- .../System/Reflection/Emit/PropertyBuilder.cs | 40 +++--- .../System/Reflection/Emit/SignatureHelper.cs | 12 +- .../System/Reflection/Emit/SymbolMethod.cs | 17 +-- .../src/System/Reflection/Emit/TypeBuilder.cs | 83 ++++++------ .../Emit/XXXOnTypeBuilderInstantiation.cs | 8 +- .../System.Private.CoreLib.Shared.projitems | 8 -- .../src/System/Reflection/Emit/EventToken.cs | 27 ---- .../src/System/Reflection/Emit/FieldToken.cs | 36 ----- .../src/System/Reflection/Emit/MethodToken.cs | 27 ---- .../System/Reflection/Emit/ParameterToken.cs | 31 ----- .../System/Reflection/Emit/PropertyToken.cs | 27 ---- .../System/Reflection/Emit/SignatureToken.cs | 27 ---- .../src/System/Reflection/Emit/StringToken.cs | 28 ---- .../src/System/Reflection/Emit/TypeToken.cs | 27 ---- .../src/MatchingRefApiCompatBaseline.txt | 3 +- .../ref/System.Reflection.Emit.cs | 5 + .../src/MatchingRefApiCompatBaseline.txt | 18 +-- .../MethodBuilderDefineParameter.cs | 5 + .../MethodBuilderGetILGenerator.cs | 12 +- .../TypeBuilder/TypeBuilderCreateType.cs | 8 +- .../TypeBuilder/TypeBuilderDefineField.cs | 12 +- .../tests/MetadataTokenTests.cs | 7 +- .../Emit/ConstructorBuilder.Mono.cs | 9 +- .../Reflection/Emit/EnumBuilder.Mono.cs | 4 +- .../Reflection/Emit/EventBuilder.Mono.cs | 4 - .../Reflection/Emit/FieldBuilder.Mono.cs | 7 +- .../Reflection/Emit/MethodBuilder.Mono.cs | 9 +- .../Reflection/Emit/ModuleBuilder.Mono.cs | 30 ++--- .../Reflection/Emit/ParameterBuilder.Mono.cs | 5 - .../Reflection/Emit/PropertyBuilder.Mono.cs | 4 - .../Reflection/Emit/TypeBuilder.Mono.cs | 8 +- 42 files changed, 267 insertions(+), 544 deletions(-) delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/EventToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/FieldToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/MethodToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/ParameterToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/PropertyToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/SignatureToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/StringToken.cs delete mode 100644 src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/TypeToken.cs diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs index 7313b405bf0ef..1a384d14282cc 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/AssemblyBuilder.cs @@ -595,7 +595,7 @@ private void SetCustomAttributeNoLock(ConstructorInfo con, byte[] binaryAttribut TypeBuilder.DefineCustomAttribute( _manifestModuleBuilder, // pass in the in-memory assembly module AssemblyBuilderData.AssemblyDefToken, - _manifestModuleBuilder.GetConstructorToken(con).Token, + _manifestModuleBuilder.GetConstructorToken(con), binaryAttribute, false, typeof(DebuggableAttribute) == con.DeclaringType); diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.cs index f8405246e7b38..2454864138683 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.cs @@ -23,7 +23,7 @@ internal ConstructorBuilder(string name, MethodAttributes attributes, CallingCon m_methodBuilder.GetMethodSignature().InternalGetSignature(out _); - m_methodBuilder.GetToken(); + int dummy = m_methodBuilder.MetadataToken; } internal ConstructorBuilder(string name, MethodAttributes attributes, CallingConventions callingConvention, @@ -60,7 +60,7 @@ public override string ToString() #endregion #region MemberInfo Overrides - internal int MetadataTokenInternal => m_methodBuilder.MetadataTokenInternal; + public override int MetadataToken => m_methodBuilder.MetadataToken; public override Module Module => m_methodBuilder.Module; @@ -122,11 +122,6 @@ public override bool IsDefined(Type attributeType, bool inherit) #endregion #region Public Members - public MethodToken GetToken() - { - return m_methodBuilder.GetToken(); - } - public ParameterBuilder DefineParameter(int iSequence, ParameterAttributes attributes, string? strParamName) { // Theoretically we shouldn't allow iSequence to be 0 because in reflection ctors don't have diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/CustomAttributeBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/CustomAttributeBuilder.cs index 2754a6e81216f..51487b02a4c0b 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/CustomAttributeBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/CustomAttributeBuilder.cs @@ -527,7 +527,7 @@ private static void EmitValue(BinaryWriter writer, Type type, object? value) // return the byte interpretation of the custom attribute internal void CreateCustomAttribute(ModuleBuilder mod, int tkOwner) { - CreateCustomAttribute(mod, tkOwner, mod.GetConstructorToken(m_con).Token, false); + CreateCustomAttribute(mod, tkOwner, mod.GetConstructorToken(m_con), false); } /// diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs index 4d52ddcb876f8..873979ecb7acf 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.cs @@ -50,7 +50,7 @@ public FieldBuilder DefineLiteral(string literalName, object? literalValue) } // Get the internal metadata token for this class. - public TypeToken TypeToken => m_typeBuilder.TypeToken; + internal int TypeToken => m_typeBuilder.TypeToken; // return the underlying field for the enum diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.cs index 426d0af228877..a66718182a831 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.cs @@ -30,7 +30,7 @@ internal EventBuilder( EventAttributes attr, // event attribute such as Public, Private, and Protected defined above // int eventType, // event type TypeBuilder type, // containing type - EventToken evToken) + int evToken) { m_name = name; m_module = mod; @@ -41,7 +41,7 @@ internal EventBuilder( // Return the Token for this event within the TypeBuilder that the // event is defined within. - public EventToken GetEventToken() + internal int GetEventToken() { return m_evToken; } @@ -57,9 +57,9 @@ private void SetMethodSemantics(MethodBuilder mdBuilder, MethodSemanticsAttribut ModuleBuilder module = m_module; TypeBuilder.DefineMethodSemantics( new QCallModule(ref module), - m_evToken.Token, + m_evToken, semantics, - mdBuilder.GetToken().Token); + mdBuilder.MetadataToken); } public void SetAddOnMethod(MethodBuilder mdBuilder) @@ -94,8 +94,8 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) TypeBuilder.DefineCustomAttribute( m_module, - m_evToken.Token, - m_module.GetConstructorToken(con).Token, + m_evToken, + m_module.GetConstructorToken(con), binaryAttribute, false, false); } @@ -108,12 +108,12 @@ public void SetCustomAttribute(CustomAttributeBuilder customBuilder) throw new ArgumentNullException(nameof(customBuilder)); } m_type.ThrowIfCreated(); - customBuilder.CreateCustomAttribute(m_module, m_evToken.Token); + customBuilder.CreateCustomAttribute(m_module, m_evToken); } // These are package private so that TypeBuilder can access them. private string m_name; // The name of the event - private EventToken m_evToken; // The token of this event + private int m_evToken; // The token of this event private ModuleBuilder m_module; private EventAttributes m_attributes; private TypeBuilder m_type; diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.cs index 3001b3df82de2..c136a2c69368e 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.cs @@ -10,7 +10,6 @@ public sealed class FieldBuilder : FieldInfo { #region Private Data Members private int m_fieldTok; - private FieldToken m_tkField; private TypeBuilder m_typeBuilder; private string m_fieldName; private FieldAttributes m_Attributes; @@ -48,9 +47,7 @@ internal FieldBuilder(TypeBuilder typeBuilder, string fieldName, Type type, ModuleBuilder module = m_typeBuilder.GetModuleBuilder(); m_fieldTok = TypeBuilder.DefineField(new QCallModule(ref module), - typeBuilder.TypeToken.Token, fieldName, signature, sigLength, m_Attributes); - - m_tkField = new FieldToken(m_fieldTok, type); + typeBuilder.TypeToken, fieldName, signature, sigLength, m_Attributes); } #endregion @@ -59,12 +56,12 @@ internal FieldBuilder(TypeBuilder typeBuilder, string fieldName, Type type, internal void SetData(byte[]? data, int size) { ModuleBuilder module = m_typeBuilder.GetModuleBuilder(); - ModuleBuilder.SetFieldRVAContent(new QCallModule(ref module), m_tkField.Token, data, size); + ModuleBuilder.SetFieldRVAContent(new QCallModule(ref module), m_fieldTok, data, size); } #endregion #region MemberInfo Overrides - internal int MetadataTokenInternal => m_fieldTok; + public override int MetadataToken => m_fieldTok; public override Module Module => m_typeBuilder.Module; @@ -140,17 +137,12 @@ public override bool IsDefined(Type attributeType, bool inherit) #endregion #region Public Members - public FieldToken GetToken() - { - return m_tkField; - } - public void SetOffset(int iOffset) { m_typeBuilder.ThrowIfCreated(); ModuleBuilder module = m_typeBuilder.GetModuleBuilder(); - TypeBuilder.SetFieldLayoutOffset(new QCallModule(ref module), GetToken().Token, iOffset); + TypeBuilder.SetFieldLayoutOffset(new QCallModule(ref module), m_fieldTok, iOffset); } public void SetConstant(object? defaultValue) @@ -164,7 +156,7 @@ public void SetConstant(object? defaultValue) throw new ArgumentException(SR.Argument_ConstantNull); } - TypeBuilder.SetConstantValue(m_typeBuilder.GetModuleBuilder(), GetToken().Token, m_fieldType, defaultValue); + TypeBuilder.SetConstantValue(m_typeBuilder.GetModuleBuilder(), m_fieldTok, m_fieldType, defaultValue); } public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) @@ -180,7 +172,7 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) m_typeBuilder.ThrowIfCreated(); TypeBuilder.DefineCustomAttribute(module, - m_tkField.Token, module.GetConstructorToken(con).Token, binaryAttribute, false, false); + m_fieldTok, module.GetConstructorToken(con), binaryAttribute, false, false); } public void SetCustomAttribute(CustomAttributeBuilder customBuilder) @@ -192,7 +184,7 @@ public void SetCustomAttribute(CustomAttributeBuilder customBuilder) ModuleBuilder? module = m_typeBuilder.Module as ModuleBuilder; - customBuilder.CreateCustomAttribute(module!, m_tkField.Token); + customBuilder.CreateCustomAttribute(module!, m_fieldTok); } #endregion diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs index 6ab9f20613bb3..4dc0b22b3b466 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/GenericTypeParameterBuilder.cs @@ -53,7 +53,7 @@ public override bool Equals(object? o) public override bool IsByRefLike => false; - internal int MetadataTokenInternal => m_type.MetadataTokenInternal; + public override int MetadataToken => m_type.MetadataToken; #endregion #region Type Overrides diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs index 43ecc3adcd5a1..acdf1663b80c3 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ILGenerator.cs @@ -542,7 +542,7 @@ public virtual void EmitCalli(OpCode opcode, CallingConventions callingConventio UpdateStackSize(OpCodes.Calli, stackchange); RecordTokenFixup(); - PutInteger4(modBuilder.GetSignatureToken(sig).Token); + PutInteger4(modBuilder.GetSignatureToken(sig)); } public virtual void EmitCalli(OpCode opcode, CallingConvention unmanagedCallConv, Type? returnType, Type[]? parameterTypes) @@ -585,7 +585,7 @@ public virtual void EmitCalli(OpCode opcode, CallingConvention unmanagedCallConv EnsureCapacity(7); Emit(OpCodes.Calli); RecordTokenFixup(); - PutInteger4(modBuilder.GetSignatureToken(sig).Token); + PutInteger4(modBuilder.GetSignatureToken(sig)); } public virtual void EmitCall(OpCode opcode, MethodInfo methodInfo, Type[]? optionalParameterTypes) @@ -630,9 +630,9 @@ public virtual void Emit(OpCode opcode, SignatureHelper signature) int stackchange = 0; ModuleBuilder modBuilder = (ModuleBuilder)m_methodBuilder.Module; - SignatureToken sig = modBuilder.GetSignatureToken(signature); + int sig = modBuilder.GetSignatureToken(signature); - int tempVal = sig.Token; + int tempVal = sig; EnsureCapacity(7); InternalEmit(opcode); @@ -709,13 +709,13 @@ public virtual void Emit(OpCode opcode, Type cls) if (opcode == OpCodes.Ldtoken && cls != null && cls.IsGenericTypeDefinition) { // This gets the token for the generic type definition if cls is one. - tempVal = modBuilder.GetTypeToken(cls).Token; + tempVal = modBuilder.GetTypeToken(cls); } else { // This gets the token for the generic type instantiated on the formal parameters // if cls is a generic type definition. - tempVal = modBuilder.GetTypeTokenInternal(cls!).Token; + tempVal = modBuilder.GetTypeTokenInternal(cls!); } EnsureCapacity(7); @@ -800,7 +800,7 @@ public virtual void Emit(OpCode opcode, Label[] labels) public virtual void Emit(OpCode opcode, FieldInfo field) { ModuleBuilder modBuilder = (ModuleBuilder)m_methodBuilder.Module; - int tempVal = modBuilder.GetFieldToken(field).Token; + int tempVal = modBuilder.GetFieldToken(field); EnsureCapacity(7); InternalEmit(opcode); RecordTokenFixup(); @@ -814,7 +814,7 @@ public virtual void Emit(OpCode opcode, string str) // fixups if the module is persisted to a PE. ModuleBuilder modBuilder = (ModuleBuilder)m_methodBuilder.Module; - int tempVal = modBuilder.GetStringConstant(str).Token; + int tempVal = modBuilder.GetStringConstant(str); EnsureCapacity(7); InternalEmit(opcode); PutInteger4(tempVal); diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.cs index 93b5c5b841f7f..e99c584074c1f 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.cs @@ -16,7 +16,7 @@ public sealed class MethodBuilder : MethodInfo #region Private Data Members // Identity internal string m_strName; // The name of the method - private MethodToken m_tkMethod; // The token of this method + private int m_token; // The token of this method private readonly ModuleBuilder m_module; [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] @@ -206,7 +206,7 @@ internal void CreateMethodBodyHelper(ILGenerator il) int tkExceptionClass = 0; if (catchClass[j] != null) { - tkExceptionClass = dynMod.GetTypeTokenInternal(catchClass[j]).Token; + tkExceptionClass = dynMod.GetTypeTokenInternal(catchClass[j]); } switch (type[j]) @@ -232,7 +232,7 @@ internal void CreateMethodBodyHelper(ILGenerator il) // set the debugging information such as scope and line number // if it is in a debug module // - SymbolToken tk = new SymbolToken(MetadataTokenInternal); + SymbolToken tk = new SymbolToken(MetadataToken); ISymbolWriter symWriter = dynMod.GetSymWriter()!; // call OpenMethod to make this method the current method @@ -287,9 +287,9 @@ internal void ReleaseBakedStructures() } } - internal void SetToken(MethodToken token) + internal void SetToken(int token) { - m_tkMethod = token; + m_token = token; } internal byte[]? GetBody() @@ -435,7 +435,7 @@ public override string ToString() #region MemberInfo Overrides public override string Name => m_strName; - internal int MetadataTokenInternal => GetToken().Token; + public override int MetadataToken => GetToken(); public override Module Module => m_containingType.Module; @@ -560,7 +560,7 @@ public GenericTypeParameterBuilder[] DefineGenericParameters(params string[] nam if (names[i] == null) throw new ArgumentNullException(nameof(names)); - if (m_tkMethod.Token != 0) + if (m_token != 0) throw new InvalidOperationException(SR.InvalidOperation_MethodBuilderBaked); m_bIsGenMethDef = true; @@ -575,7 +575,7 @@ public GenericTypeParameterBuilder[] DefineGenericParameters(params string[] nam #endregion #region Public Members - public MethodToken GetToken() + private int GetToken() { // We used to always "tokenize" a MethodBuilder when it is constructed. After change list 709498 // we only "tokenize" a method when requested. But the order in which the methods are tokenized @@ -587,13 +587,13 @@ public MethodToken GetToken() // I don't fully understand this change. So I will keep the logic and only fix the recursion and // the race condition. - if (m_tkMethod.Token != 0) + if (m_token != 0) { - return m_tkMethod; + return m_token; } MethodBuilder? currentMethod = null; - MethodToken currentToken = new MethodToken(0); + int currentToken = 0; int i; // We need to lock here to prevent a method from being "tokenized" twice. @@ -601,9 +601,9 @@ public MethodToken GetToken() // constructed MethodBuilders to the end of m_listMethods lock (m_containingType.m_listMethods!) { - if (m_tkMethod.Token != 0) + if (m_token != 0) { - return m_tkMethod; + return m_token; } // If m_tkMethod is still 0 when we obtain the lock, m_lastTokenizedMethod must be smaller @@ -621,20 +621,20 @@ public MethodToken GetToken() } Debug.Assert(currentMethod == this, "We should have found this method in m_containingType.m_listMethods"); - Debug.Assert(currentToken.Token != 0, "The token should not be 0"); + Debug.Assert(currentToken != 0, "The token should not be 0"); return currentToken; } - private MethodToken GetTokenNoLock() + private int GetTokenNoLock() { - Debug.Assert(m_tkMethod.Token == 0, "m_tkMethod should not have been initialized"); + Debug.Assert(m_token == 0, "m_token should not have been initialized"); byte[] sigBytes = GetMethodSignature().InternalGetSignature(out int sigLength); ModuleBuilder module = m_module; - int token = TypeBuilder.DefineMethod(new QCallModule(ref module), m_containingType.MetadataTokenInternal, m_strName, sigBytes, sigLength, Attributes); - m_tkMethod = new MethodToken(token); + int token = TypeBuilder.DefineMethod(new QCallModule(ref module), m_containingType.MetadataToken, m_strName, sigBytes, sigLength, Attributes); + m_token = token; if (m_inst != null) foreach (GenericTypeParameterBuilder tb in m_inst) @@ -642,7 +642,7 @@ private MethodToken GetTokenNoLock() TypeBuilder.SetMethodImpl(new QCallModule(ref module), token, m_dwMethodImplFlags); - return m_tkMethod; + return m_token; } public void SetParameters(params Type[] parameterTypes) @@ -665,7 +665,7 @@ public void SetSignature( { // We should throw InvalidOperation_MethodBuilderBaked here if the method signature has been baked. // But we cannot because that would be a breaking change from V2. - if (m_tkMethod.Token != 0) + if (m_token != 0) return; AssemblyBuilder.CheckContext(returnType); @@ -718,7 +718,7 @@ public void SetImplementationFlags(MethodImplAttributes attributes) m_canBeRuntimeImpl = true; ModuleBuilder module = m_module; - TypeBuilder.SetMethodImpl(new QCallModule(ref module), MetadataTokenInternal, attributes); + TypeBuilder.SetMethodImpl(new QCallModule(ref module), MetadataToken, attributes); } public ILGenerator GetILGenerator() @@ -773,8 +773,8 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) ThrowIfGeneric(); - TypeBuilder.DefineCustomAttribute(m_module, MetadataTokenInternal, - ((ModuleBuilder)m_module).GetConstructorToken(con).Token, + TypeBuilder.DefineCustomAttribute(m_module, MetadataToken, + ((ModuleBuilder)m_module).GetConstructorToken(con), binaryAttribute, false, false); @@ -789,7 +789,7 @@ public void SetCustomAttribute(CustomAttributeBuilder customBuilder) ThrowIfGeneric(); - customBuilder.CreateCustomAttribute((ModuleBuilder)m_module, MetadataTokenInternal); + customBuilder.CreateCustomAttribute((ModuleBuilder)m_module, MetadataToken); if (IsKnownCA(customBuilder.m_con)) ParseCA(customBuilder.m_con); diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs index 09a555a1c6c13..6127c59478064 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.cs @@ -245,7 +245,7 @@ private int GetTypeRefNested(Type type, Module? refedModule, string? strRefedMod return GetTypeRef(new QCallModule(ref thisModule), typeName, new QCallModule(ref refedRuntimeModule), strRefedModuleFileName, tkResolution); } - internal MethodToken InternalGetConstructorToken(ConstructorInfo con, bool usingRef) + internal int InternalGetConstructorToken(ConstructorInfo con, bool usingRef) { // Helper to get constructor token. If usingRef is true, we will never use the def token if (con == null) @@ -254,29 +254,29 @@ internal MethodToken InternalGetConstructorToken(ConstructorInfo con, bool using } int tr; - int mr = 0; + int mr; if (con is ConstructorBuilder conBuilder) { if (!usingRef && conBuilder.Module.Equals(this)) - return conBuilder.GetToken(); + return conBuilder.MetadataToken; // constructor is defined in a different module - tr = GetTypeTokenInternal(con.ReflectedType!).Token; - mr = GetMemberRef(con.ReflectedType!.Module, tr, conBuilder.GetToken().Token); + tr = GetTypeTokenInternal(con.ReflectedType!); + mr = GetMemberRef(con.ReflectedType!.Module, tr, conBuilder.MetadataToken); } else if (con is ConstructorOnTypeBuilderInstantiation conOnTypeBuilderInst) { if (usingRef) throw new InvalidOperationException(); - tr = GetTypeTokenInternal(con.DeclaringType!).Token; - mr = GetMemberRef(con.DeclaringType!.Module, tr, conOnTypeBuilderInst.MetadataTokenInternal); + tr = GetTypeTokenInternal(con.DeclaringType!); + mr = GetMemberRef(con.DeclaringType!.Module, tr, conOnTypeBuilderInst.MetadataToken); } else if (con is RuntimeConstructorInfo rtCon && !con.ReflectedType!.IsArray) { // constructor is not a dynamic field // We need to get the TypeRef tokens - tr = GetTypeTokenInternal(con.ReflectedType).Token; + tr = GetTypeTokenInternal(con.ReflectedType); mr = GetMemberRefOfMethodInfo(tr, rtCon); } else @@ -305,14 +305,14 @@ internal MethodToken InternalGetConstructorToken(ConstructorInfo con, bool using optionalCustomModifiers[i] = parameters[i].GetOptionalCustomModifiers(); } - tr = GetTypeTokenInternal(con.ReflectedType!).Token; + tr = GetTypeTokenInternal(con.ReflectedType!); SignatureHelper sigHelp = SignatureHelper.GetMethodSigHelper(this, con.CallingConvention, null, null, null, parameterTypes, requiredCustomModifiers, optionalCustomModifiers); byte[] sigBytes = sigHelp.InternalGetSignature(out int length); mr = GetMemberRefFromSignature(tr, con.Name, sigBytes, length); } - return new MethodToken(mr); + return mr; } internal void Init(string strModuleName) @@ -401,15 +401,15 @@ private int GetMemberRefToken(MethodBase method, Type[]? optionalParameterTypes) else if (!method.Module.Equals(this)) { // Use typeRef as parent because the method's declaringType lives in a different assembly - tkParent = GetTypeToken(method.DeclaringType).Token; + tkParent = GetTypeToken(method.DeclaringType); } else { // Use methodDef as parent because the method lives in this assembly and its declaringType has no generic arguments if (masmi != null) - tkParent = GetMethodToken(masmi).Token; + tkParent = GetMethodToken(masmi); else - tkParent = GetConstructorToken((method as ConstructorInfo)!).Token; + tkParent = GetConstructorToken((method as ConstructorInfo)!); } return GetMemberRefFromSignature(tkParent, method.Name, sigBytes, sigLength); @@ -1065,12 +1065,12 @@ private FieldBuilder DefineUninitializedDataNoLock(string name, int size, FieldA // 1. GetTypeToken // 2. ldtoken (see ILGenerator) // For all other occasions we should return the generic type instantiated on its formal parameters. - internal TypeToken GetTypeTokenInternal(Type type) + internal int GetTypeTokenInternal(Type type) { return GetTypeTokenInternal(type, getGenericDefinition: false); } - private TypeToken GetTypeTokenInternal(Type type, bool getGenericDefinition) + private int GetTypeTokenInternal(Type type, bool getGenericDefinition) { lock (SyncRoot) { @@ -1078,12 +1078,12 @@ private TypeToken GetTypeTokenInternal(Type type, bool getGenericDefinition) } } - public TypeToken GetTypeToken(Type type) + internal int GetTypeToken(Type type) { return GetTypeTokenInternal(type, getGenericDefinition: true); } - private TypeToken GetTypeTokenWorkerNoLock(Type type, bool getGenericDefinition) + private int GetTypeTokenWorkerNoLock(Type type, bool getGenericDefinition) { if (type == null) { @@ -1112,7 +1112,7 @@ private TypeToken GetTypeTokenWorkerNoLock(Type type, bool getGenericDefinition) type.IsPointer) { byte[] sig = SignatureHelper.GetTypeSigToken(this, type).InternalGetSignature(out int length); - return new TypeToken(GetTokenFromTypeSpec(sig, length)); + return GetTokenFromTypeSpec(sig, length); } Module refedModule = type.Module; @@ -1132,10 +1132,10 @@ private TypeToken GetTypeTokenWorkerNoLock(Type type, bool getGenericDefinition) } else if (type is GenericTypeParameterBuilder paramBuilder) { - return new TypeToken(paramBuilder.MetadataTokenInternal); + return paramBuilder.MetadataToken; } - return new TypeToken(GetTypeRefNested(type, this, string.Empty)); + return GetTypeRefNested(type, this, string.Empty); } // After this point, the referenced module is not the same as the referencing @@ -1158,10 +1158,10 @@ private TypeToken GetTypeTokenWorkerNoLock(Type type, bool getGenericDefinition) referencedModuleFileName = refedModuleBuilder._moduleData._moduleName; } - return new TypeToken(GetTypeRefNested(type, refedModule, referencedModuleFileName)); + return GetTypeRefNested(type, refedModule, referencedModuleFileName); } - public TypeToken GetTypeToken(string name) + internal int GetTypeToken(string name) { // Return a token for the class relative to the Module. // Module.GetType() verifies name @@ -1172,15 +1172,7 @@ public TypeToken GetTypeToken(string name) return GetTypeToken(InternalModule.GetType(name, false, true)!); } - public MethodToken GetMethodToken(MethodInfo method) - { - lock (SyncRoot) - { - return GetMethodTokenNoLock(method, true); - } - } - - internal MethodToken GetMethodTokenInternal(MethodInfo method) + internal int GetMethodToken(MethodInfo method) { lock (SyncRoot) { @@ -1192,7 +1184,7 @@ internal MethodToken GetMethodTokenInternal(MethodInfo method) // 1. GetMethodToken // 2. ldtoken (see ILGenerator) // For all other occasions we should return the method on the generic type instantiated on the formal parameters. - private MethodToken GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeDefinition) + private int GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeDefinition) { // Return a MemberRef token if MethodInfo is not defined in this module. Or // return the MethodDef token. @@ -1206,10 +1198,10 @@ private MethodToken GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeD if (method is MethodBuilder methBuilder) { - int methodToken = methBuilder.MetadataTokenInternal; + int methodToken = methBuilder.MetadataToken; if (method.Module.Equals(this)) { - return new MethodToken(methodToken); + return methodToken; } if (method.DeclaringType == null) @@ -1218,17 +1210,17 @@ private MethodToken GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeD } // method is defined in a different module - tr = getGenericTypeDefinition ? GetTypeToken(method.DeclaringType).Token : GetTypeTokenInternal(method.DeclaringType).Token; + tr = getGenericTypeDefinition ? GetTypeToken(method.DeclaringType) : GetTypeTokenInternal(method.DeclaringType); mr = GetMemberRef(method.DeclaringType.Module, tr, methodToken); } else if (method is MethodOnTypeBuilderInstantiation) { - return new MethodToken(GetMemberRefToken(method, null)); + return GetMemberRefToken(method, null); } else if (method is SymbolMethod symMethod) { if (symMethod.GetModule() == this) - return symMethod.GetToken(); + return symMethod.MetadataToken; // form the method token return symMethod.GetToken(this); @@ -1257,7 +1249,7 @@ private MethodToken GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeD } else if (method is RuntimeMethodInfo rtMeth) { - tr = getGenericTypeDefinition ? GetTypeToken(declaringType).Token : GetTypeTokenInternal(declaringType).Token; + tr = getGenericTypeDefinition ? GetTypeToken(declaringType) : GetTypeTokenInternal(declaringType); mr = GetMemberRefOfMethodInfo(tr, rtMeth); } else @@ -1277,7 +1269,7 @@ private MethodToken GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeD optionalCustomModifiers[i] = parameters[i].GetOptionalCustomModifiers(); } - tr = getGenericTypeDefinition ? GetTypeToken(declaringType).Token : GetTypeTokenInternal(declaringType).Token; + tr = getGenericTypeDefinition ? GetTypeToken(declaringType) : GetTypeTokenInternal(declaringType); SignatureHelper sigHelp; @@ -1299,7 +1291,7 @@ private MethodToken GetMethodTokenNoLock(MethodInfo method, bool getGenericTypeD } } - return new MethodToken(mr); + return mr; } internal int GetMethodTokenInternal(MethodBase method, Type[]? optionalParameterTypes, bool useMethodDef) @@ -1328,7 +1320,7 @@ internal int GetMethodTokenInternal(MethodBase method, Type[]? optionalParameter } else { - tk = GetMethodTokenInternal(methodInfoUnbound).Token; + tk = GetMethodToken(methodInfoUnbound); } // For Ldtoken, Ldftn, and Ldvirtftn, we should emit the method def/ref token for a generic method definition. @@ -1351,11 +1343,11 @@ internal int GetMethodTokenInternal(MethodBase method, Type[]? optionalParameter { if (methodInfo != null) { - tk = GetMethodTokenInternal(methodInfo).Token; + tk = GetMethodToken(methodInfo); } else { - tk = GetConstructorToken((method as ConstructorInfo)!).Token; + tk = GetConstructorToken((method as ConstructorInfo)!); } } else @@ -1367,7 +1359,7 @@ internal int GetMethodTokenInternal(MethodBase method, Type[]? optionalParameter return tk; } - public MethodToken GetArrayMethodToken(Type arrayClass, string methodName, CallingConventions callingConvention, + internal int GetArrayMethodToken(Type arrayClass, string methodName, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes) { lock (SyncRoot) @@ -1376,7 +1368,7 @@ public MethodToken GetArrayMethodToken(Type arrayClass, string methodName, Calli } } - private MethodToken GetArrayMethodTokenNoLock(Type arrayClass, string methodName, CallingConventions callingConvention, + private int GetArrayMethodTokenNoLock(Type arrayClass, string methodName, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes) { if (arrayClass == null) @@ -1404,11 +1396,11 @@ private MethodToken GetArrayMethodTokenNoLock(Type arrayClass, string methodName SignatureHelper sigHelp = SignatureHelper.GetMethodSigHelper( this, callingConvention, returnType, null, null, parameterTypes, null, null); byte[] sigBytes = sigHelp.InternalGetSignature(out int length); - TypeToken typeSpec = GetTypeTokenInternal(arrayClass); + int typeSpec = GetTypeTokenInternal(arrayClass); ModuleBuilder thisModule = this; - return new MethodToken(GetArrayMethodToken(new QCallModule(ref thisModule), - typeSpec.Token, methodName, sigBytes, length)); + return GetArrayMethodToken(new QCallModule(ref thisModule), + typeSpec, methodName, sigBytes, length); } public MethodInfo GetArrayMethod(Type arrayClass, string methodName, CallingConventions callingConvention, @@ -1422,18 +1414,18 @@ public MethodInfo GetArrayMethod(Type arrayClass, string methodName, CallingConv // method that takes an array of the type as a parameter. In order to access the elements of the array, // you will need to call methods of the Array class. - MethodToken token = GetArrayMethodToken(arrayClass, methodName, callingConvention, returnType, parameterTypes); + int token = GetArrayMethodToken(arrayClass, methodName, callingConvention, returnType, parameterTypes); return new SymbolMethod(this, token, arrayClass, methodName, callingConvention, returnType, parameterTypes); } - public MethodToken GetConstructorToken(ConstructorInfo con) + internal int GetConstructorToken(ConstructorInfo con) { // Return a token for the ConstructorInfo relative to the Module. return InternalGetConstructorToken(con, false); } - public FieldToken GetFieldToken(FieldInfo field) + internal int GetFieldToken(FieldInfo field) { lock (SyncRoot) { @@ -1441,7 +1433,7 @@ public FieldToken GetFieldToken(FieldInfo field) } } - private FieldToken GetFieldTokenNoLock(FieldInfo field) + private int GetFieldTokenNoLock(FieldInfo field) { if (field == null) { @@ -1457,12 +1449,12 @@ private FieldToken GetFieldTokenNoLock(FieldInfo field) { byte[] sig = SignatureHelper.GetTypeSigToken(this, field.DeclaringType).InternalGetSignature(out int length); tr = GetTokenFromTypeSpec(sig, length); - mr = GetMemberRef(this, tr, fdBuilder.GetToken().Token); + mr = GetMemberRef(this, tr, fdBuilder.MetadataToken); } else if (fdBuilder.Module.Equals(this)) { // field is defined in the same module - return fdBuilder.GetToken(); + return fdBuilder.MetadataToken; } else { @@ -1471,8 +1463,8 @@ private FieldToken GetFieldTokenNoLock(FieldInfo field) { throw new InvalidOperationException(SR.InvalidOperation_CannotImportGlobalFromDifferentModule); } - tr = GetTypeTokenInternal(field.DeclaringType).Token; - mr = GetMemberRef(field.ReflectedType!.Module, tr, fdBuilder.GetToken().Token); + tr = GetTypeTokenInternal(field.DeclaringType); + mr = GetMemberRef(field.ReflectedType!.Module, tr, fdBuilder.MetadataToken); } } else if (field is RuntimeFieldInfo rtField) @@ -1492,7 +1484,7 @@ private FieldToken GetFieldTokenNoLock(FieldInfo field) } else { - tr = GetTypeTokenInternal(field.DeclaringType!).Token; + tr = GetTypeTokenInternal(field.DeclaringType!); mr = GetMemberRefOfFieldInfo(tr, field.DeclaringType!.GetTypeHandleInternal(), rtField); } } @@ -1501,12 +1493,12 @@ private FieldToken GetFieldTokenNoLock(FieldInfo field) FieldInfo fb = fOnTB.FieldInfo; byte[] sig = SignatureHelper.GetTypeSigToken(this, field.DeclaringType!).InternalGetSignature(out int length); tr = GetTokenFromTypeSpec(sig, length); - mr = GetMemberRef(fb.ReflectedType!.Module, tr, fOnTB.MetadataTokenInternal); + mr = GetMemberRef(fb.ReflectedType!.Module, tr, fOnTB.MetadataToken); } else { // user defined FieldInfo - tr = GetTypeTokenInternal(field.ReflectedType!).Token; + tr = GetTypeTokenInternal(field.ReflectedType!); SignatureHelper sigHelp = SignatureHelper.GetFieldSigHelper(this); @@ -1516,10 +1508,10 @@ private FieldToken GetFieldTokenNoLock(FieldInfo field) mr = GetMemberRefFromSignature(tr, field.Name, sigBytes, length); } - return new FieldToken(mr, field.GetType()); + return mr; } - public StringToken GetStringConstant(string str) + internal int GetStringConstant(string str) { if (str == null) { @@ -1529,10 +1521,10 @@ public StringToken GetStringConstant(string str) // Returns a token representing a String constant. If the string // value has already been defined, the existing token will be returned. ModuleBuilder thisModule = this; - return new StringToken(GetStringConstant(new QCallModule(ref thisModule), str, str.Length)); + return GetStringConstant(new QCallModule(ref thisModule), str, str.Length); } - public SignatureToken GetSignatureToken(SignatureHelper sigHelper) + internal int GetSignatureToken(SignatureHelper sigHelper) { // Define signature token given a signature helper. This will define a metadata // token for the signature described by SignatureHelper. @@ -1544,10 +1536,10 @@ public SignatureToken GetSignatureToken(SignatureHelper sigHelper) // get the signature in byte form byte[] sigBytes = sigHelper.InternalGetSignature(out int sigLength); ModuleBuilder thisModule = this; - return new SignatureToken(TypeBuilder.GetTokenFromSig(new QCallModule(ref thisModule), sigBytes, sigLength)); + return TypeBuilder.GetTokenFromSig(new QCallModule(ref thisModule), sigBytes, sigLength); } - public SignatureToken GetSignatureToken(byte[] sigBytes, int sigLength) + internal int GetSignatureToken(byte[] sigBytes, int sigLength) { if (sigBytes == null) { @@ -1558,7 +1550,7 @@ public SignatureToken GetSignatureToken(byte[] sigBytes, int sigLength) Buffer.BlockCopy(sigBytes, 0, localSigBytes, 0, sigBytes.Length); ModuleBuilder thisModule = this; - return new SignatureToken(TypeBuilder.GetTokenFromSig(new QCallModule(ref thisModule), localSigBytes, sigLength)); + return TypeBuilder.GetTokenFromSig(new QCallModule(ref thisModule), localSigBytes, sigLength); } #endregion @@ -1579,7 +1571,7 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) TypeBuilder.DefineCustomAttribute( this, 1, // This is hard coding the module token to 1 - GetConstructorToken(con).Token, + GetConstructorToken(con), binaryAttribute, false, false); } diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.cs index e50546e54bfce..661bb8eddf6d3 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.cs @@ -12,7 +12,7 @@ public virtual void SetConstant(object? defaultValue) { TypeBuilder.SetConstantValue( _methodBuilder.GetModuleBuilder(), - _token.Token, + _token, _position == 0 ? _methodBuilder.ReturnType : _methodBuilder.m_parameterTypes![_position - 1], defaultValue); } @@ -31,8 +31,8 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) TypeBuilder.DefineCustomAttribute( _methodBuilder.GetModuleBuilder(), - _token.Token, - ((ModuleBuilder)_methodBuilder.GetModule()).GetConstructorToken(con).Token, + _token, + ((ModuleBuilder)_methodBuilder.GetModule()).GetConstructorToken(con), binaryAttribute, false, false); } @@ -44,7 +44,7 @@ public void SetCustomAttribute(CustomAttributeBuilder customBuilder) { throw new ArgumentNullException(nameof(customBuilder)); } - customBuilder.CreateCustomAttribute((ModuleBuilder)(_methodBuilder.GetModule()), _token.Token); + customBuilder.CreateCustomAttribute((ModuleBuilder)(_methodBuilder.GetModule()), _token); } internal ParameterBuilder( @@ -58,15 +58,15 @@ internal ParameterBuilder( _methodBuilder = methodBuilder; _attributes = attributes; ModuleBuilder module = _methodBuilder.GetModuleBuilder(); - _token = new ParameterToken(TypeBuilder.SetParamInfo( + _token = TypeBuilder.SetParamInfo( new QCallModule(ref module), - _methodBuilder.GetToken().Token, + _methodBuilder.MetadataToken, sequence, attributes, - paramName)); + paramName); } - public virtual ParameterToken GetToken() + internal int GetToken() { return _token; } @@ -87,6 +87,6 @@ public virtual ParameterToken GetToken() private readonly int _position; private readonly ParameterAttributes _attributes; private MethodBuilder _methodBuilder; - private ParameterToken _token; + private int _token; } } diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.cs index 76b14a4cf813c..4151db895be04 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.cs @@ -26,12 +26,12 @@ public sealed class PropertyBuilder : PropertyInfo // Constructs a PropertyBuilder. // internal PropertyBuilder( - ModuleBuilder mod, // the module containing this PropertyBuilder - string name, // property name - SignatureHelper sig, // property signature descriptor info - PropertyAttributes attr, // property attribute such as DefaultProperty, Bindable, DisplayBind, etc - Type returnType, // return type of the property. - PropertyToken prToken, // the metadata token for this property + ModuleBuilder mod, // the module containing this PropertyBuilder + string name, // property name + SignatureHelper sig, // property signature descriptor info + PropertyAttributes attr, // property attribute such as DefaultProperty, Bindable, DisplayBind, etc + Type returnType, // return type of the property. + int prToken, // the metadata token for this property TypeBuilder containingType) // the containing type { if (name == null) @@ -43,11 +43,9 @@ internal PropertyBuilder( m_name = name; m_moduleBuilder = mod; - m_signature = sig; m_attributes = attr; m_returnType = returnType; - m_prToken = prToken; - m_tkProperty = prToken.Token; + m_tkProperty = prToken; m_containingType = containingType; } @@ -60,7 +58,7 @@ public void SetConstant(object? defaultValue) TypeBuilder.SetConstantValue( m_moduleBuilder, - m_prToken.Token, + m_tkProperty, m_returnType, defaultValue); } @@ -68,7 +66,7 @@ public void SetConstant(object? defaultValue) // Return the Token for this property within the TypeBuilder that the // property is defined within. - public PropertyToken PropertyToken => m_prToken; + internal int PropertyToken => m_tkProperty; public override Module Module => m_containingType.Module; @@ -83,9 +81,9 @@ private void SetMethodSemantics(MethodBuilder mdBuilder, MethodSemanticsAttribut ModuleBuilder module = m_moduleBuilder; TypeBuilder.DefineMethodSemantics( new QCallModule(ref module), - m_prToken.Token, + m_tkProperty, semantics, - mdBuilder.GetToken().Token); + mdBuilder.MetadataToken); } public void SetGetMethod(MethodBuilder mdBuilder) @@ -117,8 +115,8 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) m_containingType.ThrowIfCreated(); TypeBuilder.DefineCustomAttribute( m_moduleBuilder, - m_prToken.Token, - m_moduleBuilder.GetConstructorToken(con).Token, + m_tkProperty, + m_moduleBuilder.GetConstructorToken(con), binaryAttribute, false, false); } @@ -131,7 +129,7 @@ public void SetCustomAttribute(CustomAttributeBuilder customBuilder) throw new ArgumentNullException(nameof(customBuilder)); } m_containingType.ThrowIfCreated(); - customBuilder.CreateCustomAttribute(m_moduleBuilder, m_prToken.Token); + customBuilder.CreateCustomAttribute(m_moduleBuilder, m_tkProperty); } // Not supported functions in dynamic module. @@ -221,13 +219,11 @@ public override bool IsDefined(Type attributeType, bool inherit) public override Type? ReflectedType => m_containingType; // These are package private so that TypeBuilder can access them. - private string m_name; // The name of the property - private PropertyToken m_prToken; // The token of this property - private int m_tkProperty; + private string m_name; // The name of the property + private int m_tkProperty; // The token of this property private ModuleBuilder m_moduleBuilder; - private SignatureHelper m_signature; - private PropertyAttributes m_attributes; // property's attribute flags - private Type m_returnType; // property's return type + private PropertyAttributes m_attributes; // property's attribute flags + private Type m_returnType; // property's return type private MethodInfo? m_getMethod; private MethodInfo? m_setMethod; private TypeBuilder m_containingType; diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SignatureHelper.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SignatureHelper.cs index fc17ba8391c30..1dd65bffeb023 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SignatureHelper.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SignatureHelper.cs @@ -301,7 +301,7 @@ private void AddOneArgTypeHelper(Type clsArgument, Type[]? requiredCustomModifie AddElementType(CorElementType.ELEMENT_TYPE_CMOD_OPT); - int token = m_module!.GetTypeToken(t).Token; + int token = m_module!.GetTypeToken(t); Debug.Assert(!MetadataToken.IsNullToken(token)); AddToken(token); } @@ -324,7 +324,7 @@ private void AddOneArgTypeHelper(Type clsArgument, Type[]? requiredCustomModifie AddElementType(CorElementType.ELEMENT_TYPE_CMOD_REQD); - int token = m_module!.GetTypeToken(t).Token; + int token = m_module!.GetTypeToken(t); Debug.Assert(!MetadataToken.IsNullToken(token)); AddToken(token); } @@ -361,7 +361,7 @@ private void AddOneArgTypeHelperWorker(Type clsArgument, bool lastWasGenericInst else if (clsArgument is TypeBuilder) { TypeBuilder clsBuilder = (TypeBuilder)clsArgument; - TypeToken tkType; + int tkType; if (clsBuilder.Module.Equals(m_module)) { @@ -384,7 +384,7 @@ private void AddOneArgTypeHelperWorker(Type clsArgument, bool lastWasGenericInst else if (clsArgument is EnumBuilder) { TypeBuilder clsBuilder = ((EnumBuilder)clsArgument).m_typeBuilder; - TypeToken tkType; + int tkType; if (clsBuilder.Module.Equals(m_module)) { @@ -545,11 +545,11 @@ private void AddToken(int token) AddData(rid); } - private void InternalAddTypeToken(TypeToken clsToken, CorElementType CorType) + private void InternalAddTypeToken(int clsToken, CorElementType CorType) { // Add a type token into signature. CorType will be either CorElementType.ELEMENT_TYPE_CLASS or CorElementType.ELEMENT_TYPE_VALUETYPE AddElementType(CorType); - AddToken(clsToken.Token); + AddToken(clsToken); } private unsafe void InternalAddRuntimeType(Type type) diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SymbolMethod.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SymbolMethod.cs index 0eb874a7b1f13..9e9aab8fcac4b 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SymbolMethod.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/SymbolMethod.cs @@ -13,13 +13,12 @@ internal sealed class SymbolMethod : MethodInfo private string m_name; private CallingConventions m_callingConvention; private Type m_returnType; - private MethodToken m_mdMethod; + private int m_token; private Type[] m_parameterTypes; - private SignatureHelper m_signature; #endregion #region Constructor - internal SymbolMethod(ModuleBuilder mod, MethodToken token, Type arrayClass, string methodName, + internal SymbolMethod(ModuleBuilder mod, int token, Type arrayClass, string methodName, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes) { // This is a kind of MethodInfo to represent methods for array type of unbaked type @@ -29,7 +28,7 @@ internal SymbolMethod(ModuleBuilder mod, MethodToken token, Type arrayClass, str // passed into it is this MethodToken. The MethodToken was forged using a TypeSpec for an Array type and // the name of the method on Array. // As none of the methods on Array have CustomModifiers their is no need to pass those around in here. - m_mdMethod = token; + m_token = token; // The ParameterTypes are also a bit interesting in that they may be unbaked TypeBuilders. m_returnType = returnType ?? typeof(void); @@ -48,7 +47,8 @@ internal SymbolMethod(ModuleBuilder mod, MethodToken token, Type arrayClass, str m_name = methodName; m_callingConvention = callingConvention; - m_signature = SignatureHelper.GetMethodSigHelper( + // Validate signature + SignatureHelper.GetMethodSigHelper( mod, callingConvention, returnType, null, null, parameterTypes, null, null); } #endregion @@ -59,7 +59,7 @@ internal override Type[] GetParameterTypes() return m_parameterTypes; } - internal MethodToken GetToken(ModuleBuilder mod) + internal int GetToken(ModuleBuilder mod) { return mod.GetArrayMethodToken(m_containingType, m_name, m_callingConvention, m_returnType, m_parameterTypes); } @@ -135,11 +135,6 @@ public Module GetModule() return m_module; } - public MethodToken GetToken() - { - return m_mdMethod; - } - #endregion } } diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs index 7ae71d92bffcc..d485dc69c1cc4 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.cs @@ -50,7 +50,7 @@ public void Bake(ModuleBuilder module, int token) if (m_customBuilder == null) { Debug.Assert(m_con != null); - DefineCustomAttribute(module, token, module.GetConstructorToken(m_con).Token, + DefineCustomAttribute(module, token, module.GetConstructorToken(m_con), m_binaryAttribute, false, false); } else @@ -394,7 +394,7 @@ internal static unsafe void SetConstantValue(ModuleBuilder module, int tk, Type #region Private Data Members private List? m_ca; - private TypeToken m_tdType; + private int m_tdType; private readonly ModuleBuilder m_module; private readonly string? m_strName; private readonly string? m_strNameSpace; @@ -432,7 +432,7 @@ internal static unsafe void SetConstantValue(ModuleBuilder module, int tk, Type // ctor for the global (module) type internal TypeBuilder(ModuleBuilder module) { - m_tdType = new TypeToken((int)MetadataTokenType.TypeDef); + m_tdType = ((int)MetadataTokenType.TypeDef); m_isHiddenGlobalType = true; m_module = module; m_listMethods = new List(); @@ -514,7 +514,7 @@ internal TypeBuilder( interfaceTokens = new int[interfaces.Length + 1]; for (i = 0; i < interfaces.Length; i++) { - interfaceTokens[i] = m_module.GetTypeTokenInternal(interfaces[i]).Token; + interfaceTokens[i] = m_module.GetTypeTokenInternal(interfaces[i]); } } @@ -545,21 +545,21 @@ internal TypeBuilder( int tkParent = 0; if (m_typeParent != null) - tkParent = m_module.GetTypeTokenInternal(m_typeParent).Token; + tkParent = m_module.GetTypeTokenInternal(m_typeParent); int tkEnclosingType = 0; if (enclosingType != null) { - tkEnclosingType = enclosingType.m_tdType.Token; + tkEnclosingType = enclosingType.m_tdType; } - m_tdType = new TypeToken(DefineType(new QCallModule(ref module), - fullname, tkParent, m_iAttr, tkEnclosingType, interfaceTokens!)); + m_tdType = DefineType(new QCallModule(ref module), + fullname, tkParent, m_iAttr, tkEnclosingType, interfaceTokens!); m_iPackingSize = iPackingSize; m_iTypeSize = iTypeSize; if ((m_iPackingSize != 0) || (m_iTypeSize != 0)) - SetClassLayout(new QCallModule(ref module), m_tdType.Token, m_iPackingSize, m_iTypeSize); + SetClassLayout(new QCallModule(ref module), m_tdType, m_iPackingSize, m_iTypeSize); m_module.AddType(FullName!, this); } @@ -728,7 +728,7 @@ public override string ToString() public override bool IsByRefLike => false; - internal int MetadataTokenInternal => m_tdType.Token; + public override int MetadataToken => m_tdType; #endregion @@ -1225,11 +1225,11 @@ private void DefineMethodOverrideNoLock(MethodInfo methodInfoBody, MethodInfo me // Loader restriction: body method has to be from this class throw new ArgumentException(SR.ArgumentException_BadMethodImplBody); - MethodToken tkBody = m_module.GetMethodTokenInternal(methodInfoBody); - MethodToken tkDecl = m_module.GetMethodTokenInternal(methodInfoDeclaration); + int tkBody = m_module.GetMethodToken(methodInfoBody); + int tkDecl = m_module.GetMethodToken(methodInfoDeclaration); ModuleBuilder module = m_module; - DefineMethodImpl(new QCallModule(ref module), m_tdType.Token, tkBody.Token, tkDecl.Token); + DefineMethodImpl(new QCallModule(ref module), m_tdType, tkBody, tkDecl); } public MethodBuilder DefineMethod(string name, MethodAttributes attributes, Type? returnType, Type[]? parameterTypes) @@ -1399,7 +1399,7 @@ private MethodBuilder DefinePInvokeMethodHelper( } m_listMethods.Add(method); - MethodToken token = method.GetToken(); + int token = method.MetadataToken; int linkFlags = 0; switch (nativeCallConv) @@ -1440,8 +1440,9 @@ private MethodBuilder DefinePInvokeMethodHelper( SetPInvokeData(new QCallModule(ref module), dllName, importName, - token.Token, + token, linkFlags); + method.SetToken(token); return method; @@ -1792,13 +1793,13 @@ private PropertyBuilder DefinePropertyNoLock(string name, PropertyAttributes att ModuleBuilder module = m_module; - PropertyToken prToken = new PropertyToken(DefineProperty( + int prToken = DefineProperty( new QCallModule(ref module), - m_tdType.Token, + m_tdType, name, attributes, sigBytes, - sigLength)); + sigLength); // create the property builder now. return new PropertyBuilder( @@ -1829,22 +1830,22 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, throw new ArgumentException(SR.Argument_IllegalName, nameof(name)); int tkType; - EventToken evToken; + int evToken; AssemblyBuilder.CheckContext(eventtype); ThrowIfCreated(); - tkType = m_module.GetTypeTokenInternal(eventtype).Token; + tkType = m_module.GetTypeTokenInternal(eventtype); // Internal helpers to define property records ModuleBuilder module = m_module; - evToken = new EventToken(DefineEvent( + evToken = DefineEvent( new QCallModule(ref module), - m_tdType.Token, + m_tdType, name, attributes, - tkType)); + tkType); // create the property builder now. return new EventBuilder( @@ -1886,12 +1887,12 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, int[] interfaceTokens = new int[m_typeInterfaces.Count]; for (int i = 0; i < m_typeInterfaces.Count; i++) { - interfaceTokens[i] = m_module.GetTypeTokenInternal(m_typeInterfaces[i]).Token; + interfaceTokens[i] = m_module.GetTypeTokenInternal(m_typeInterfaces[i]); } int tkParent = 0; if (m_typeParent != null) - tkParent = m_module.GetTypeTokenInternal(m_typeParent).Token; + tkParent = m_module.GetTypeTokenInternal(m_typeParent); ModuleBuilder module = m_module; @@ -1911,17 +1912,17 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, for (int i = 0; i < m_typeInterfaces.Count; i++) { - constraints[i] = m_module.GetTypeTokenInternal(m_typeInterfaces[i]).Token; + constraints[i] = m_module.GetTypeTokenInternal(m_typeInterfaces[i]); } - int declMember = m_declMeth == null ? m_DeclaringType!.m_tdType.Token : m_declMeth.GetToken().Token; - m_tdType = new TypeToken(DefineGenericParam(new QCallModule(ref module), - m_strName!, declMember, m_genParamAttributes, m_genParamPos, constraints)); + int declMember = m_declMeth == null ? m_DeclaringType!.m_tdType : m_declMeth.MetadataToken; + m_tdType = DefineGenericParam(new QCallModule(ref module), + m_strName!, declMember, m_genParamAttributes, m_genParamPos, constraints); if (m_ca != null) { foreach (CustAttr ca in m_ca) - ca.Bake(m_module, MetadataTokenInternal); + ca.Bake(m_module, MetadataToken); } m_hasBeenCreated = true; @@ -1933,9 +1934,9 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, else { // Check for global typebuilder - if (((m_tdType.Token & 0x00FFFFFF) != 0) && ((tkParent & 0x00FFFFFF) != 0)) + if (((m_tdType & 0x00FFFFFF) != 0) && ((tkParent & 0x00FFFFFF) != 0)) { - SetParentType(new QCallModule(ref module), m_tdType.Token, tkParent); + SetParentType(new QCallModule(ref module), m_tdType, tkParent); } if (m_inst != null) @@ -1964,7 +1965,9 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, MethodBuilder meth = m_listMethods[i]; if (meth.IsGenericMethodDefinition) - meth.GetToken(); // Doubles as "CreateMethod" for MethodBuilder -- analogous to CreateType() + { + int dummy = meth.MetadataToken; // Doubles as "CreateMethod" for MethodBuilder -- analogous to CreateType() + } MethodAttributes methodAttrs = meth.Attributes; @@ -2018,7 +2021,7 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, ExceptionHandler[]? exceptions = meth.GetExceptionHandlers(); int[]? tokenFixups = meth.GetTokenFixups(); - SetMethodIL(new QCallModule(ref module), meth.GetToken().Token, meth.InitLocals, + SetMethodIL(new QCallModule(ref module), meth.MetadataToken, meth.InitLocals, body, (body != null) ? body.Length : 0, localSig, sigLength, maxStack, exceptions, (exceptions != null) ? exceptions.Length : 0, @@ -2036,7 +2039,7 @@ private EventBuilder DefineEventNoLock(string name, EventAttributes attributes, // Terminate the process. RuntimeType? cls = null; - TermCreateClass(new QCallModule(ref module), m_tdType.Token, ObjectHandleOnStack.Create(ref cls)); + TermCreateClass(new QCallModule(ref module), m_tdType, ObjectHandleOnStack.Create(ref cls)); if (!m_isHiddenGlobalType) { @@ -2104,14 +2107,14 @@ public void AddInterfaceImplementation([DynamicallyAccessedMembers(DynamicallyAc ThrowIfCreated(); - TypeToken tkInterface = m_module.GetTypeTokenInternal(interfaceType); + int tkInterface = m_module.GetTypeTokenInternal(interfaceType); ModuleBuilder module = m_module; - AddInterfaceImpl(new QCallModule(ref module), m_tdType.Token, tkInterface.Token); + AddInterfaceImpl(new QCallModule(ref module), m_tdType, tkInterface); m_typeInterfaces!.Add(interfaceType); } - public TypeToken TypeToken + internal int TypeToken { get { @@ -2130,7 +2133,7 @@ public void SetCustomAttribute(ConstructorInfo con, byte[] binaryAttribute) if (binaryAttribute == null) throw new ArgumentNullException(nameof(binaryAttribute)); - DefineCustomAttribute(m_module, m_tdType.Token, ((ModuleBuilder)m_module).GetConstructorToken(con).Token, + DefineCustomAttribute(m_module, m_tdType, ((ModuleBuilder)m_module).GetConstructorToken(con), binaryAttribute, false, false); } @@ -2139,7 +2142,7 @@ public void SetCustomAttribute(CustomAttributeBuilder customBuilder) if (customBuilder == null) throw new ArgumentNullException(nameof(customBuilder)); - customBuilder.CreateCustomAttribute((ModuleBuilder)m_module, m_tdType.Token); + customBuilder.CreateCustomAttribute((ModuleBuilder)m_module, m_tdType); } #endregion diff --git a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs index 4443867b1b52a..a500e1ddf25a3 100644 --- a/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs +++ b/src/coreclr/src/System.Private.CoreLib/src/System/Reflection/Emit/XXXOnTypeBuilderInstantiation.cs @@ -122,14 +122,14 @@ internal override Type GetReturnType() public override object[] GetCustomAttributes(bool inherit) { return m_ctor.GetCustomAttributes(inherit); } public override object[] GetCustomAttributes(Type attributeType, bool inherit) { return m_ctor.GetCustomAttributes(attributeType, inherit); } public override bool IsDefined(Type attributeType, bool inherit) { return m_ctor.IsDefined(attributeType, inherit); } - internal int MetadataTokenInternal + public override int MetadataToken { get { ConstructorBuilder? cb = m_ctor as ConstructorBuilder; if (cb != null) - return cb.MetadataTokenInternal; + return cb.MetadataToken; else { Debug.Assert(m_ctor is RuntimeConstructorInfo); @@ -223,14 +223,14 @@ internal FieldOnTypeBuilderInstantiation(FieldInfo field, TypeBuilderInstantiati public override object[] GetCustomAttributes(bool inherit) { return m_field.GetCustomAttributes(inherit); } public override object[] GetCustomAttributes(Type attributeType, bool inherit) { return m_field.GetCustomAttributes(attributeType, inherit); } public override bool IsDefined(Type attributeType, bool inherit) { return m_field.IsDefined(attributeType, inherit); } - internal int MetadataTokenInternal + public override int MetadataToken { get { FieldBuilder? fb = m_field as FieldBuilder; if (fb != null) - return fb.MetadataTokenInternal; + return fb.MetadataToken; else { Debug.Assert(m_field is RuntimeFieldInfo); diff --git a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems index 207fbb4be33d1..4ac94b06136fe 100644 --- a/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems +++ b/src/libraries/System.Private.CoreLib/src/System.Private.CoreLib.Shared.projitems @@ -524,24 +524,16 @@ - - - - - - - - diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/EventToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/EventToken.cs deleted file mode 100644 index 2c49bf89b0e60..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/EventToken.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - public struct EventToken - { - public static readonly EventToken Empty; - - internal EventToken(int eventToken) - { - Token = eventToken; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is EventToken et && Equals(et); - - public bool Equals(EventToken obj) => obj.Token == Token; - - public static bool operator ==(EventToken a, EventToken b) => a.Equals(b); - - public static bool operator !=(EventToken a, EventToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/FieldToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/FieldToken.cs deleted file mode 100644 index d6b6823f5496b..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/FieldToken.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - /// - /// The FieldToken class is an opaque representation of the Token returned - /// by the Metadata to represent the field. FieldTokens are generated by - /// Module.GetFieldToken(). There are no meaningful accessors on this class, - /// but it can be passed to ILGenerator which understands it's internals. - /// - public struct FieldToken - { - public static readonly FieldToken Empty; - - private readonly object _class; - - internal FieldToken(int fieldToken, Type fieldClass) - { - Token = fieldToken; - _class = fieldClass; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is FieldToken ft && Equals(ft); - - public bool Equals(FieldToken obj) => obj.Token == Token && obj._class == _class; - - public static bool operator ==(FieldToken a, FieldToken b) => a.Equals(b); - - public static bool operator !=(FieldToken a, FieldToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/MethodToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/MethodToken.cs deleted file mode 100644 index 868b4cf382ab2..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/MethodToken.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - public struct MethodToken - { - public static readonly MethodToken Empty; - - internal MethodToken(int methodToken) - { - Token = methodToken; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is MethodToken mt && Equals(mt); - - public bool Equals(MethodToken obj) => obj.Token == Token; - - public static bool operator ==(MethodToken a, MethodToken b) => a.Equals(b); - - public static bool operator !=(MethodToken a, MethodToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/ParameterToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/ParameterToken.cs deleted file mode 100644 index 1ddd420ad3d28..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/ParameterToken.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - /// - /// The ParameterToken class is an opaque representation of the Token returned - /// by the Metadata to represent the parameter. - /// - public struct ParameterToken - { - public static readonly ParameterToken Empty; - - internal ParameterToken(int parameterToken) - { - Token = parameterToken; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is ParameterToken pt && Equals(pt); - - public bool Equals(ParameterToken obj) => obj.Token == Token; - - public static bool operator ==(ParameterToken a, ParameterToken b) => a.Equals(b); - - public static bool operator !=(ParameterToken a, ParameterToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/PropertyToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/PropertyToken.cs deleted file mode 100644 index 3b88d0ea9a6ae..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/PropertyToken.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - public struct PropertyToken - { - public static readonly PropertyToken Empty; - - internal PropertyToken(int propertyToken) - { - Token = propertyToken; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is PropertyToken pt && Equals(pt); - - public bool Equals(PropertyToken obj) => obj.Token == Token; - - public static bool operator ==(PropertyToken a, PropertyToken b) => a.Equals(b); - - public static bool operator !=(PropertyToken a, PropertyToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/SignatureToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/SignatureToken.cs deleted file mode 100644 index 7846d4b065184..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/SignatureToken.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - public struct SignatureToken - { - public static readonly SignatureToken Empty; - - internal SignatureToken(int signatureToken) - { - Token = signatureToken; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is SignatureToken st && Equals(st); - - public bool Equals(SignatureToken obj) => obj.Token == Token; - - public static bool operator ==(SignatureToken a, SignatureToken b) => a.Equals(b); - - public static bool operator !=(SignatureToken a, SignatureToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/StringToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/StringToken.cs deleted file mode 100644 index 8e296265a8034..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/StringToken.cs +++ /dev/null @@ -1,28 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - public struct StringToken - { - internal StringToken(int str) - { - Token = str; - } - - // Returns the metadata token for this particular string. - // Generated by a call to Module.GetStringConstant(). - // - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is StringToken st && Equals(st); - - public bool Equals(StringToken obj) => obj.Token == Token; - - public static bool operator ==(StringToken a, StringToken b) => a.Equals(b); - - public static bool operator !=(StringToken a, StringToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/TypeToken.cs b/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/TypeToken.cs deleted file mode 100644 index 3e02bf86a6513..0000000000000 --- a/src/libraries/System.Private.CoreLib/src/System/Reflection/Emit/TypeToken.cs +++ /dev/null @@ -1,27 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -namespace System.Reflection.Emit -{ - public struct TypeToken - { - public static readonly TypeToken Empty; - - internal TypeToken(int typeToken) - { - Token = typeToken; - } - - public int Token { get; } - - public override int GetHashCode() => Token; - - public override bool Equals(object? obj) => obj is TypeToken tt && Equals(tt); - - public bool Equals(TypeToken obj) => obj.Token == Token; - - public static bool operator ==(TypeToken a, TypeToken b) => a.Equals(b); - - public static bool operator !=(TypeToken a, TypeToken b) => !(a == b); - } -} diff --git a/src/libraries/System.Reflection.Emit.ILGeneration/src/MatchingRefApiCompatBaseline.txt b/src/libraries/System.Reflection.Emit.ILGeneration/src/MatchingRefApiCompatBaseline.txt index 0bd26ad1c5187..d775316990508 100644 --- a/src/libraries/System.Reflection.Emit.ILGeneration/src/MatchingRefApiCompatBaseline.txt +++ b/src/libraries/System.Reflection.Emit.ILGeneration/src/MatchingRefApiCompatBaseline.txt @@ -2,7 +2,6 @@ Compat issues with assembly System.Reflection.Emit.ILGeneration: MembersMustExist : Member 'public void System.Reflection.Emit.ILGenerator.MarkSequencePoint(System.Diagnostics.SymbolStore.ISymbolDocumentWriter, System.Int32, System.Int32, System.Int32, System.Int32)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public void System.Reflection.Emit.LocalBuilder.SetLocalSymInfo(System.String)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public void System.Reflection.Emit.LocalBuilder.SetLocalSymInfo(System.String, System.Int32, System.Int32)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.ParameterToken System.Reflection.Emit.ParameterBuilder.GetToken()' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetMethodSigHelper(System.Reflection.Module, System.Runtime.InteropServices.CallingConvention, System.Type)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Reflection.Emit.SignatureHelper System.Reflection.Emit.SignatureHelper.GetMethodSigHelper(System.Runtime.InteropServices.CallingConvention, System.Type)' does not exist in the reference but it does exist in the implementation. -Total Issues: 6 +Total Issues: 5 diff --git a/src/libraries/System.Reflection.Emit/ref/System.Reflection.Emit.cs b/src/libraries/System.Reflection.Emit/ref/System.Reflection.Emit.cs index 6d08e0f25c7ed..278f491858aa2 100644 --- a/src/libraries/System.Reflection.Emit/ref/System.Reflection.Emit.cs +++ b/src/libraries/System.Reflection.Emit/ref/System.Reflection.Emit.cs @@ -79,6 +79,7 @@ internal ConstructorBuilder() { } public override object Invoke(object? obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture) { throw null; } public override object Invoke(System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder? binder, object?[]? parameters, System.Globalization.CultureInfo? culture) { throw null; } public override bool IsDefined(System.Type attributeType, bool inherit) { throw null; } + public override int MetadataToken { get { throw null; } } public void SetCustomAttribute(System.Reflection.ConstructorInfo con, byte[] binaryAttribute) { } public void SetCustomAttribute(System.Reflection.Emit.CustomAttributeBuilder customBuilder) { } public void SetImplementationFlags(System.Reflection.MethodImplAttributes attributes) { } @@ -179,6 +180,7 @@ internal FieldBuilder() { } public override System.Type? DeclaringType { get { throw null; } } public override System.RuntimeFieldHandle FieldHandle { get { throw null; } } public override System.Type FieldType { get { throw null; } } + public override int MetadataToken { get { throw null; } } public override System.Reflection.Module Module { get { throw null; } } public override string Name { get { throw null; } } public override System.Type? ReflectedType { get { throw null; } } @@ -213,6 +215,7 @@ internal GenericTypeParameterBuilder() { } public override bool IsSZArray { get { throw null; } } public override bool IsTypeDefinition { get { throw null; } } public override bool IsVariableBoundArray { get { throw null; } } + public override int MetadataToken { get { throw null; } } public override System.Reflection.Module Module { get { throw null; } } public override string Name { get { throw null; } } public override string? Namespace { get { throw null; } } @@ -298,6 +301,7 @@ internal MethodBuilder() { } public override bool IsSecurityCritical { get { throw null; } } public override bool IsSecuritySafeCritical { get { throw null; } } public override bool IsSecurityTransparent { get { throw null; } } + public override int MetadataToken { get { throw null; } } public override System.RuntimeMethodHandle MethodHandle { get { throw null; } } public override System.Reflection.Module Module { get { throw null; } } public override string Name { get { throw null; } } @@ -446,6 +450,7 @@ internal TypeBuilder() { } public override bool IsSZArray { get { throw null; } } public override bool IsTypeDefinition { get { throw null; } } public override bool IsVariableBoundArray { get { throw null; } } + public override int MetadataToken { get { throw null; } } public override System.Reflection.Module Module { get { throw null; } } public override string Name { get { throw null; } } public override string? Namespace { get { throw null; } } diff --git a/src/libraries/System.Reflection.Emit/src/MatchingRefApiCompatBaseline.txt b/src/libraries/System.Reflection.Emit/src/MatchingRefApiCompatBaseline.txt index 7644d0af23ca8..9d60578ff8b19 100644 --- a/src/libraries/System.Reflection.Emit/src/MatchingRefApiCompatBaseline.txt +++ b/src/libraries/System.Reflection.Emit/src/MatchingRefApiCompatBaseline.txt @@ -1,33 +1,17 @@ Compat issues with assembly System.Reflection.Emit: MembersMustExist : Member 'public System.Reflection.Emit.ModuleBuilder System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(System.String, System.Boolean)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Reflection.Module System.Reflection.Emit.ConstructorBuilder.GetModule()' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.MethodToken System.Reflection.Emit.ConstructorBuilder.GetToken()' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.String System.Reflection.Emit.ConstructorBuilder.Signature.get()' does not exist in the reference but it does exist in the implementation. CannotRemoveBaseTypeOrInterface : Type 'System.Reflection.Emit.EnumBuilder' does not inherit from base type 'System.Reflection.TypeInfo' in the reference but it does in the implementation. MembersMustExist : Member 'public System.Type System.Reflection.Emit.EnumBuilder.CreateType()' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Boolean System.Reflection.Emit.EnumBuilder.IsAssignableFrom(System.Reflection.TypeInfo)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.TypeToken System.Reflection.Emit.EnumBuilder.TypeToken.get()' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.EventToken System.Reflection.Emit.EventBuilder.GetEventToken()' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.FieldToken System.Reflection.Emit.FieldBuilder.GetToken()' does not exist in the reference but it does exist in the implementation. CannotRemoveBaseTypeOrInterface : Type 'System.Reflection.Emit.GenericTypeParameterBuilder' does not inherit from base type 'System.Reflection.TypeInfo' in the reference but it does in the implementation. MembersMustExist : Member 'public System.Boolean System.Reflection.Emit.GenericTypeParameterBuilder.IsAssignableFrom(System.Reflection.TypeInfo)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Reflection.Module System.Reflection.Emit.MethodBuilder.GetModule()' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.MethodToken System.Reflection.Emit.MethodBuilder.GetToken()' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.String System.Reflection.Emit.MethodBuilder.Signature.get()' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Diagnostics.SymbolStore.ISymbolDocumentWriter System.Reflection.Emit.ModuleBuilder.DefineDocument(System.String, System.Guid, System.Guid, System.Guid)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.MethodToken System.Reflection.Emit.ModuleBuilder.GetArrayMethodToken(System.Type, System.String, System.Reflection.CallingConventions, System.Type, System.Type[])' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.MethodToken System.Reflection.Emit.ModuleBuilder.GetConstructorToken(System.Reflection.ConstructorInfo)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.FieldToken System.Reflection.Emit.ModuleBuilder.GetFieldToken(System.Reflection.FieldInfo)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.MethodToken System.Reflection.Emit.ModuleBuilder.GetMethodToken(System.Reflection.MethodInfo)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'protected System.ModuleHandle System.Reflection.Emit.ModuleBuilder.GetModuleHandleImpl()' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.SignatureToken System.Reflection.Emit.ModuleBuilder.GetSignatureToken(System.Byte[], System.Int32)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.SignatureToken System.Reflection.Emit.ModuleBuilder.GetSignatureToken(System.Reflection.Emit.SignatureHelper)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.StringToken System.Reflection.Emit.ModuleBuilder.GetStringConstant(System.String)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.TypeToken System.Reflection.Emit.ModuleBuilder.GetTypeToken(System.String)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.TypeToken System.Reflection.Emit.ModuleBuilder.GetTypeToken(System.Type)' does not exist in the reference but it does exist in the implementation. MembersMustExist : Member 'public System.Boolean System.Reflection.Emit.ModuleBuilder.IsTransient()' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.PropertyToken System.Reflection.Emit.PropertyBuilder.PropertyToken.get()' does not exist in the reference but it does exist in the implementation. CannotRemoveBaseTypeOrInterface : Type 'System.Reflection.Emit.TypeBuilder' does not inherit from base type 'System.Reflection.TypeInfo' in the reference but it does in the implementation. MembersMustExist : Member 'public System.Boolean System.Reflection.Emit.TypeBuilder.IsAssignableFrom(System.Reflection.TypeInfo)' does not exist in the reference but it does exist in the implementation. -MembersMustExist : Member 'public System.Reflection.Emit.TypeToken System.Reflection.Emit.TypeBuilder.TypeToken.get()' does not exist in the reference but it does exist in the implementation. -Total Issues: 31 +Total Issues: 15 diff --git a/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineParameter.cs b/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineParameter.cs index b1f5d4ec77051..23d36f9f838d1 100644 --- a/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineParameter.cs +++ b/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderDefineParameter.cs @@ -37,6 +37,11 @@ public void DefineParameter_TwoParameters() // Invoke the method to verify it works correctly MethodInfo resultMethod = resultType.GetMethod("TestMethod"); Assert.Equal(expectedReturn, resultMethod.Invoke(null, new object[] { "hello", new object() })); + + // Verify MetadataToken + Assert.Equal(method.MetadataToken, resultMethod.MetadataToken); + MethodInfo methodFromToken = (MethodInfo)type.Module.ResolveMethod(method.MetadataToken); + Assert.Equal(resultMethod, methodFromToken); } [Fact] diff --git a/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderGetILGenerator.cs b/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderGetILGenerator.cs index a7ba9f41445d2..9085a34cadbc6 100644 --- a/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderGetILGenerator.cs +++ b/src/libraries/System.Reflection.Emit/tests/MethodBuilder/MethodBuilderGetILGenerator.cs @@ -21,8 +21,16 @@ public void GetILGenerator_Int(int size) ilGenerator.Emit(OpCodes.Ret); Type createdType = type.CreateTypeInfo().AsType(); - MethodInfo createedMethod = createdType.GetMethod("TestMethod"); - Assert.Equal(expectedReturn, createedMethod.Invoke(null, null)); + MethodInfo createdMethod = createdType.GetMethod("TestMethod"); + Assert.Equal(expectedReturn, createdMethod.Invoke(null, null)); + + // Verify MetadataToken + Assert.Equal(method.MetadataToken, createdMethod.MetadataToken); + MethodInfo methodFromToken = (MethodInfo)type.Module.ResolveMethod(method.MetadataToken); + Assert.Equal(createdMethod, methodFromToken); + + MemberInfo memberInfoFromToken = (MemberInfo)type.Module.ResolveMember(method.MetadataToken); + Assert.Equal(methodFromToken, memberInfoFromToken); } [Theory] diff --git a/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderCreateType.cs b/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderCreateType.cs index 32ea089d316c6..4989266442744 100644 --- a/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderCreateType.cs +++ b/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderCreateType.cs @@ -26,7 +26,13 @@ public void CreateType(TypeAttributes attributes) Type createdType = type.CreateType(); Assert.Equal(type.Name, createdType.Name); - Assert.Equal(type.CreateTypeInfo(), createdType.GetTypeInfo()); + TypeInfo typeInfo = type.CreateTypeInfo(); + Assert.Equal(typeInfo, createdType.GetTypeInfo()); + + // Verify MetadataToken + Assert.Equal(type.MetadataToken, typeInfo.MetadataToken); + TypeInfo typeFromToken = (TypeInfo)type.Module.ResolveType(typeInfo.MetadataToken); + Assert.Equal(createdType, typeFromToken); } [Theory] diff --git a/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderDefineField.cs b/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderDefineField.cs index 652ec873ae1fd..e765a08dcc403 100644 --- a/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderDefineField.cs +++ b/src/libraries/System.Reflection.Emit/tests/TypeBuilder/TypeBuilderDefineField.cs @@ -46,7 +46,17 @@ public void DefineField(string name, Type fieldType, FieldAttributes attributes, Type createdType = type.CreateTypeInfo().AsType(); Assert.Equal(type.AsType().GetFields(Helpers.AllFlags), createdType.GetFields(Helpers.AllFlags)); - Assert.Equal(type.AsType().GetField(name, Helpers.AllFlags), createdType.GetField(name, Helpers.AllFlags)); + + FieldInfo fieldInfo = createdType.GetField(name, Helpers.AllFlags); + Assert.Equal(type.AsType().GetField(name, Helpers.AllFlags), fieldInfo); + + if (fieldInfo != null) + { + // Verify MetadataToken + Assert.Equal(field.MetadataToken, fieldInfo.MetadataToken); + FieldInfo fieldFromToken = (FieldInfo)fieldInfo.Module.ResolveField(fieldInfo.MetadataToken); + Assert.Equal(fieldInfo, fieldFromToken); + } } [Fact] diff --git a/src/libraries/System.Reflection.TypeExtensions/tests/MetadataTokenTests.cs b/src/libraries/System.Reflection.TypeExtensions/tests/MetadataTokenTests.cs index a41695d5b7840..5e9d1a83a207d 100644 --- a/src/libraries/System.Reflection.TypeExtensions/tests/MetadataTokenTests.cs +++ b/src/libraries/System.Reflection.TypeExtensions/tests/MetadataTokenTests.cs @@ -46,14 +46,15 @@ public void SuccessImpliesNonNilWithCorrectTable(MemberInfo member, int expected } [ConditionalFact(nameof(GetMetadataTokenSupported), nameof(IsReflectionEmitSupported))] - public static void UnbakedReflectionEmitType_HasNoMetadataToken() + public static void ReflectionEmitType_HasMetadataToken() { AssemblyBuilder assembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("dynamic"), AssemblyBuilderAccess.Run); ModuleBuilder module = assembly.DefineDynamicModule("dynamic.dll"); TypeBuilder type = module.DefineType("T"); MethodInfo method = type.DefineMethod("M", MethodAttributes.Public); - Assert.False(method.HasMetadataToken()); - Assert.Throws(() => method.GetMetadataToken()); + + Assert.True(method.HasMetadataToken()); + Assert.NotEqual(0, method.GetMetadataToken()); } public static bool GetMetadataTokenSupported => true; diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.Mono.cs index 9652c83847a73..b3127b95c6d42 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ConstructorBuilder.Mono.cs @@ -81,7 +81,7 @@ internal ConstructorBuilder(TypeBuilder tb, MethodAttributes attributes, Calling this.paramModOpt = paramModOpt; table_idx = get_next_table_index(this, 0x06, 1); - ((ModuleBuilder)tb.Module).RegisterToken(this, GetToken().Token); + ((ModuleBuilder)tb.Module).RegisterToken(this, MetadataToken); } // FIXME: @@ -168,6 +168,8 @@ public override object Invoke(BindingFlags invokeAttr, Binder? binder, object?[] throw not_supported(); } + public override int MetadataToken => 0x06000000 | table_idx; + public override RuntimeMethodHandle MethodHandle { get @@ -317,11 +319,6 @@ public Module GetModule() return type.Module; } - public MethodToken GetToken() - { - return new MethodToken(0x06000000 | table_idx); - } - public override Module Module { get diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs index e3e638ae2760d..38f9a9e7a0ddd 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EnumBuilder.Mono.cs @@ -168,11 +168,11 @@ public override RuntimeTypeHandle TypeHandle } } - public TypeToken TypeToken + internal int TypeToken { get { - return _tb.TypeToken; + return _tb.MetadataToken; } } diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.Mono.cs index 36edd1601f3ce..5865a42bd77f5 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/EventBuilder.Mono.cs @@ -88,10 +88,6 @@ public void AddOtherMethod(MethodBuilder mdBuilder) other_methods[other_methods.Length - 1] = mdBuilder; } - public EventToken GetEventToken() - { - return new EventToken(0x14000000 | table_idx); - } public void SetAddOnMethod(MethodBuilder mdBuilder) { if (mdBuilder == null) diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.Mono.cs index 395c721ddea17..4d63c64bdb123 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/FieldBuilder.Mono.cs @@ -72,7 +72,7 @@ internal FieldBuilder(TypeBuilder tb, string fieldName, Type type, FieldAttribut offset = -1; typeb = tb; - ((ModuleBuilder)tb.Module).RegisterToken(this, GetToken().Token); + ((ModuleBuilder)tb.Module).RegisterToken(this, MetadataToken); } public override FieldAttributes Attributes @@ -131,11 +131,6 @@ public override object[] GetCustomAttributes(Type attributeType, bool inherit) public override int MetadataToken { get { return ((ModuleBuilder)typeb.Module).GetToken(this); } } - public FieldToken GetToken() - { - return new FieldToken(MetadataToken, type); - } - public override object? GetValue(object? obj) { throw CreateNotSupportedException(); diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.Mono.cs index c3eb5e2752cbd..a2989b77bace5 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/MethodBuilder.Mono.cs @@ -102,7 +102,7 @@ internal MethodBuilder(TypeBuilder tb, string name, MethodAttributes attributes, type = tb; table_idx = get_next_table_index(this, 0x06, 1); - ((ModuleBuilder)tb.Module).RegisterToken(this, GetToken().Token); + ((ModuleBuilder)tb.Module).RegisterToken(this, MetadataToken); } internal MethodBuilder(TypeBuilder tb, string name, MethodAttributes attributes, @@ -132,6 +132,8 @@ internal TypeBuilder TypeBuilder get { return type; } } + public override int MetadataToken => 0x06000000 | table_idx; + public override RuntimeMethodHandle MethodHandle { get @@ -228,11 +230,6 @@ internal bool SetLastError } } - public MethodToken GetToken() - { - return new MethodToken(0x06000000 | table_idx); - } - public override MethodInfo GetBaseDefinition() { return this; diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.Mono.cs index 34d97488d22e7..88f6588039650 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ModuleBuilder.Mono.cs @@ -545,57 +545,57 @@ public override Type[] GetTypes() return copy; } - public MethodToken GetMethodToken(MethodInfo method) + internal int GetMethodToken(MethodInfo method) { if (method == null) throw new ArgumentNullException(nameof(method)); - return new MethodToken(GetToken(method)); + return method.MetadataToken; } - public MethodToken GetArrayMethodToken(Type arrayClass, string methodName, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes) + internal int GetArrayMethodToken(Type arrayClass, string methodName, CallingConventions callingConvention, Type? returnType, Type[]? parameterTypes) { return GetMethodToken(GetArrayMethod(arrayClass, methodName, callingConvention, returnType, parameterTypes)); } [ComVisible(true)] - public MethodToken GetConstructorToken(ConstructorInfo con) + internal int GetConstructorToken(ConstructorInfo con) { if (con == null) throw new ArgumentNullException(nameof(con)); - return new MethodToken(GetToken(con)); + return con.MetadataToken; } - public FieldToken GetFieldToken(FieldInfo field) + internal int GetFieldToken(FieldInfo field) { if (field == null) throw new ArgumentNullException(nameof(field)); - return new FieldToken(GetToken (field), field.GetType()); + return field.MetadataToken; } // FIXME: - public SignatureToken GetSignatureToken(byte[] sigBytes, int sigLength) + internal int GetSignatureToken(byte[] sigBytes, int sigLength) { throw new NotImplementedException(); } - public SignatureToken GetSignatureToken(SignatureHelper sigHelper) + internal int GetSignatureToken(SignatureHelper sigHelper) { if (sigHelper == null) throw new ArgumentNullException(nameof(sigHelper)); - return new SignatureToken(GetToken(sigHelper)); + return GetToken(sigHelper); } - public StringToken GetStringConstant(string str) + internal int GetStringConstant(string str) { if (str == null) throw new ArgumentNullException(nameof(str)); - return new StringToken(GetToken(str)); + return GetToken(str); } - public TypeToken GetTypeToken(Type type) + internal int GetTypeToken(Type type) { if (type == null) throw new ArgumentNullException(nameof(type)); @@ -603,12 +603,12 @@ public TypeToken GetTypeToken(Type type) throw new ArgumentException("type can't be a byref type", nameof(type)); if (!IsTransient() && (type.Module is ModuleBuilder) && ((ModuleBuilder)type.Module).IsTransient()) throw new InvalidOperationException("a non-transient module can't reference a transient module"); - return new TypeToken(GetToken(type)); + return type.MetadataToken; } [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Reflection.Emit is not subject to trimming")] - public TypeToken GetTypeToken(string name) + internal int GetTypeToken(string name) { return GetTypeToken(GetType(name)!); } diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.Mono.cs index c327f73a778fa..337fd78991bda 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/ParameterBuilder.Mono.cs @@ -92,11 +92,6 @@ public virtual int Position get { return position; } } - public virtual ParameterToken GetToken() - { - return new ParameterToken(0x08 | table_idx); - } - public virtual void SetConstant(object? defaultValue) { if (position > 0) diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.Mono.cs index d245d8bf1aa69..d24191a1719c0 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/PropertyBuilder.Mono.cs @@ -100,10 +100,6 @@ public override string Name { get { return name; } } - public PropertyToken PropertyToken - { - get { return default; } - } public override Type PropertyType { get { return type; } diff --git a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs index 454f784e1a221..b1d1c06193085 100644 --- a/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs +++ b/src/mono/netcore/System.Private.CoreLib/src/System/Reflection/Emit/TypeBuilder.Mono.cs @@ -1612,13 +1612,7 @@ public FieldBuilder DefineUninitializedData(string name, int size, FieldAttribut return DefineField(name, datablobtype, attributes | FieldAttributes.Static | FieldAttributes.HasFieldRVA); } - public TypeToken TypeToken - { - get - { - return new TypeToken(0x02000000 | table_idx); - } - } + public override int MetadataToken => 0x02000000 | table_idx; [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2074:UnrecognizedReflectionPattern", Justification = "Linker doesn't recongnize ResolveUserType")]