void FormatEnum(ulong enumValue, DmdType type) { Debug.Assert(type.IsEnum); var enumInfo = EnumInfo.GetEnumInfo(type); if (enumInfo.HasFlagsAttribute && enumValue != 0) { var f = enumValue; bool needSep = false; foreach (var info in enumInfo.FieldInfos) { var flag = info.Value; if ((f & flag) == 0) { continue; } if (needSep) { WriteEnumSeperator(); } needSep = true; WriteEnumField(info.Field); f &= ~flag; if (f == 0) { break; } } if (f != 0) { if (needSep) { WriteEnumSeperator(); } WriteEnumInteger(type, f); } if (needSep) { WriteRawValue(enumValue, type); } } else { bool printed = false; foreach (var info in enumInfo.FieldInfos) { if (info.Value == enumValue) { WriteEnumField(info.Field); WriteRawValue(enumValue, type); printed = true; break; } } if (!printed) { WriteEnumInteger(type, enumValue); } } }