diff --git a/core/_preload.odin b/core/_preload.odin index 9d012de0d..597ef284b 100644 --- a/core/_preload.odin +++ b/core/_preload.odin @@ -417,7 +417,7 @@ __get_map_header :: proc(m: ^map[$K]$V) -> __MapHeader #cc_contextless { value: V; } - _, is_string := type_info_base(type_info(K)).(^TypeInfo.String); + _, is_string := type_info_base(type_info(K)).variant.(TypeInfo.String); header.is_key_string = is_string; header.entry_size = size_of(Entry); header.entry_align = align_of(Entry); diff --git a/src/check_expr.cpp b/src/check_expr.cpp index ba182db3f..c19fc9afb 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -6980,7 +6980,7 @@ ExprKind check_expr_base_internal(Checker *c, Operand *o, AstNode *node, Type *t if (!ok) { gbString expr_str = expr_to_string(o->expr); gbString dst_type_str = type_to_string(t); - error(o->expr, "Cannot type assert `%s` to `%s`", expr_str, dst_type_str); + error(o->expr, "Cannot type assert `%s` to `%s` as it is not a variant of that union", expr_str, dst_type_str); gb_string_free(dst_type_str); gb_string_free(expr_str); o->mode = Addressing_Invalid; @@ -7000,7 +7000,9 @@ ExprKind check_expr_base_internal(Checker *c, Operand *o, AstNode *node, Type *t add_type_info_type(c, o->type); add_type_info_type(c, t); } else { - error(o->expr, "Type assertions can only operate on unions and `any`"); + gbString str = type_to_string(o->type); + error(o->expr, "Type assertions can only operate on unions and `any`, got %s", str); + gb_string_free(str); o->mode = Addressing_Invalid; o->expr = node; return kind;