|
@@ -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;
|