From e49ef324dd2171c471d4a31efdb4560f9360d9a5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 16 Jan 2021 11:15:08 -0600 Subject: [PATCH] better error reporting for polymorphic procedures --- include/onyxastnodes.h | 6 +++--- onyx.exe | Bin 421376 -> 421888 bytes src/onyxastnodes.c | 2 +- src/onyxchecker.c | 22 ++++++++++++++-------- src/onyxsymres.c | 2 +- src/onyxutils.c | 28 ++++++++++++++++------------ 6 files changed, 35 insertions(+), 25 deletions(-) diff --git a/include/onyxastnodes.h b/include/onyxastnodes.h index 7fe4c937..dd93a7f7 100644 --- a/include/onyxastnodes.h +++ b/include/onyxastnodes.h @@ -1009,9 +1009,9 @@ typedef enum PolyProcLookupMethod { PPLM_By_Function_Type, PPLM_By_Arguments, } PolyProcLookupMethod; -AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxFilePos pos); -AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos); -AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos); +AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxToken* tkn); +AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxToken* tkn); +AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxToken* tkn); AstFunction* polymorphic_proc_build_only_header(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual); diff --git a/onyx.exe b/onyx.exe index 018363e400c939ca96ad12d8a0e3164173a0e48f..c405dd6fd0d0dc5741b099274e0a19e84d9ae724 100644 GIT binary patch delta 50946 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 ax~0_C$gPXECT~r@Eo_^o>qQ;u`u_mJFG;`v delta 50600 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 z zaPTlD0-g@mOQLYWBf+7VD0l+68xsvr1uF@kq%|&e!1xC*uO|!P z8Q_T{6fSr=IO-^=1y2BzzM^ay|KQ}4lr4B7DDkIV%J~ilaN1dy3WO(u`_H*lQFto2 z=UY<9a4_u(RSupGPWg^hG5*1JHz}y_7_i12QUV?c?tMT?z*E5$zmXE~6maDWY8gB} z1#*Hx*lCD#Fwx=zUhrgaUk*zxg{Oi`a`7QAV-F@VUvih>;E5o?4j$N$lVGO6W5A`DS>^z6OCwUq_y_CoCE}&6O1Q^5-DETygyW6<@6 zrTpQ6U{*9cF2Yp@Hqq=tY8n2nrRrnK!K1;Em~eOk_y;D!_~~k?`0u-0DiVp9~2dPO{<<4*HKEx!{3d7ADmkFp`h7W76QUV9{A5o$(LenoY{V zv%uSPNjby8A&I0MJORu;kCeO4Il-BjT<~PD$b9lY1Q9-;7-LGqQ^CDLav2VWF0)i~ z;|E-d=?qT+F_MD^+u{9JR1BM zlVSXT$1(Alh;+yrzA=*pPXUv+^Cc_8!I%_FIX4Ip_#-9|o(108Ny-@xKHEjg!PRcQ zz3nFD;E7zf%3+G2piN-z*hr4gkCTMfHQnf-%oXBE!LPFL8q>f`>4D;n9EdbtlXa zV-MbNY&8O&1y0qrN-*}|VLw|Wo?wu&?MqvMI~C#(WRq=E%fY?TNP z1%F!1T1>cF!aB_5j@kfE25TleY8N~b9Jh+ag78Fe)oMqj!BfBw*Rh}io&Y9qa8!n| z2fyCT0#SH6SYsWM!c)N)sg4ST2eOJ|2Bs1` z5&VA&c^|92E)A0Q>*NVo-Q2xa)S@J6Ms9ZFFYNLuVmo?5eaTCrqwv( z37iw5)iiiA*#2#;78-l-Mi1=ZS>PuzTJ3@-f;9)=4vz%W2WoX1o&i2*?&B4BATtE7 zk6^YRJPT|!8q6^Lf5?!rTD`y_0lXZqmH#ac28SnbAUpxg!i2!pM6GsXLgA@k{3NDA z!V|%ZlSwsr26*gaMxEj5VDC?~ih{?2A5YV&qwx>koxw$75Lq*{YB`&Lz@x#2bG3>y z9Ndto)f9LN7`T7~;h|ujB(0Vj4#tR9Yv8e9^~LywM}l8}rquy>I;fX2#SI<^-ojjg zXT?M8Wq2?S;ATu3JOymBoS49)L2HGVn-SgCm_Lm@7?sRP;4$DtjJi$sfKM_0aJ5pa z&oSowyjf7`K5p;&Xu6)4{GA zh`Bi!oQpAj62WtrSmOt5w~>^AM}w0wCaDv__M5btW$eLYn84fd{B72%493JD23(6V zF-QTw#VmveZqaJxR`T1}gNHE2e=7LiHn0C!a4N>wCxR8WdoLUg4#RBV*aYyXk7t0R zn(m|u83%AJ#$1dyM`}JM&0GxJgGq;*7XfB)KN4=R@@@}baKxJGb`A3T#g@K<{hCV2 zp?)>ZOOr@HRTJpEF>zzsMztwoQ|zVwVMZFB18KR1VO8L%aJ%atvGTcfrn QY~8yxYpc80MIGb%KkJnw5&!@I diff --git a/src/onyxastnodes.c b/src/onyxastnodes.c index ba52da93..b2a2eb6e 100644 --- a/src/onyxastnodes.c +++ b/src/onyxastnodes.c @@ -415,7 +415,7 @@ b32 type_check_or_auto_cast(AstTyped** pnode, Type* type) { assert(node != NULL); if (node->kind == Ast_Kind_Polymorphic_Proc) { - AstFunction* func = polymorphic_proc_lookup((AstPolyProc *) node, PPLM_By_Function_Type, type, node->token->pos); + AstFunction* func = polymorphic_proc_lookup((AstPolyProc *) node, PPLM_By_Function_Type, type, node->token); if (func == NULL) return 0; *pnode = (AstTyped *) func; diff --git a/src/onyxchecker.c b/src/onyxchecker.c index 25459e0f..b6f90a59 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -450,11 +450,7 @@ CheckStatus check_call(AstCall* call) { } if (callee->kind == Ast_Kind_Polymorphic_Proc) { - call->callee = (AstTyped *) polymorphic_proc_lookup( - (AstPolyProc *) call->callee, - PPLM_By_Call, - call, - call->token->pos); + call->callee = (AstTyped *) polymorphic_proc_lookup((AstPolyProc *) call->callee, PPLM_By_Call, call, call->token); if (call->callee == NULL) return Check_Error; @@ -1126,13 +1122,17 @@ CheckStatus check_range_literal(AstRangeLiteral** prange) { type_lookup_member(expected_range_type, "low", &smem); if (!type_check_or_auto_cast(&range->low, smem.type)) { - onyx_report_error(range->token->pos, "Expected left side of range to be a 32-bit integer."); + onyx_report_error(range->token->pos, + "Expected left side of range to be a 32-bit integer, got '%s'.", + type_get_name(range->low->type)); return Check_Error; } type_lookup_member(expected_range_type, "high", &smem); if (!type_check_or_auto_cast(&range->high, smem.type)) { - onyx_report_error(range->token->pos, "Expected right side of range to be a 32-bit integer."); + onyx_report_error(range->token->pos, + "Expected right side of range to be a 32-bit integer, got '%s'.", + type_get_name(range->high->type)); return Check_Error; } @@ -1522,7 +1522,13 @@ CheckStatus check_block(AstBlock* block) { CheckStatus check_function(AstFunction* func) { semstate.expected_return_type = func->type->Function.return_type; - if (func->body) return check_block(func->body); + if (func->body) { + CheckStatus status = check_block(func->body); + if (status != Check_Success && func->generated_from) + onyx_report_error(func->generated_from->pos, "Error in polymorphic procedure generated from this location."); + + return status; + } return Check_Success; } diff --git a/src/onyxsymres.c b/src/onyxsymres.c index fd30f2a4..1bdd3df6 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -565,7 +565,7 @@ static void symres_directive_solidify(AstDirectiveSolidify** psolid) { if (onyx_has_errors()) return; } - solid->resolved_proc = polymorphic_proc_try_solidify(solid->poly_proc, solid->known_polyvars, solid->token->pos); + solid->resolved_proc = polymorphic_proc_try_solidify(solid->poly_proc, solid->known_polyvars, solid->token); // NOTE: Not a DirectiveSolidify. *psolid = (AstDirectiveSolidify *) solid->resolved_proc; diff --git a/src/onyxutils.c b/src/onyxutils.c index f5c4e252..eec1472c 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -167,6 +167,7 @@ static void insert_poly_slns_into_scope(Scope* scope, bh_arr(AstPolySolution) sl case PSK_Value: // CLEANUP: Maybe clone this? + assert(sln->value->flags & Ast_Flag_Comptime); node = (AstNode *) sln->value; break; } @@ -459,17 +460,17 @@ sln_not_found: return NULL; } -AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxFilePos pos) { +AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, PolyProcLookupMethod pp_lookup, ptr actual, OnyxToken* tkn) { ensure_polyproc_cache_is_created(pp); char *err_msg = NULL; bh_arr(AstPolySolution) slns = find_polymorphic_slns(pp, pp_lookup, actual, &err_msg); if (slns == NULL) { - if (err_msg != NULL) onyx_report_error(pos, err_msg); - else onyx_report_error(pos, "Some kind of error occured when generating a polymorphic procedure. You hopefully will not see this"); + if (err_msg != NULL) onyx_report_error(tkn->pos, err_msg); + else onyx_report_error(tkn->pos, "Some kind of error occured when generating a polymorphic procedure. You hopefully will not see this"); } - AstFunction* result = polymorphic_proc_solidify(pp, slns, pos); + AstFunction* result = polymorphic_proc_solidify(pp, slns, tkn); bh_arr_free(slns); return result; @@ -522,7 +523,7 @@ static char* build_poly_slns_unique_key(bh_arr(AstPolySolution) slns) { return key_buf; } -b32 add_solidified_function_entities(AstSolidifiedFunction solidified_func, b32 header_already_processed) { +static b32 add_solidified_function_entities(AstSolidifiedFunction solidified_func, b32 header_already_processed) { solidified_func.func->flags |= Ast_Flag_Function_Used; solidified_func.func->flags |= Ast_Flag_From_Polymorphism; @@ -554,7 +555,7 @@ b32 add_solidified_function_entities(AstSolidifiedFunction solidified_func, b32 return 1; } -AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos) { +AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxToken* tkn) { ensure_polyproc_cache_is_created(pp); // NOTE: Check if a version of this polyproc has already been created. @@ -566,7 +567,7 @@ AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) clone_function_body(semstate.node_allocator, solidified_func.func, pp->base_func); if (!add_solidified_function_entities(solidified_func, 1)) { - onyx_report_error(pos, "Error in polymorphic procedure header generated from this call site."); + onyx_report_error(tkn->pos, "Error in polymorphic procedure header generated from this call site."); return NULL; } @@ -577,22 +578,25 @@ AstFunction* polymorphic_proc_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) } AstSolidifiedFunction solidified_func; - solidified_func.poly_scope = scope_create(semstate.node_allocator, pp->poly_scope, pos); + solidified_func.poly_scope = scope_create(semstate.node_allocator, pp->poly_scope, tkn->pos); insert_poly_slns_into_scope(solidified_func.poly_scope, slns); solidified_func.func = (AstFunction *) ast_clone(semstate.node_allocator, pp->base_func); bh_table_put(AstSolidifiedFunction, pp->concrete_funcs, unique_key, solidified_func); + solidified_func.func->generated_from = tkn; + if (!add_solidified_function_entities(solidified_func, 0)) { - onyx_report_error(pos, "Error in polymorphic procedure header generated from this call site."); + onyx_report_error(tkn->pos, "Error in polymorphic procedure header generated from this call site."); return NULL; } + return solidified_func.func; } // NOTE: This can return either a AstFunction or an AstPolyProc, depending if enough parameters were // supplied to remove all the polymorphic variables from the function. -AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxFilePos pos) { +AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) slns, OnyxToken* tkn) { i32 valid_argument_count = 0; bh_arr_each(AstPolySolution, sln, slns) { @@ -608,7 +612,7 @@ AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) if (found_match) { valid_argument_count++; } else { - onyx_report_error(pos, "'%b' is not a type variable of '%b'.", + onyx_report_error(tkn->pos, "'%b' is not a type variable of '%b'.", sln->poly_sym->token->text, sln->poly_sym->token->length, pp->token->text, pp->token->length); return (AstNode *) pp; @@ -616,7 +620,7 @@ AstNode* polymorphic_proc_try_solidify(AstPolyProc* pp, bh_arr(AstPolySolution) } if (valid_argument_count == bh_arr_length(pp->poly_params)) { - return (AstNode *) polymorphic_proc_solidify(pp, slns, pos); + return (AstNode *) polymorphic_proc_solidify(pp, slns, tkn); } else { // HACK: Some of these initializations assume that the entity for this polyproc has -- 2.25.1