Browse Source

Fix #853: consistently use cecil MemberReference for ITextOutput.

pull/863/head
Daniel Grunwald 8 years ago
parent
commit
c2898905c8
  1. 42
      ICSharpCode.Decompiler/Output/TextTokenWriter.cs

42
ICSharpCode.Decompiler/Output/TextTokenWriter.cs

@ -63,36 +63,31 @@ namespace ICSharpCode.Decompiler @@ -63,36 +63,31 @@ namespace ICSharpCode.Decompiler
var definition = GetCurrentDefinition();
if (definition != null) {
output.WriteDefinition(identifier.Name, definition, false);
return;
MemberReference cecil = SymbolToCecil(definition);
if (cecil != null) {
output.WriteDefinition(identifier.Name, definition, false);
return;
}
}
var member = GetCurrentMemberReference();
if (member != null) {
MemberReference cecil;
if (member is IType type) {
cecil = typeSystem.GetCecil(type.GetDefinition());
} else if (member is IMember) {
cecil = typeSystem.GetCecil((IMember)member);
} else {
cecil = null;
}
MemberReference cecil = SymbolToCecil(member);
if (cecil != null) {
output.WriteReference(identifier.Name, cecil);
return;
}
}
definition = GetCurrentLocalDefinition();
if (definition != null) {
output.WriteDefinition(identifier.Name, definition);
var localDefinition = GetCurrentLocalDefinition();
if (localDefinition != null) {
output.WriteDefinition(identifier.Name, localDefinition);
return;
}
var memberRef = GetCurrentLocalReference();
if (memberRef != null) {
output.WriteReference(identifier.Name, memberRef, true);
var localRef = GetCurrentLocalReference();
if (localRef != null) {
output.WriteReference(identifier.Name, localRef, true);
return;
}
@ -104,6 +99,17 @@ namespace ICSharpCode.Decompiler @@ -104,6 +99,17 @@ namespace ICSharpCode.Decompiler
output.Write(identifier.Name);
}
MemberReference SymbolToCecil(ISymbol symbol)
{
if (symbol is IType type) {
return typeSystem.GetCecil(type.GetDefinition());
} else if (symbol is IMember member) {
return typeSystem.GetCecil(member);
} else {
return null;
}
}
ISymbol GetCurrentMemberReference()
{
AstNode node = nodeStack.Peek();
@ -175,7 +181,7 @@ namespace ICSharpCode.Decompiler @@ -175,7 +181,7 @@ namespace ICSharpCode.Decompiler
return null;
}
object GetCurrentDefinition()
ISymbol GetCurrentDefinition()
{
if (nodeStack == null || nodeStack.Count == 0)
return null;

Loading…
Cancel
Save