Skip to content

Commit 48367fc

Browse files
author
Mohamed Koubaa
committed
respect base enum type
1 parent 6cb8d0c commit 48367fc

File tree

2 files changed

+43
-4
lines changed

2 files changed

+43
-4
lines changed

src/runtime/Types/ClassObject.cs

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,50 @@ private static string getEnumReprString(object inst)
6060
{
6161
var obType = inst.GetType();
6262

63+
var integralType = obType.GetEnumUnderlyingType();
6364
var isFlags = obType.IsFlagsEnum();
64-
var intValue = Convert.ToInt32(inst);
65-
var intStr = isFlags ? "0x" + intValue.ToString("X4") : intValue.ToString();
6665

67-
var repr = $"<{obType.Name}.{inst}: {intStr}>";
66+
string strValue = "";
67+
switch (Type.GetTypeCode(integralType))
68+
{
69+
case TypeCode.SByte:
70+
var valueSB = Convert.ToSByte(inst);
71+
strValue = isFlags ? "0x" + valueSB.ToString("X2") : valueSB.ToString();
72+
break;
73+
case TypeCode.Byte:
74+
var valueB = Convert.ToByte(inst);
75+
strValue = isFlags ? "0x" + valueB.ToString("X2") : valueB.ToString();
76+
break;
77+
case TypeCode.Int16:
78+
var valueI16 = Convert.ToInt16(inst);
79+
strValue = isFlags ? "0x" + valueI16.ToString("X4") : valueI16.ToString();
80+
break;
81+
case TypeCode.UInt16:
82+
var valueUI16 = Convert.ToUInt16(inst);
83+
strValue = isFlags ? "0x" + valueUI16.ToString("X4") : valueUI16.ToString();
84+
break;
85+
case TypeCode.Int32:
86+
var valueI32 = Convert.ToInt32(inst);
87+
strValue = isFlags ? "0x" + valueI32.ToString("X8") : valueI32.ToString();
88+
break;
89+
case TypeCode.UInt32:
90+
var valueUI32 = Convert.ToUInt32(inst);
91+
strValue = isFlags ? "0x" + valueUI32.ToString("X8") : valueUI32.ToString();
92+
break;
93+
case TypeCode.Int64:
94+
var valueI64 = Convert.ToInt64(inst);
95+
strValue = isFlags ? "0x" + valueI64.ToString("X16") : valueI64.ToString();
96+
break;
97+
case TypeCode.UInt64:
98+
var valueUI64 = Convert.ToUInt64(inst);
99+
strValue = isFlags ? "0x" + valueUI64.ToString("X16") : valueUI64.ToString();
100+
break;
101+
default:
102+
break;
103+
}
104+
105+
106+
var repr = $"<{obType.Name}.{inst}: {strValue}>";
68107
return repr;
69108
}
70109

tests/test_enum.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def test_enum_repr():
150150
assert repr(DayOfWeek.Monday) == "<DayOfWeek.Monday: 1>"
151151

152152
assert repr(Test.FlagsEnum(7)) == "<FlagsEnum.Two, Five: 0x0007>"
153-
assert repr(Test.FlagsEnum(8)) == "<FlagsEnum.8: 0x0008>"
153+
assert repr(Test.FlagsEnum(8)) == "<FlagsEnum.8: 0x00000008>"
154154

155155

156156
def test_enum_conversion():

0 commit comments

Comments
 (0)