From c63fa82389f06ab7520e6bb11fa825c8bd6204a2 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 1 Jun 2021 12:34:11 -0500 Subject: [PATCH] fixed overloaded procedures with baked value polymorphism --- bin/onyx | Bin 366208 -> 366208 bytes src/onyxutils.c | 10 ++++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bin/onyx b/bin/onyx index b330d5c72f2278e0b622b71d064bd3bce1c7a6e1..dc3d228877a870d61bec4aaf80c3e19225fae247 100755 GIT binary patch delta 456 zcmZozE7q`9Y(odLh@B;G0c-b>>N6pyzuaD(u_r(6l1%d)=Jq+vjN9ihGsTzG^Llg# zXf!04{PXAxQ3>$rb`|jGWv$uC#NcUpfWIYyoq^$-6N>zR}oUrw*8 zXR2h3nf|4o=@sLI>GvC${xF7azthO%smNHcU2QSbA2!CW?aHf|)R-AlwtKB*ddkSi zHQiu6lN_VhbpQ2CYK%JD%hofoGYTH^NOt()(aUnk!}3t^QqRuo+xs>!O=PSOQBmkF zl<{c2#NV=t0qD(Srys6{|1Ce%wEI~8s7va0lmOEFeP#du|M%)H`KjR5YxAqwjWex`C`#poSS7K$-3om4IeT%~F;IPZLJR=KoCmEoDIMAXa$>kYp@P z^5}L^@$dlYIKei(u7XL5@y7I-6-;KV{PHdg4BIbMFtxEU8cq+dXHsH(I=!l%sgf~b z`j>j9SByQ=?>8|0VGP`Ur;*81kuht#+G3_ZY>X}2l~*yTF*C+(_gc&Jl#!8Ty1{xT zIYyW1{_C047}d6yt!H9q6g=pW?C`^*m*t>`<-y{mo}K5n_ibRB$XM^9qR?F^19s0U z2B1fi1Ae#~{-skM05u zk8XBwXf#`Bdh`MVli%gnix*=5{)2qz0MrHYuL98g5;2h3p3TP@!9fNzwSE!5Jd*>% a_63`m&ayCWY|q=y1jNkS^R}}H-3I_Uv#B-! diff --git a/src/onyxutils.c b/src/onyxutils.c index 64a44ff1..a2d2fb45 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -667,7 +667,10 @@ static void solve_for_polymorphic_param_value(PolySolveResult* resolved, AstPoly // HACK: Storing the original value because if this was an AstArgument, we need to flag // it as baked if it is determined that the argument is of the correct kind and type. AstTyped* orig_value = value; - if (value->kind == Ast_Kind_Argument) value = ((AstArgument *) value)->value; + if (value->kind == Ast_Kind_Argument) { + ((AstArgument *) orig_value)->is_baked = 0; + value = ((AstArgument *) value)->value; + } if (param->type_expr == (AstType *) &type_expr_symbol) { if (!node_is_type((AstNode *) value)) { @@ -1024,7 +1027,10 @@ AstTyped* find_matching_overload_by_arguments(bh_arr(AstTyped *) overloads, Argu AstTyped** value = &args.values[i]; if (type_to_match->kind == Type_Kind_VarArgs) type_to_match = type_to_match->VarArgs.ptr_to_data->Pointer.elem; - if ((*value)->kind == Ast_Kind_Argument) value = &((AstArgument *) *value)->value; + if ((*value)->kind == Ast_Kind_Argument) { + if (((AstArgument *) (*value))->is_baked) continue; + value = &((AstArgument *) *value)->value; + } if (!type_check_or_auto_cast(value, type_to_match)) { all_arguments_work = 0; -- 2.25.1