Fix bug: Disallow non-specialized polymorphic in typeid assignment

This commit is contained in:
gingerBill
2023-09-06 17:33:38 +01:00
parent c660b43105
commit aaaff9b66c
3 changed files with 25 additions and 7 deletions

View File

@@ -629,6 +629,9 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand
if (operand->mode == Addressing_Type) {
if (is_type_typeid(type)) {
if (is_type_polymorphic(operand->type)) {
return -1;
}
add_type_info_type(c, operand->type);
return 4;
}
@@ -1118,10 +1121,17 @@ gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *typ
LIT(context_name));
break;
case Addressing_Type:
error(operand->expr,
"Cannot assign '%s' which is a type in %.*s",
op_type_str,
LIT(context_name));
if (is_type_polymorphic(operand->type)) {
error(operand->expr,
"Cannot assign '%s' which is a polymorphic type in %.*s",
op_type_str,
LIT(context_name));
} else {
error(operand->expr,
"Cannot assign '%s' which is a type in %.*s",
op_type_str,
LIT(context_name));
}
break;
default:
// TODO(bill): is this a good enough error message?