Browse Source

Add better suggestion for [?]T mistake

gingerBill 1 year ago
parent
commit
8ff788f4ff
1 changed files with 6 additions and 1 deletions
  1. 6 1
      src/check_expr.cpp

+ 6 - 1
src/check_expr.cpp

@@ -119,6 +119,8 @@ gb_internal bool is_diverging_expr(Ast *expr);
 
 gb_internal isize get_procedure_param_count_excluding_defaults(Type *pt, isize *param_count_);
 
+gb_internal bool is_expr_inferred_fixed_array(Ast *type_expr);
+
 enum LoadDirectiveResult {
 	LoadDirective_Success  = 0,
 	LoadDirective_Error    = 1,
@@ -2242,6 +2244,10 @@ gb_internal void check_assignment_error_suggestion(CheckerContext *c, Operand *o
 		error_line("\tSuggestion: the expression may be casted to %s\n", b);
 	} else if (check_integer_exceed_suggestion(c, o, type, max_bit_size)) {
 		return;
+	} else if (is_expr_inferred_fixed_array(c->type_hint_expr) && is_type_array_like(type) && is_type_array_like(o->type)) {
+		gbString s = expr_to_string(c->type_hint_expr);
+		error_line("\tSuggestion: make sure that `%s` is attached to the compound literal directly\n", s);
+		gb_string_free(s);
 	}
 }
 
@@ -8678,7 +8684,6 @@ gb_internal bool is_expr_inferred_fixed_array(Ast *type_expr) {
 		return false;
 	}
 
-
 	// [?]Type
 	if (type_expr->kind == Ast_ArrayType && type_expr->ArrayType.count != nullptr) {
 		Ast *count = type_expr->ArrayType.count;