Remove the need for parapoly to print an enum as a string

This commit is contained in:
gingerBill
2020-03-07 16:19:55 +00:00
parent c213d72ec6
commit fb686bdebd

View File

@@ -797,18 +797,15 @@ enum_value_to_string :: proc(val: any) -> (string, bool) {
#partial switch e in type_info.variant {
case: return "", false;
case runtime.Type_Info_Enum:
get_str :: proc(i: $T, e: runtime.Type_Info_Enum) -> (string, bool) {
if reflect.is_string(e.base) {
for val, idx in e.values {
if v, ok := val.(T); ok && v == i {
return e.names[idx], true;
}
}
} else if len(e.values) == 0 {
get_str :: proc(data: rawptr, e: runtime.Type_Info_Enum) -> (string, bool) {
if len(e.values) == 0 {
return "", true;
} else {
for val, idx in e.values {
if v, ok := val.(T); ok && v == i {
for _, idx in e.values {
val := &e.values[idx];
// NOTE(bill): Removes need for parametric polymorphic check
res := mem.compare_ptrs(val, data, e.base.size);
if res == 0 {
return e.names[idx], true;
}
}
@@ -816,21 +813,7 @@ enum_value_to_string :: proc(val: any) -> (string, bool) {
return "", false;
}
a := any{v.data, runtime.type_info_base(e.base).id};
switch v in a {
case rune: return get_str(v, e);
case i8: return get_str(v, e);
case i16: return get_str(v, e);
case i32: return get_str(v, e);
case i64: return get_str(v, e);
case int: return get_str(v, e);
case u8: return get_str(v, e);
case u16: return get_str(v, e);
case u32: return get_str(v, e);
case u64: return get_str(v, e);
case uint: return get_str(v, e);
case uintptr: return get_str(v, e);
}
return get_str(v.data, e);
}
return "", false;