Browse Source

Fix bool->int conversion

pull/728/head
Daniel Grunwald 10 years ago
parent
commit
18516fc653
  1. 15
      ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

15
ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

@ -170,6 +170,14 @@ namespace ICSharpCode.Decompiler.CSharp @@ -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 @@ -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) {

Loading…
Cancel
Save