Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
respect base enum type
  • Loading branch information
Mohamed Koubaa committed Sep 21, 2023
commit 5133cefa521553c670232d9a6bf803d6fc0dd531
45 changes: 42 additions & 3 deletions src/runtime/Types/ClassObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,50 @@ private static string getEnumReprString(object inst)
{
var obType = inst.GetType();

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

var repr = $"<{obType.Name}.{inst}: {intStr}>";
string strValue = "";
switch (Type.GetTypeCode(integralType))
{
case TypeCode.SByte:
var valueSB = Convert.ToSByte(inst);
strValue = isFlags ? "0x" + valueSB.ToString("X2") : valueSB.ToString();
break;
case TypeCode.Byte:
var valueB = Convert.ToByte(inst);
strValue = isFlags ? "0x" + valueB.ToString("X2") : valueB.ToString();
break;
case TypeCode.Int16:
var valueI16 = Convert.ToInt16(inst);
strValue = isFlags ? "0x" + valueI16.ToString("X4") : valueI16.ToString();
break;
case TypeCode.UInt16:
var valueUI16 = Convert.ToUInt16(inst);
strValue = isFlags ? "0x" + valueUI16.ToString("X4") : valueUI16.ToString();
break;
case TypeCode.Int32:
var valueI32 = Convert.ToInt32(inst);
strValue = isFlags ? "0x" + valueI32.ToString("X8") : valueI32.ToString();
break;
case TypeCode.UInt32:
var valueUI32 = Convert.ToUInt32(inst);
strValue = isFlags ? "0x" + valueUI32.ToString("X8") : valueUI32.ToString();
break;
case TypeCode.Int64:
var valueI64 = Convert.ToInt64(inst);
strValue = isFlags ? "0x" + valueI64.ToString("X16") : valueI64.ToString();
break;
case TypeCode.UInt64:
var valueUI64 = Convert.ToUInt64(inst);
strValue = isFlags ? "0x" + valueUI64.ToString("X16") : valueUI64.ToString();
break;
default:
break;
}


var repr = $"<{obType.Name}.{inst}: {strValue}>";
return repr;
}

Expand Down
2 changes: 1 addition & 1 deletion tests/test_enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ def test_enum_repr():
assert repr(DayOfWeek.Monday) == "<DayOfWeek.Monday: 1>"

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


def test_enum_conversion():
Expand Down