Browse Source

Fix #854: Inconsistent annotations: ILVariable vs. ILVariableResolveResult

pull/881/merge
Siegfried Pammer 8 years ago
parent
commit
7d78331e0f
  1. 16
      ICSharpCode.Decompiler/CSharp/Annotations.cs
  2. 2
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

16
ICSharpCode.Decompiler/CSharp/Annotations.cs

@ -126,23 +126,31 @@ namespace ICSharpCode.Decompiler.CSharp @@ -126,23 +126,31 @@ namespace ICSharpCode.Decompiler.CSharp
public static ILVariable GetILVariable(this VariableInitializer vi)
{
return vi.Annotation<ILVariable>();
var rr = vi.Annotation<ResolveResult>() as ILVariableResolveResult;
if (rr != null)
return rr.Variable;
else
return null;
}
public static ILVariable GetILVariable(this ForeachStatement loop)
{
return loop.Annotation<ILVariable>();
var rr = loop.Annotation<ResolveResult>() as ILVariableResolveResult;
if (rr != null)
return rr.Variable;
else
return null;
}
public static VariableInitializer WithILVariable(this VariableInitializer vi, ILVariable v)
{
vi.AddAnnotation(v);
vi.AddAnnotation(new ILVariableResolveResult(v, v.Type));
return vi;
}
public static ForeachStatement WithILVariable(this ForeachStatement loop, ILVariable v)
{
loop.AddAnnotation(v);
loop.AddAnnotation(new ILVariableResolveResult(v, v.Type));
return loop;
}
}

2
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -1028,7 +1028,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1028,7 +1028,7 @@ namespace ICSharpCode.Decompiler.CSharp
if (!isLambda && method.Parameters.All(p => string.IsNullOrEmpty(p.Name))) {
var parameterReferencingIdentifiers =
from ident in body.Descendants.OfType<IdentifierExpression>()
let v = ident.Annotation<ILVariable>()
let v = ident.Annotation<ILVariableResolveResult>()?.Variable
where v != null && v.Kind == VariableKind.Parameter
select ident;
if (!parameterReferencingIdentifiers.Any()) {

Loading…
Cancel
Save