aboutsummaryrefslogtreecommitdiff
path: root/src/check_stmt.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-06-22 13:47:50 +0100
committerGinger Bill <bill@gingerbill.org>2017-06-22 13:47:50 +0100
commit8744c60563c4a4ae1a08cbdc2ed4db3755416c0c (patch)
tree57984acf7297fec9a467b7517c27124390694774 /src/check_stmt.cpp
parent8197c02dcf964be404cd199858e84e9e8f3905e5 (diff)
Clean up code for return statements, slightly
Diffstat (limited to 'src/check_stmt.cpp')
-rw-r--r--src/check_stmt.cpp34
1 files changed, 18 insertions, 16 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp
index fcd601446..3337aa13b 100644
--- a/src/check_stmt.cpp
+++ b/src/check_stmt.cpp
@@ -900,24 +900,26 @@ void check_stmt_internal(Checker *c, AstNode *node, u32 flags) {
gb_string_free(str);
}
}
- } else {
- // TODO(bill): Cleanup this checking of variables
- if (result_count == 0 && rs->results.count > 0) {
- error(rs->results[0], "No return values expected");
- } else if (operands.count > result_count) {
+
+ } else if (result_count == 0 && rs->results.count > 0) {
+ error(rs->results[0], "No return values expected");
+ } else if (operands.count > result_count) {
+ if (result_count_excluding_defaults < result_count) {
error(node, "Expected a maximum of %td return values, got %td", result_count, operands.count);
- } else if (operands.count < result_count_excluding_defaults) {
- error(node, "Expected %td return values, got %td", result_count_excluding_defaults, operands.count);
- } else if (result_count_excluding_defaults == 0) {
- return;
- } else if (rs->results.count == 0) {
- error(node, "Expected %td return values, got 0", result_count_excluding_defaults);
} else {
- isize max_count = rs->results.count;
- for (isize i = 0; i < max_count; i++) {
- Entity *e = pt->results->Tuple.variables[i];
- check_assignment(c, &operands[i], e->type, str_lit("return statement"));
- }
+ error(node, "Expected %td return values, got %td", result_count, operands.count);
+ }
+ } else if (operands.count < result_count_excluding_defaults) {
+ if (result_count_excluding_defaults < result_count) {
+ error(node, "Expected a minimum of %td return values, got %td", result_count_excluding_defaults, operands.count);
+ } else {
+ error(node, "Expected %td return values, got %td", result_count_excluding_defaults, operands.count);
+ }
+ } else {
+ isize max_count = rs->results.count;
+ for (isize i = 0; i < max_count; i++) {
+ Entity *e = pt->results->Tuple.variables[i];
+ check_assignment(c, &operands[i], e->type, str_lit("return statement"));
}
}