This commit is contained in:
gingerBill
2023-07-07 22:56:20 +01:00
parent 8f4c59b080
commit 3758be55f5
2 changed files with 22 additions and 19 deletions

View File

@@ -664,6 +664,11 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand
if (check_representable_as_constant(c, operand->value, dst, nullptr)) {
if (is_type_typed(dst) && src->kind == Type_Basic) {
switch (src->Basic.kind) {
case Basic_UntypedBool:
if (is_type_boolean(dst)) {
return 1;
}
break;
case Basic_UntypedRune:
if (is_type_integer(dst) || is_type_rune(dst)) {
return 1;
@@ -704,46 +709,55 @@ gb_internal i64 check_distance_between_types(CheckerContext *c, Operand *operand
return -1;
}
if (src->kind == Type_Basic) {
Type *d = base_array_type(dst);
i64 score = -1;
switch (src->Basic.kind) {
case Basic_UntypedBool:
if (is_type_boolean(d)) {
score = 1;
}
break;
case Basic_UntypedRune:
if (is_type_integer(dst) || is_type_rune(dst)) {
if (is_type_integer(d) || is_type_rune(d)) {
score = 1;
}
break;
case Basic_UntypedInteger:
if (is_type_integer(dst) || is_type_rune(dst)) {
if (is_type_integer(d) || is_type_rune(d)) {
score = 1;
}
break;
case Basic_UntypedString:
if (is_type_string(dst)) {
if (is_type_string(d)) {
score = 1;
}
break;
case Basic_UntypedFloat:
if (is_type_float(dst)) {
if (is_type_float(d)) {
score = 1;
}
break;
case Basic_UntypedComplex:
if (is_type_complex(dst)) {
if (is_type_complex(d)) {
score = 1;
}
if (is_type_quaternion(dst)) {
if (is_type_quaternion(d)) {
score = 2;
}
break;
case Basic_UntypedQuaternion:
if (is_type_quaternion(dst)) {
if (is_type_quaternion(d)) {
score = 1;
}
break;
}
if (score > 0) {
if (is_type_typed(dst)) {
if (is_type_typed(d)) {
score += 1;
}
if (d != dst) {
score += 6;
}
}
return score;
}