|
|
|
@ -1501,13 +1501,13 @@ namespace ICSharpCode.Decompiler.Ast
@@ -1501,13 +1501,13 @@ namespace ICSharpCode.Decompiler.Ast
|
|
|
|
|
{ // cannot rely on type.IsValueType, it's not set for typerefs (but is set for typespecs)
|
|
|
|
|
TypeDefinition enumDefinition = type.Resolve(); |
|
|
|
|
if (enumDefinition != null && enumDefinition.IsEnum) { |
|
|
|
|
TypeCode enumBaseTypeCode = TypeCode.Int32; |
|
|
|
|
foreach (FieldDefinition field in enumDefinition.Fields) { |
|
|
|
|
if (field.IsStatic && object.Equals(CSharpPrimitiveCast.Cast(TypeCode.Int64, field.Constant, false), val)) |
|
|
|
|
return ConvertType(enumDefinition).Member(field.Name).WithAnnotation(field); |
|
|
|
|
return ConvertType(type).Member(field.Name).WithAnnotation(field); |
|
|
|
|
else if (!field.IsStatic && field.IsRuntimeSpecialName) |
|
|
|
|
type = field.FieldType; // use primitive type of the enum
|
|
|
|
|
enumBaseTypeCode = TypeAnalysis.GetTypeCode(field.FieldType); // use primitive type of the enum
|
|
|
|
|
} |
|
|
|
|
TypeCode enumBaseTypeCode = TypeAnalysis.GetTypeCode(type); |
|
|
|
|
if (IsFlagsEnum(enumDefinition)) { |
|
|
|
|
long enumValue = val; |
|
|
|
|
Expression expr = null; |
|
|
|
@ -1534,7 +1534,7 @@ namespace ICSharpCode.Decompiler.Ast
@@ -1534,7 +1534,7 @@ namespace ICSharpCode.Decompiler.Ast
|
|
|
|
|
continue; // skip None enum value
|
|
|
|
|
|
|
|
|
|
if ((fieldValue & enumValue) == fieldValue) { |
|
|
|
|
var fieldExpression = ConvertType(enumDefinition).Member(field.Name).WithAnnotation(field); |
|
|
|
|
var fieldExpression = ConvertType(type).Member(field.Name).WithAnnotation(field); |
|
|
|
|
if (expr == null) |
|
|
|
|
expr = fieldExpression; |
|
|
|
|
else |
|
|
|
@ -1543,7 +1543,7 @@ namespace ICSharpCode.Decompiler.Ast
@@ -1543,7 +1543,7 @@ namespace ICSharpCode.Decompiler.Ast
|
|
|
|
|
enumValue &= ~fieldValue; |
|
|
|
|
} |
|
|
|
|
if ((fieldValue & negatedEnumValue) == fieldValue) { |
|
|
|
|
var fieldExpression = ConvertType(enumDefinition).Member(field.Name).WithAnnotation(field); |
|
|
|
|
var fieldExpression = ConvertType(type).Member(field.Name).WithAnnotation(field); |
|
|
|
|
if (negatedExpr == null) |
|
|
|
|
negatedExpr = fieldExpression; |
|
|
|
|
else |
|
|
|
@ -1561,7 +1561,7 @@ namespace ICSharpCode.Decompiler.Ast
@@ -1561,7 +1561,7 @@ namespace ICSharpCode.Decompiler.Ast
|
|
|
|
|
return new UnaryOperatorExpression(UnaryOperatorType.BitNot, negatedExpr); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return new Ast.PrimitiveExpression(CSharpPrimitiveCast.Cast(enumBaseTypeCode, val, false)).CastTo(ConvertType(enumDefinition)); |
|
|
|
|
return new Ast.PrimitiveExpression(CSharpPrimitiveCast.Cast(enumBaseTypeCode, val, false)).CastTo(ConvertType(type)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
TypeCode code = TypeAnalysis.GetTypeCode(type); |
|
|
|
|