From 70e56c4b4da659eb1f9d1c428ea39ea84f4d41ff Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Mon, 13 Nov 2017 00:10:28 +0100 Subject: [PATCH] Always use hex in flags enums and in bit-wise operations. --- ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs | 6 +++++- ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs | 4 ---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index ead47885b..cdf5cee7e 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -830,7 +830,11 @@ namespace ICSharpCode.Decompiler.CSharp } long initValue = (long)CSharpPrimitiveCast.Cast(TypeCode.Int64, field.ConstantValue, false); var enumDec = new EnumMemberDeclaration { Name = field.Name }; - if (previousValue + 1 != initValue || decompilationContext.CurrentTypeDefinition.Attributes.Any(a => a.AttributeType.FullName == "System.FlagsAttribute")) { + if (decompilationContext.CurrentTypeDefinition.Attributes.Any(a => a.AttributeType.FullName == "System.FlagsAttribute")) { + enumDec.Initializer = typeSystemAstBuilder.ConvertConstantValue(decompilationContext.CurrentTypeDefinition.EnumUnderlyingType, field.ConstantValue); + if (enumDec.Initializer is PrimitiveExpression primitive && initValue > 9) + primitive.SetValue(initValue, $"0x{initValue:X}"); + } else if (previousValue + 1 != initValue) { enumDec.Initializer = typeSystemAstBuilder.ConvertConstantValue(decompilationContext.CurrentTypeDefinition.EnumUnderlyingType, field.ConstantValue); if (enumDec.Initializer is PrimitiveExpression primitive && initValue > 9 && ((initValue & (initValue - 1)) == 0 || (initValue & (initValue + 1)) == 0)) { primitive.SetValue(initValue, $"0x{initValue:X}"); diff --git a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs index 2c729e390..52d4dc0ea 100644 --- a/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs +++ b/ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs @@ -296,10 +296,6 @@ namespace ICSharpCode.Decompiler.CSharp parent = conv.Parent; if (value <= 9) return false; - if (value < long.MaxValue) { - if (!((value & (value - 1)) == 0 || (value & (value + 1)) == 0)) - return false; - } switch (parent) { case BinaryNumericInstruction bni: if (bni.Operator == BinaryNumericOperator.BitAnd