From b095aedd386e076d1f5a56b7384b836e653387d1 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 17 Sep 2019 01:28:55 +0200 Subject: Add support for r8-r15 registers, pass args to registers directly (sys-v) --- src/parser.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src/parser.c') diff --git a/src/parser.c b/src/parser.c index ed99eb0..9da9147 100644 --- a/src/parser.c +++ b/src/parser.c @@ -24,6 +24,7 @@ do { \ #define VAR_MAX_LEN UINT8_MAX #define FUNC_MAX_PARAMS 128 #define FUNC_MAX_RETURN_TYPES 128 +#define FUNC_MAX_ARGS FUNC_MAX_PARAMS static CHECK_RESULT Ast* parser_parse_rhs(Parser *self); static CHECK_RESULT Ast* parser_parse_body(Parser *self); @@ -425,8 +426,8 @@ static CHECK_RESULT StructDecl* parser_parse_struct_decl(Parser *self) { FUNC_ARGS = (RHS_START)? (',' RHS_START)* ')' */ static void parser_parse_function_args(Parser *self, FunctionCall *func_call) { - bool first_arg; - first_arg = bool_true; + bool first_arg = bool_true; + int arg_index = 0; for(;;) { Ast *arg_expr; @@ -442,6 +443,13 @@ static void parser_parse_function_args(Parser *self, FunctionCall *func_call) { arg_expr = parser_parse_rhs(self); throw_if_error(buffer_append(&func_call->args, &arg_expr, sizeof(arg_expr))); + ++arg_index; + if (arg_index > FUNC_MAX_ARGS) { + self->error = tokenizer_create_error(&self->tokenizer, + tokenizer_get_error_index(&self->tokenizer), + "A closure can't take more than %d arguments", FUNC_MAX_ARGS); + throw(PARSER_ERR); + } } } -- cgit v1.2.3