Fix issue #78 and have a better error message.

This commit is contained in:
Ginger Bill
2017-07-13 11:35:01 +01:00
parent b5587f1937
commit 03570275c1
2 changed files with 5 additions and 3 deletions

View File

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

View File

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