diff --git a/src/DotNet/ParameterList.cs b/src/DotNet/ParameterList.cs index 17b62ee0e..0363ebd9a 100644 --- a/src/DotNet/ParameterList.cs +++ b/src/DotNet/ParameterList.cs @@ -118,10 +118,25 @@ internal void UpdateThisParameterType(TypeDef methodDeclaringType) { #endif if (methodDeclaringType is null) hiddenThisParameter.Type = null; - else if (methodDeclaringType.IsValueType) - hiddenThisParameter.Type = new ByRefSig(new ValueTypeSig(methodDeclaringType)); - else - hiddenThisParameter.Type = new ClassSig(methodDeclaringType); + else { + bool isValueType = methodDeclaringType.IsValueType; + ClassOrValueTypeSig instSig; + if (isValueType) + instSig = new ValueTypeSig(methodDeclaringType); + else + instSig = new ClassSig(methodDeclaringType); + TypeSig thisTypeSig; + if (methodDeclaringType.HasGenericParameters) { + int gpCount = methodDeclaringType.GenericParameters.Count; + var genArgs = new List(gpCount); + for (int i = 0; i < gpCount; i++) + genArgs.Add(new GenericVar(i, methodDeclaringType)); + thisTypeSig = new GenericInstSig(instSig, genArgs); + } + else + thisTypeSig = instSig; + hiddenThisParameter.Type = isValueType ? new ByRefSig(thisTypeSig) : thisTypeSig; + } #if THREAD_SAFE } finally { theLock.ExitWriteLock(); } #endif