Rename FnPtr args, and also null type sigs params

This commit is contained in:
de4dot 2012-11-05 02:42:48 +01:00
parent 2aedcc730c
commit ea001865c9
2 changed files with 18 additions and 1 deletions

View File

@ -25,11 +25,15 @@ namespace de4dot.code.renamer {
abstract class TypeNames { abstract class TypeNames {
protected Dictionary<string, NameCreator> typeNames = new Dictionary<string, NameCreator>(StringComparer.Ordinal); protected Dictionary<string, NameCreator> typeNames = new Dictionary<string, NameCreator>(StringComparer.Ordinal);
protected NameCreator genericParamNameCreator = new NameCreator("gparam_"); protected NameCreator genericParamNameCreator = new NameCreator("gparam_");
protected NameCreator fnPtrNameCreator = new NameCreator("fnptr_");
protected NameCreator unknownNameCreator = new NameCreator("unknown_");
protected Dictionary<string, string> fullNameToShortName; protected Dictionary<string, string> fullNameToShortName;
protected Dictionary<string, string> fullNameToShortNamePrefix; protected Dictionary<string, string> fullNameToShortNamePrefix;
public string create(TypeSig typeRef) { public string create(TypeSig typeRef) {
typeRef = typeRef.RemovePinnedAndModifiers(); typeRef = typeRef.RemovePinnedAndModifiers();
if (typeRef == null)
return unknownNameCreator.create();
var gis = typeRef as GenericInstSig; var gis = typeRef as GenericInstSig;
if (gis != null) { if (gis != null) {
if (gis.FullName == "System.Nullable`1" && if (gis.FullName == "System.Nullable`1" &&
@ -41,6 +45,8 @@ namespace de4dot.code.renamer {
string prefix = getPrefix(typeRef); string prefix = getPrefix(typeRef);
var elementType = typeRef.ScopeType; var elementType = typeRef.ScopeType;
if (elementType == null && isFnPtrSig(typeRef))
return fnPtrNameCreator.create();
if (isGenericParam(elementType)) if (isGenericParam(elementType))
return genericParamNameCreator.create(); return genericParamNameCreator.create();
@ -65,6 +71,15 @@ namespace de4dot.code.renamer {
return addTypeName(typeFullName, shortName, prefix).create(); return addTypeName(typeFullName, shortName, prefix).create();
} }
bool isFnPtrSig(TypeSig sig) {
while (sig != null) {
if (sig is FnPtrSig)
return true;
sig = sig.Next;
}
return false;
}
bool isGenericParam(ITypeDefOrRef tdr) { bool isGenericParam(ITypeDefOrRef tdr) {
var ts = tdr as TypeSpec; var ts = tdr as TypeSpec;
if (ts == null) if (ts == null)
@ -106,6 +121,8 @@ namespace de4dot.code.renamer {
typeNames[pair.Key] = pair.Value.clone(); typeNames[pair.Key] = pair.Value.clone();
} }
genericParamNameCreator.merge(other.genericParamNameCreator); genericParamNameCreator.merge(other.genericParamNameCreator);
fnPtrNameCreator.merge(other.fnPtrNameCreator);
unknownNameCreator.merge(other.unknownNameCreator);
return this; return this;
} }

2
dot10

@ -1 +1 @@
Subproject commit ebd41734e89ab48d63f317958e8a5741aad1f431 Subproject commit 14a78f2ac7cf2460afede0dc63f867ec841c82f7