aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-07-13 11:35:01 +0100
committerGinger Bill <bill@gingerbill.org>2017-07-13 11:35:01 +0100
commit03570275c1cfd14014d81bcdf085c320c1902c40 (patch)
tree3e23c41050d6fd61044b4cad5a80f03a833fb738
parentb5587f1937edf8440fdf713988c9e3bc38886e93 (diff)
Fix issue #78 and have a better error message.
-rw-r--r--core/_preload.odin2
-rw-r--r--src/check_expr.cpp6
2 files changed, 5 insertions, 3 deletions
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;