From 16600fa6339db0f148a58f2b3f6dfbe0f465d380 Mon Sep 17 00:00:00 2001 From: ElektroKill Date: Thu, 20 Mar 2025 18:24:26 +0100 Subject: [PATCH] Addressed feedback --- .../TestCases/Pretty/EnumTests.cs | 2 +- .../CSharp/TranslatedExpression.cs | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/EnumTests.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/EnumTests.cs index b7cd02c5c..2b26f7d3a 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/EnumTests.cs +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/EnumTests.cs @@ -149,7 +149,7 @@ namespace ICSharpCode.Decompiler.Tests.TestCases.Pretty Console.WriteLine(); } - if (value2 != (NoZero)0) + if (value2 != 0) { Console.WriteLine(); } diff --git a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs index e40a975e0..66d0eab36 100644 --- a/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs +++ b/ICSharpCode.Decompiler/CSharp/TranslatedExpression.cs @@ -731,11 +731,23 @@ namespace ICSharpCode.Decompiler.CSharp .WithRR(new OperatorResolveResult(boolType, System.Linq.Expressions.ExpressionType.NotEqual, this.ResolveResult, nullRef.ResolveResult)); } - else + else if (Type.Kind == TypeKind.Enum && Type.GetDefinition() is { } typeDef && + typeDef.Fields.Any(f => f.GetConstantValue() is { } val && (ulong)CSharpPrimitiveCast.Cast(TypeCode.UInt64, val, false) == 0L)) { var zero = expressionBuilder .ConvertConstantValue(new ConstantResolveResult(Type, 0), allowImplicitConversion: true); var op = negate ? BinaryOperatorType.Equality : BinaryOperatorType.InEquality; + return new BinaryOperatorExpression(Expression, op, zero.Expression) + .WithoutILInstruction() + .WithRR(new OperatorResolveResult(boolType, System.Linq.Expressions.ExpressionType.NotEqual, + this.ResolveResult, zero.ResolveResult)); + } + else + { + var zero = new PrimitiveExpression(0) + .WithoutILInstruction() + .WithRR(new ConstantResolveResult(expressionBuilder.compilation.FindType(KnownTypeCode.Int32), 0)); + var op = negate ? BinaryOperatorType.Equality : BinaryOperatorType.InEquality; return new BinaryOperatorExpression(Expression, op, zero.Expression) .WithoutILInstruction() .WithRR(new OperatorResolveResult(boolType, System.Linq.Expressions.ExpressionType.NotEqual,