diff --git a/de4dot.code/renamer/Renamer.cs b/de4dot.code/renamer/Renamer.cs index 28d1d7d9..0a72cb7c 100644 --- a/de4dot.code/renamer/Renamer.cs +++ b/de4dot.code/renamer/Renamer.cs @@ -1520,6 +1520,29 @@ namespace de4dot.code.renamer { return null; } + internal static ITypeDefOrRef GetScopeType(TypeSig typeSig) { + if (typeSig == null) + return null; + var scopeType = typeSig.ScopeType; + if (scopeType != null) + return scopeType; + + for (int i = 0; i < 100; i++) { + var nls = typeSig as NonLeafSig; + if (nls == null) + break; + typeSig = nls.Next; + } + + switch (typeSig.GetElementType()) { + case ElementType.MVar: + case ElementType.Var: + return new TypeSpecUser(typeSig); + default: + return null; + } + } + string GetNewPropertyNamePrefix(MethodNameGroup group) { const string defaultVal = "Prop_"; @@ -1527,7 +1550,7 @@ namespace de4dot.code.renamer { if (propType == null) return defaultVal; - var elementType = propType.ScopeType.ToTypeSig(false).RemovePinnedAndModifiers(); + var elementType = GetScopeType(propType).ToTypeSig(false).RemovePinnedAndModifiers(); if (propType is GenericInstSig || elementType is GenericSig) return defaultVal; diff --git a/de4dot.code/renamer/TypeNames.cs b/de4dot.code/renamer/TypeNames.cs index 05ab7a0d..c664ef06 100644 --- a/de4dot.code/renamer/TypeNames.cs +++ b/de4dot.code/renamer/TypeNames.cs @@ -44,7 +44,7 @@ namespace de4dot.code.renamer { string prefix = GetPrefix(typeRef); - var elementType = typeRef.ScopeType; + var elementType = Renamer.GetScopeType(typeRef); if (elementType == null && IsFnPtrSig(typeRef)) return fnPtrNameCreator.Create(); if (IsGenericParam(elementType))