aboutsummaryrefslogtreecommitdiff
path: root/src/checker/expr.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2016-09-07 19:23:00 +0100
committerGinger Bill <bill@gingerbill.org>2016-09-07 19:23:00 +0100
commit7ba13a18a33d8f852eb41b58da662ddb4649d04f (patch)
tree89663aff3ad0c5e5f62a3432d269dcee050a71ed /src/checker/expr.cpp
parent2c4193a24226b084797af61e29c8355835c179a8 (diff)
Basic variadic `print` procedure
Diffstat (limited to 'src/checker/expr.cpp')
-rw-r--r--src/checker/expr.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/checker/expr.cpp b/src/checker/expr.cpp
index e55efd56d..b5fb1249f 100644
--- a/src/checker/expr.cpp
+++ b/src/checker/expr.cpp
@@ -2714,6 +2714,8 @@ void check_call_arguments(Checker *c, Operand *operand, Type *proc_type, AstNode
GB_ASSERT(call->kind == AstNode_CallExpr);
GB_ASSERT(proc_type->kind == Type_Proc);
ast_node(ce, CallExpr, call);
+
+
isize error_code = 0;
isize param_index = 0;
isize param_count = 0;
@@ -2723,6 +2725,15 @@ void check_call_arguments(Checker *c, Operand *operand, Type *proc_type, AstNode
param_count = proc_type->Proc.params->Tuple.variable_count;
}
+ if (ce->ellipsis.pos.line != 0) {
+ if (!variadic) {
+ error(&c->error_collector, ce->ellipsis,
+ "Cannot use `..` in call to a non-variadic procedure: `%.*s`",
+ LIT(ce->proc->Ident.string));
+ return;
+ }
+ }
+
if (ce->arg_list_count == 0) {
if (variadic && param_count-1 == 0)
return;
@@ -2730,6 +2741,8 @@ void check_call_arguments(Checker *c, Operand *operand, Type *proc_type, AstNode
return;
}
+
+
if (ce->arg_list_count > param_count && !variadic) {
error_code = +1;
} else {