From: Brendan Hansen Date: Thu, 14 Jan 2021 22:48:42 +0000 (-0600) Subject: removed AstCall.arg_count X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=d7ae594065b36bbafe53218a8317bac8ccc07a6f;p=onyx.git removed AstCall.arg_count --- diff --git a/bin/onyx b/bin/onyx index 6880818d..2137d52e 100755 Binary files a/bin/onyx and b/bin/onyx differ diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 135a491c..5679e6d1 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -510,7 +510,6 @@ struct AstRangeLiteral { struct AstCall { AstTyped_base; - u64 arg_count; bh_arr(AstArgument *) arg_arr; bh_arr(AstNamedValue *) named_args; // '.value' is a pointer to AstArgument. @@ -521,7 +520,6 @@ struct AstCall { struct AstIntrinsicCall { AstTyped_base; - u64 arg_count; bh_arr(AstArgument *) arg_arr; bh_arr(AstNamedValue *) named_args; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index e29d952c..dbbe4380 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -433,8 +433,9 @@ CheckStatus check_call(AstCall* call) { if (callee->kind == Ast_Kind_Function) { if (bh_arr_length(arg_arr) < bh_arr_length(callee->params)) { - while (bh_arr_length(arg_arr) < bh_arr_length(callee->params) && callee->params[call->arg_count].default_value != NULL) { - AstTyped* dv = callee->params[call->arg_count].default_value; + while (bh_arr_length(arg_arr) < bh_arr_length(callee->params) + && callee->params[bh_arr_length(arg_arr)].default_value != NULL) { + AstTyped* dv = callee->params[bh_arr_length(arg_arr)].default_value; AstArgument* new_arg = make_argument(semstate.node_allocator, dv); bh_arr_push(arg_arr, new_arg); @@ -730,7 +731,6 @@ static AstCall* binaryop_try_operator_overload(AstBinaryOp* binop) { AstCall* implicit_call = onyx_ast_node_new(semstate.node_allocator, sizeof(AstCall), Ast_Kind_Call); implicit_call->token = binop->token; - implicit_call->arg_count = 2; implicit_call->callee = overload; implicit_call->va_kind = VA_Kind_Not_VA; diff --git a/src/onyxparser.c b/src/onyxparser.c index ad1d6fca..c415e82f 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -612,27 +612,20 @@ static AstTyped* parse_factor(OnyxParser* parser) { AstCall* call_node = make_node(AstCall, Ast_Kind_Call); call_node->token = expect_token(parser, '('); call_node->callee = retval; - call_node->arg_count = 0; bh_arr_new(global_heap_allocator, call_node->arg_arr, 2); + bh_arr_new(global_heap_allocator, call_node->named_args, 2); - while (parser->curr->type != ')') { - if (parser->hit_unexpected_token) return retval; - - AstArgument* arg = make_node(AstArgument, Ast_Kind_Argument); - arg->token = parser->curr; - arg->value = parse_expression(parser, 0); - - if (arg != NULL && arg->kind != Ast_Kind_Error) { - bh_arr_push(call_node->arg_arr, arg); - call_node->arg_count++; - } + parse_values_and_named_values(parser, ')', + (bh_arr(AstNode *) *) &call_node->arg_arr, + &call_node->named_args); - if (parser->curr->type != ')') - expect_token(parser, ','); - } + // Wrap expressions in AstArgument + bh_arr_each(AstArgument *, arg, call_node->arg_arr) + *arg = make_argument(parser->allocator, (AstTyped *) *arg); - consume_token(parser); + bh_arr_each(AstNamedValue *, named_value, call_node->named_args) + (*named_value)->value = (AstNode *) make_argument(parser->allocator, (AstTyped *) (*named_value)->value); retval = (AstTyped *) call_node; break; diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 1c5fbaa9..71b90e08 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -300,7 +300,6 @@ static void symres_pipe(AstBinaryOp** pipe) { bh_arr_insertn(call_node->arg_arr, 0, 1); call_node->arg_arr[0] = make_argument(semstate.node_allocator, (*pipe)->left); - call_node->arg_count++; call_node->next = (*pipe)->next; // NOTE: Not a BinaryOp node diff --git a/src/onyxutils.c b/src/onyxutils.c index dbb34a08..4be805a6 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -372,7 +372,7 @@ static bh_arr(AstPolySolution) find_polymorphic_slns(AstPolyProc* pp, PolyProcLo Type* actual_type; if (pp_lookup == PPLM_By_Call) { - if (param->idx >= ((AstCall *) actual)->arg_count) { + if (param->idx >= (u64) bh_arr_length(((AstCall *) actual)->arg_arr)) { if (err_msg) *err_msg = "Not enough arguments to polymorphic procedure."; goto sln_not_found; }