Skip to content

Commit 16600fa

Browse files
committed
Addressed feedback
1 parent 012f581 commit 16600fa

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

ICSharpCode.Decompiler.Tests/TestCases/Pretty/EnumTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public void EnumInNotZeroCheck(SimpleEnum value, NoZero value2)
149149
Console.WriteLine();
150150
}
151151

152-
if (value2 != (NoZero)0)
152+
if (value2 != 0)
153153
{
154154
Console.WriteLine();
155155
}

ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -731,11 +731,23 @@ public TranslatedExpression ConvertToBoolean(ExpressionBuilder expressionBuilder
731731
.WithRR(new OperatorResolveResult(boolType, System.Linq.Expressions.ExpressionType.NotEqual,
732732
this.ResolveResult, nullRef.ResolveResult));
733733
}
734-
else
734+
else if (Type.Kind == TypeKind.Enum && Type.GetDefinition() is { } typeDef &&
735+
typeDef.Fields.Any(f => f.GetConstantValue() is { } val && (ulong)CSharpPrimitiveCast.Cast(TypeCode.UInt64, val, false) == 0L))
735736
{
736737
var zero = expressionBuilder
737738
.ConvertConstantValue(new ConstantResolveResult(Type, 0), allowImplicitConversion: true);
738739
var op = negate ? BinaryOperatorType.Equality : BinaryOperatorType.InEquality;
740+
return new BinaryOperatorExpression(Expression, op, zero.Expression)
741+
.WithoutILInstruction()
742+
.WithRR(new OperatorResolveResult(boolType, System.Linq.Expressions.ExpressionType.NotEqual,
743+
this.ResolveResult, zero.ResolveResult));
744+
}
745+
else
746+
{
747+
var zero = new PrimitiveExpression(0)
748+
.WithoutILInstruction()
749+
.WithRR(new ConstantResolveResult(expressionBuilder.compilation.FindType(KnownTypeCode.Int32), 0));
750+
var op = negate ? BinaryOperatorType.Equality : BinaryOperatorType.InEquality;
739751
return new BinaryOperatorExpression(Expression, op, zero.Expression)
740752
.WithoutILInstruction()
741753
.WithRR(new OperatorResolveResult(boolType, System.Linq.Expressions.ExpressionType.NotEqual,

0 commit comments

Comments
 (0)