From 18516fc6539de4ec5ab017d422ce4939e5f26eff Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Thu, 11 Jun 2015 23:26:24 +0200 Subject: [PATCH] Fix bool->int conversion --- .../CSharp/TranslatedExpression.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs index 1a577b6db..18cdf574a 100644 --- a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs +++ b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs @@ -170,6 +170,14 @@ namespace ICSharpCode.Decompiler.CSharp // perform remaining pointer cast, if necessary return pointerExpr.ConvertTo(targetType, expressionBuilder); } + if (type.IsKnownType(KnownTypeCode.Boolean) && targetType.GetStackType() == StackType.I4) { + // convert from boolean to integer (or enum) + return new ConditionalExpression( + this.Expression, + LdcI4(expressionBuilder.compilation, 1).ConvertTo(targetType, expressionBuilder), + LdcI4(expressionBuilder.compilation, 0).ConvertTo(targetType, expressionBuilder) + ).WithoutILInstruction().WithRR(new ResolveResult(targetType)); + } var rr = expressionBuilder.resolver.ResolveCast(targetType, ResolveResult); if (rr.IsCompileTimeConstant && !rr.IsError) { return expressionBuilder.ConvertConstantValue(rr) @@ -184,6 +192,13 @@ namespace ICSharpCode.Decompiler.CSharp .WithoutILInstruction().WithRR(rr); } + TranslatedExpression LdcI4(ICompilation compilation, int val) + { + return new PrimitiveExpression(val) + .WithoutILInstruction() + .WithRR(new ConstantResolveResult(compilation.FindType(KnownTypeCode.Int32), val)); + } + public TranslatedExpression ConvertToBoolean(ExpressionBuilder expressionBuilder) { if (Type.IsKnownType(KnownTypeCode.Boolean) || Type.Kind == TypeKind.Unknown) {