Browse Source

Unpack implicit boxing conversions (casts to object).

pull/863/head
Siegfried Pammer 8 years ago
parent
commit
6df524bb42
  1. 9
      ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

9
ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

@ -171,8 +171,15 @@ namespace ICSharpCode.Decompiler.CSharp @@ -171,8 +171,15 @@ namespace ICSharpCode.Decompiler.CSharp
public TranslatedExpression ConvertTo(IType targetType, ExpressionBuilder expressionBuilder, bool checkForOverflow = false, bool allowImplicitConversion = false)
{
var type = this.Type;
if (type.Equals(targetType))
if (type.Equals(targetType)) {
// Remove boxing conversion if possible
if (allowImplicitConversion && type.IsKnownType(KnownTypeCode.Object)) {
if (Expression is CastExpression cast && ResolveResult is ConversionResolveResult conversion && conversion.Conversion.IsBoxingConversion) {
return this.UnwrapChild(cast.Expression);
}
}
return this;
}
var compilation = expressionBuilder.compilation;
if (type.IsKnownType(KnownTypeCode.Boolean) && targetType.GetStackType().IsIntegerType()) {
// convert from boolean to integer (or enum)

Loading…
Cancel
Save