Browse Source

Avoid 'unchecked' annotation on float->double casts.

pull/863/head
Daniel Grunwald 8 years ago
parent
commit
9a14bb9bd0
  1. 8
      ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

8
ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

@ -181,6 +181,9 @@ namespace ICSharpCode.Decompiler.CSharp @@ -181,6 +181,9 @@ namespace ICSharpCode.Decompiler.CSharp
return this;
}
var compilation = expressionBuilder.compilation;
bool isLifted = type.IsKnownType(KnownTypeCode.NullableOfT) && targetType.IsKnownType(KnownTypeCode.NullableOfT);
IType utype = isLifted ? NullableType.GetUnderlyingType(type) : type;
IType targetUType = isLifted ? NullableType.GetUnderlyingType(targetType) : targetType;
if (type.IsKnownType(KnownTypeCode.Boolean) && targetType.GetStackType().IsIntegerType()) {
// convert from boolean to integer (or enum)
return new ConditionalExpression(
@ -311,7 +314,10 @@ namespace ICSharpCode.Decompiler.CSharp @@ -311,7 +314,10 @@ namespace ICSharpCode.Decompiler.CSharp
return this;
}
var castExpr = new CastExpression(expressionBuilder.ConvertType(targetType), Expression);
castExpr.AddAnnotation(checkForOverflow ? AddCheckedBlocks.CheckedAnnotation : AddCheckedBlocks.UncheckedAnnotation);
bool avoidCheckAnnotation = utype.IsKnownType(KnownTypeCode.Single) && targetUType.IsKnownType(KnownTypeCode.Double);
if (!avoidCheckAnnotation) {
castExpr.AddAnnotation(checkForOverflow ? AddCheckedBlocks.CheckedAnnotation : AddCheckedBlocks.UncheckedAnnotation);
}
return castExpr.WithoutILInstruction().WithRR(rr);
}

Loading…
Cancel
Save