Browse Source

Fix duplicate ResolveResult on ConvertConstantValue()

pull/728/head
Daniel Grunwald 11 years ago
parent
commit
ad8d4a7ef6
  1. 7
      ICSharpCode.Decompiler/CSharp/Annotations.cs
  2. 15
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs
  3. 5
      ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs
  4. 2
      ILSpy/Properties/app.config.template

7
ICSharpCode.Decompiler/CSharp/Annotations.cs

@ -57,6 +57,13 @@ namespace ICSharpCode.Decompiler.CSharp @@ -57,6 +57,13 @@ namespace ICSharpCode.Decompiler.CSharp
return new TranslatedExpression(expression.Expression, expression.ResolveResult);
}
public static TranslatedExpression WithILInstruction(this ExpressionWithResolveResult expression, IEnumerable<ILInstruction> instructions)
{
foreach (var inst in instructions)
expression.Expression.AddAnnotation(inst);
return new TranslatedExpression(expression.Expression, expression.ResolveResult);
}
public static TranslatedExpression WithoutILInstruction(this ExpressionWithResolveResult expression)
{
return new TranslatedExpression(expression.Expression, expression.ResolveResult);

15
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -40,7 +40,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -40,7 +40,7 @@ namespace ICSharpCode.Decompiler.CSharp
{
internal readonly ICompilation compilation;
internal readonly CSharpResolver resolver;
internal readonly TypeSystemAstBuilder astBuilder;
readonly TypeSystemAstBuilder astBuilder;
public ExpressionBuilder(ITypeResolveContext decompilationContext)
{
@ -55,10 +55,21 @@ namespace ICSharpCode.Decompiler.CSharp @@ -55,10 +55,21 @@ namespace ICSharpCode.Decompiler.CSharp
public AstType ConvertType(IType type)
{
var astType = astBuilder.ConvertType(type);
astType.AddAnnotation(new TypeResolveResult(type));
Debug.Assert(astType.Annotation<TypeResolveResult>() != null);
return astType;
}
public ExpressionWithResolveResult ConvertConstantValue(ResolveResult rr)
{
var expr = astBuilder.ConvertConstantValue(rr);
var exprRR = expr.Annotation<ResolveResult>();
if (exprRR == null) {
exprRR = rr;
expr.AddAnnotation(rr);
}
return new ExpressionWithResolveResult(expr, exprRR);
}
public TranslatedExpression Translate(ILInstruction inst)
{
Debug.Assert(inst != null);

5
ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

@ -172,9 +172,8 @@ namespace ICSharpCode.Decompiler.CSharp @@ -172,9 +172,8 @@ namespace ICSharpCode.Decompiler.CSharp
}
var rr = expressionBuilder.resolver.ResolveCast(targetType, ResolveResult);
if (rr.IsCompileTimeConstant && !rr.IsError) {
return expressionBuilder.astBuilder.ConvertConstantValue(rr)
.WithILInstruction(this.ILInstructions)
.WithRR(rr);
return expressionBuilder.ConvertConstantValue(rr)
.WithILInstruction(this.ILInstructions);
}
return Expression.CastTo(expressionBuilder.ConvertType(targetType))
.WithoutILInstruction().WithRR(rr);

2
ILSpy/Properties/app.config.template

@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ICSharpCode.AvalonEdit" publicKeyToken="9cc39be672370310" culture="neutral"/>
<bindingRedirect oldVersion="4.1.0.0-99.9.9.9" newVersion="4.4.2.9744"/>
<bindingRedirect oldVersion="4.1.0.0-99.9.9.9" newVersion="5.0.1.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ICSharpCode.NRefactory" publicKeyToken="d4bfe873e7598c49" culture="neutral"/>

Loading…
Cancel
Save