aboutsummaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/util.c2
-rw-r--r--api/vm.c8
2 files changed, 6 insertions, 4 deletions
diff --git a/api/util.c b/api/util.c
index b6f9b49..655213a 100644
--- a/api/util.c
+++ b/api/util.c
@@ -17,7 +17,7 @@ void uwuutil_require_min(const char *fnname, UwUVMArgs *args, size_t n)
{
if (args->num < n) {
if (n == 1)
- error("type error: %s requires at least one optional argument, but none were given\n", fnname);
+ error("type error: %s requires at least one argument, but none were given\n", fnname);
else
error("type error: %s requires at least %d arguments, but only %d were given\n", fnname, n, args->num);
}
diff --git a/api/vm.c b/api/vm.c
index 52a003c..eb384d7 100644
--- a/api/vm.c
+++ b/api/vm.c
@@ -44,10 +44,12 @@ UwUVMValue uwuvm_evaluate_expression(UwUVMExpression *expression, UwUVMArgs *arg
return uwustr_create(expression->value.str_value);
case EX_ARGNUM:
- if ((size_t) expression->value.int_value >= args->num)
- error("type error: not enough arguments (accessed argument $%d, but only %lu arguments were passed)\n", expression->value.int_value, args->num);
+ if (expression->value.int_value == 0)
+ error("type error: trying to access argument $0\n");
+ if ((size_t) expression->value.int_value > args->num)
+ error("type error: trying to access argument $%d, but only %lu arguments were passed)\n", expression->value.int_value, args->num);
- return uwuvm_clone_value(uwuvm_get_arg(args, expression->value.int_value));
+ return uwuvm_clone_value(uwuvm_get_arg(args, expression->value.int_value - 1));
case EX_FNNAME:
return uwuref_create(expression->value.ref_value);