aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFeoramund <161657516+Feoramund@users.noreply.github.com>2025-05-31 07:09:29 -0400
committerFeoramund <161657516+Feoramund@users.noreply.github.com>2025-05-31 07:09:29 -0400
commit57019f199cc18d75970023c88a428930527b70d4 (patch)
tree09ad2a0cb0b89e2831ff7ff257b03cad0a099609
parentd52aa3f2c22362f417e440e988e186f683449261 (diff)
Add suggestions for `quaternionN` or `complexN` conversions
Quaternions and complex numbers are constructed with `quaternion` and `complex`, but their types are of the `*N` form. These suggestions should point the user in the right direction.
-rw-r--r--src/check_expr.cpp22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 60a4d3a98..20918c8f9 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -7960,7 +7960,27 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c
default:
{
gbString str = type_to_string(t);
- error(call, "Too many arguments in conversion to '%s'", str);
+ if (t->kind == Type_Basic) {
+ ERROR_BLOCK();
+ switch (t->Basic.kind) {
+ case Basic_complex32:
+ case Basic_complex64:
+ case Basic_complex128:
+ error(call, "Too many arguments in conversion to '%s'", str);
+ error_line("\tSuggestion: %s(1+2i) or construct with 'complex'\n", str);
+ break;
+ case Basic_quaternion64:
+ case Basic_quaternion128:
+ case Basic_quaternion256:
+ error(call, "Too many arguments in conversion to '%s'", str);
+ error_line("\tSuggestion: %s(1+2i+3j+4k) or construct with 'quaternion'\n", str);
+ break;
+ default:
+ error(call, "Too many arguments in conversion to '%s'", str);
+ }
+ } else {
+ error(call, "Too many arguments in conversion to '%s'", str);
+ }
gb_string_free(str);
} break;
case 1: {