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 {
protected Dictionary<string, NameCreator> typeNames = new Dictionary<string, NameCreator>(StringComparer.Ordinal);
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> fullNameToShortNamePrefix;
public string create(TypeSig typeRef) {
typeRef = typeRef.RemovePinnedAndModifiers();
if (typeRef == null)
return unknownNameCreator.create();
var gis = typeRef as GenericInstSig;
if (gis != null) {
if (gis.FullName == "System.Nullable`1" &&
@ -41,6 +45,8 @@ namespace de4dot.code.renamer {
string prefix = getPrefix(typeRef);
var elementType = typeRef.ScopeType;
if (elementType == null && isFnPtrSig(typeRef))
return fnPtrNameCreator.create();
if (isGenericParam(elementType))
return genericParamNameCreator.create();
@ -65,6 +71,15 @@ namespace de4dot.code.renamer {
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) {
var ts = tdr as TypeSpec;
if (ts == null)
@ -106,6 +121,8 @@ namespace de4dot.code.renamer {
typeNames[pair.Key] = pair.Value.clone();
}
genericParamNameCreator.merge(other.genericParamNameCreator);
fnPtrNameCreator.merge(other.fnPtrNameCreator);
unknownNameCreator.merge(other.unknownNameCreator);
return this;
}

2
dot10

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