gingerBill 2 years ago
parent
commit
3758be55f5
2 changed files with 22 additions and 19 deletions
  1. 22 8
      src/check_expr.cpp
  2. 0 11
      src/checker.cpp

+ 22 - 8
src/check_expr.cpp

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

+ 0 - 11
src/checker.cpp

@@ -285,17 +285,6 @@ gb_internal Scope *create_scope_from_package(CheckerContext *c, AstPackage *pkg)
 }
 
 gb_internal void destroy_scope(Scope *scope) {
-	for (auto const &entry : scope->elements) {
-		Entity *e = entry.value;
-		if (e->kind == Entity_Variable) {
-			if (!(e->flags & EntityFlag_Used)) {
-#if 0
-				warning(e->token, "Unused variable '%.*s'", LIT(e->token.string));
-#endif
-			}
-		}
-	}
-
 	for (Scope *child = scope->head_child; child != nullptr; child = child->next) {
 		destroy_scope(child);
 	}