From d04874ecf25e96c7b55e8cdcfb42856fcbdacba5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 30 Aug 2020 07:59:55 -0500 Subject: [PATCH] massive renaming of internal compiler things --- Makefile | 2 +- docs/plan | 8 +- include/bh.h | 20 ++ include/onyxerrors.h | 34 +++ include/onyxmsgs.h | 72 ------- include/onyxparser.h | 2 +- include/onyxsempass.h | 2 +- include/onyxwasm.h | 2 +- onyx | Bin 582896 -> 580416 bytes progs/poly_test.onyx | 21 +- src/onyx.c | 23 +- src/onyxbuiltins.c | 6 +- src/onyxchecker.c | 329 ++++++++++------------------- src/onyxerrors.c | 66 ++++++ src/onyxmsgs.c | 107 ---------- src/onyxparser.c | 71 ++----- src/onyxsempass.c | 4 +- src/onyxsymres.c | 50 ++--- src/onyxutils.c | 22 +- src/onyxwasm.c | 475 ++++++++++++++++++++---------------------- 20 files changed, 532 insertions(+), 784 deletions(-) create mode 100644 include/onyxerrors.h delete mode 100644 include/onyxmsgs.h create mode 100644 src/onyxerrors.c delete mode 100644 src/onyxmsgs.c diff --git a/Makefile b/Makefile index 21ec2025..597d5dd3 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ OBJ_FILES=\ build/onyxsempass.o \ build/onyxsymres.o \ build/onyxchecker.o \ - build/onyxmsgs.o \ + build/onyxerrors.o \ build/onyxutils.o \ build/onyxwasm.o \ build/onyxdoc.o \ diff --git a/docs/plan b/docs/plan index 898280e8..d135c900 100644 --- a/docs/plan +++ b/docs/plan @@ -218,6 +218,11 @@ HOW: [X] Basic documentation outputter + [X] Rewrite error reporting system + - don't sort errors + - add infos to warnings + - no more preformatted strings, just write them inline ffs + [ ] #file and #line directives - string and u32 respectively that represent the current file and line number where the directive is @@ -232,9 +237,6 @@ HOW: - struct member names - array length - [ ] Clean up error messages - - Stop using Msg_Type_Literal everywhere and be more specific - [ ] 'use' enums and packages at an arbitrary scope [ ] convert to using an 'atom' like table diff --git a/include/bh.h b/include/bh.h index e5f0be86..37d7b785 100644 --- a/include/bh.h +++ b/include/bh.h @@ -143,6 +143,26 @@ static inline u64 log2_dumb(u64 n) { +static inline const char* bh_num_suffix(u64 i) { + if (i == 11 || i == 12 || i == 13) return "th"; + + switch (i % 10) { + case 0: return "th"; + case 1: return "st"; + case 2: return "nd"; + case 3: return "rd"; + case 4: return "th"; + case 5: return "th"; + case 6: return "th"; + case 7: return "th"; + case 8: return "th"; + case 9: return "th"; + + default: return ""; + } +} + + //------------------------------------------------------------------------------------- diff --git a/include/onyxerrors.h b/include/onyxerrors.h new file mode 100644 index 00000000..dcc2fbfa --- /dev/null +++ b/include/onyxerrors.h @@ -0,0 +1,34 @@ +#ifndef ONYXERRORS_H +#define ONYXERRORS_H + +#include "bh.h" +#include "onyxlex.h" + +#include + +#define ONYX_ERR_BUFFER_SIZE 256 + +typedef struct OnyxError { + OnyxFilePos pos; + char *text; +} OnyxError; + +typedef struct OnyxErrors { + bh_arena msg_arena; + bh_allocator msg_alloc; + + // NOTE: Pointer to a table mapping file paths to + // their file contents. Used for better error messages + bh_table(bh_file_contents)* file_contents; + + bh_arr(OnyxError) errors; +} OnyxErrors; + +extern OnyxErrors msgs; + +void onyx_errors_init(bh_table(bh_file_contents)* files); +void onyx_report_error(OnyxFilePos pos, char * format, ...); +void onyx_errors_print(); +b32 onyx_has_errors(); + +#endif diff --git a/include/onyxmsgs.h b/include/onyxmsgs.h deleted file mode 100644 index 81c41865..00000000 --- a/include/onyxmsgs.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef ONYXMSGS_H -#define ONYXMSGS_H - -#include "bh.h" -#include "onyxlex.h" - -#include - -#define ONYX_MSG_BUFFER_SIZE 256 - -typedef enum MsgType { - Msg_Type_Literal, - Msg_Type_Expected_Token, - Msg_Type_Unexpected_Token, - Msg_Type_Unknown_Type, - Msg_Type_Not_Lval, - Msg_Type_Assign_Const, - Msg_Type_Unknown_Symbol, - Msg_Type_Unknown_Directive, - - Msg_Type_Redeclare_Symbol, - Msg_Type_Binop_Mismatch, - Msg_Type_Assignment_Mismatch, - Msg_Type_Global_Type_Mismatch, - Msg_Type_Expected_Expression, - Msg_Type_Call_Non_Function, - - Msg_Type_Function_Return_Mismatch, - Msg_Type_Function_Param_Mismatch, - - Msg_Type_Duplicate_Member, - Msg_Type_No_Field, - Msg_Type_Duplicate_Value, - Msg_Type_Field_No_Value, - - Msg_Type_Multiple_Cases, - - Msg_Type_Unresolved_Type, - Msg_Type_Unresolved_Symbol, - - Msg_Type_Failed_Gen_Load, - Msg_Type_Failed_Gen_Store, - Msg_Type_File_Not_Found, - - Msg_Type_Count, -} MsgType; - -typedef struct Message { - MsgType type; - OnyxFilePos pos; - struct Message* next; - char text[ONYX_MSG_BUFFER_SIZE]; -} Message; - -typedef struct OnyxMessages { - bh_allocator allocator; - - // NOTE: Pointer to a table mapping file paths to - // their file contents. Used for better error messages - bh_table(bh_file_contents)* file_contents; - - Message* first; -} OnyxMessages; - -extern OnyxMessages msgs; - -void onyx_message_init(bh_allocator allocator, bh_table(bh_file_contents)* files); -void onyx_message_add(MsgType type, OnyxFilePos pos, ...); -void onyx_message_print(); -b32 onyx_message_has_errors(); - -#endif diff --git a/include/onyxparser.h b/include/onyxparser.h index f4e69dc5..0da8dc2a 100644 --- a/include/onyxparser.h +++ b/include/onyxparser.h @@ -4,7 +4,7 @@ #include "bh.h" #include "onyxlex.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" #include "onyxastnodes.h" typedef struct NodeToProcess { diff --git a/include/onyxsempass.h b/include/onyxsempass.h index 5a61171a..145795c5 100644 --- a/include/onyxsempass.h +++ b/include/onyxsempass.h @@ -5,7 +5,7 @@ #include "onyxlex.h" #include "onyxastnodes.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" typedef struct SemState { // NOTE: Adding node_allocator in case we need diff --git a/include/onyxwasm.h b/include/onyxwasm.h index 11a6c4a6..8c803d7d 100644 --- a/include/onyxwasm.h +++ b/include/onyxwasm.h @@ -4,7 +4,7 @@ #include "bh.h" #include "onyxastnodes.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" typedef u8 WasmType; diff --git a/onyx b/onyx index ceacaca6cc918d42e89930c37ec176f37c11c934..fb29383a70d23a223cee9f1396eb95a4b30cbbd9 100755 GIT binary patch delta 213799 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�N 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∈K(-FS2;f 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
W3~#adji}Z2|BUEi0tmcZF)L-uST*Gj%0en6utC zQ<)Gy)o7a-k3Cd>JL6-pr$QIcF|-#MZ^t5diy3bNPe%POVF_3=?R}L#ti>LM^A!_% z>=u>u3C?kn@z^6W;vJ>iYxk;zBRM_3Q;<5pw2u;W4dZ2uEB6d%Xxcj*(Vrt?kL?=H zc|(~(afWmE zDBuRhZ9x&_zt1gkrHa-bm*p6~hoiq`je0hEfN}o@ zMF(>sd40wB37$E0WBjBfmz9V$G18j%h1VqHU;on%5+Fzy{rG>HYho$=TMhVKVX;w!leC zu`Y5tGj4E88p`R1xQ8F22FTI5{gqhlIJ%zk*b|NxFdpl*;(W$qT>xCp`0YGWc4hjv zD14BHgZL$MCP!@J46%pvKEwErIL(l*?>YS&Za$Uc2uH`Bw)Y$3p`TTHuXnc4Cy=^g z56a8}PUg6u&C%;H$~k@PF<65Y9@fV3^rMmGn!p)i&()pHcwe4y-^l6DV?6di?G22- z%-yf2z`Gd#7H{gv5qTz0TAxA$8OWiSxyD}3(E12|;{6Weuf;T@BaFv-^*hG+x_+u6 zZYCo1jPoZ)#2yP3Pm^4zI`(|db(rKNL)EKaQkG0~=*mQTs)AiSRh_3`IEhwtcI7Le zJLCCCkLh!!HZ!J4lrrPkV<87H9$c>|cnrofevmtwKU4v=nZSwu>KKhK_ULRt`RMwS zJJa(ig8HtU>+p-p7(4C0-AfUEn2E%C)P0=s*yFR`!f;I58NdcQPL)C1&FP=uC&FYF z{&f%MdD1q_e(3s0;UTT=xB?#G496*ggb$l-mBL#)O`^2vjK}&6Y!6)4LyVqEIeqMr z<$W2CJuP>P!X0gWnUd)RC80LOee@o*^#z=-?T-rgin;WUCr#<<&?s?#g(q+sPWjW!;YD6tU;sPXjJ(Jw}I%IDPE#hvzY#!4DYg zSS42x9gJ?VhVQEM!?X`~sg#pB!^2GI>{}H8&mr=9lJQl%?9FS`+CIXmC}$n!6m(=S zT_4K77$F$n(^=u($mhdaCG|(KCvT@QPM(hG`h#b{?Q(bm(2Enq9;`PCIO%LxjNMOl z^&K$RWt{Cdo~J*}mA97hSnsUs89z5>zH>L@<6l$qeX4HS4#s2sqrIT;u(q80xoep5 zyPP4`wdLoG$2zV#!FcS^&PJ|MWbEPWsf;UEMi?5>xL?fUh`l_;8o(u}Vm$T$!qXU! zJ%n`*DjMr~hGELyobf-s>=Pv_Pw6>4& za=a5uSBa@2K4iRNp9**2qJOFIuy*(sg%qiH?H5GIPLr1msu@qfOpL5_{x${t#GO_# z<9&I;wvgLNFW^LHKup7}<@D+-m}j4pk$-0}^y`b8i3y6+*PT9RY> z>QhZ-@ZY|P^yHw=Q}dp&(=*CSHTe;>{Mb=uRNqunWcyx9c<(z?8BHHkD_DLrOX=Ld zy{sodB1>PhU-Y@pe`Yz(DIe0y@8%;@ z->`jpe9O1(?ip{|Rmt*$_f{X=N3MR;7G~tGf7+wX$gvOYe4lTZ<2ncJlK5TR!0>AF zh=caazQV^`=M&)G`XpXe9`T7i%vWFQ-T*ws+oJOBHSSxV*xge$_fYN8yWbK?Ib=Vl z`>wa$w-4JT&T5_=FIma$w#IcnwX1{-Zy1QLw`YE87yH((bg%r>?iYW8UR}V|uhM-R z$>K{NrKX5MvZL!9LAc<36@ER#9glFzcl5Fst|D&(Y5kT|_rW7}wl6)?ef5al&o`-! o8-En{`&PLlaF5^r2=%m@_Ix|{hNE^>+ztCxc!7KR$9B8_2P{=JIsgCw delta 219111 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Ξ^45(ftVknRek5cB!)frEM(&t7KT^m`+gTK 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%0DeDH!w_ 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 LkR4M)pP=jyIc>XS diff --git a/progs/poly_test.onyx b/progs/poly_test.onyx index 45ccbbf4..58b542c7 100644 --- a/progs/poly_test.onyx +++ b/progs/poly_test.onyx @@ -67,12 +67,20 @@ SOA :: struct { b : [..] i64; } +soa_init :: proc (s: ^SOA) { + array_init(^s.a); + array_init(^s.b); +} + +soa_deinit :: proc (s: ^SOA) { + array_free(^s.a); + array_free(^s.b); +} + main :: proc (args: [] cstring) { s : SOA; - array_init(^s.a, 10); - array_init(^s.b, 10); - defer array_free(^s.a); - defer array_free(^s.b); + soa_init(^s); + defer soa_deinit(^s); print_arr_details(^s.a); print_arr_details(^s.b); @@ -83,7 +91,8 @@ main :: proc (args: [] cstring) { } print_arr(^s.a); - print_arr(array_to_slice(^s.a)); + array_to_slice(^s.a) |> print_arr(); + array_to_slice(^s.b) |> print_arr(); print("After adding...\n"); print_arr_details(^s.a); @@ -138,7 +147,7 @@ main2 :: proc (args: [] cstring) { print_arr_details(^barr); print_arr(^barr); - print(array_average(^barr)); + array_average(^barr) |> print(); print("\n"); print("Does the array contain 2637? "); diff --git a/src/onyx.c b/src/onyx.c index 32880828..75527496 100644 --- a/src/onyx.c +++ b/src/onyx.c @@ -3,7 +3,7 @@ #include "bh.h" #include "onyxlex.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" #include "onyxparser.h" #include "onyxsempass.h" #include "onyxutils.h" @@ -109,8 +109,8 @@ typedef enum CompilerProgress { typedef struct CompilerState { OnyxCompileOptions* options; - bh_arena ast_arena, msg_arena, sp_arena; - bh_allocator token_alloc, ast_alloc, msg_alloc, sp_alloc; + bh_arena ast_arena, sp_arena; + bh_allocator token_alloc, ast_alloc, sp_alloc; bh_table(bh_file_contents) loaded_files; bh_arr(const char *) queued_files; @@ -124,12 +124,8 @@ static void compiler_state_init(CompilerState* compiler_state, OnyxCompileOption program_info_init(&compiler_state->prog_info, global_heap_allocator); - bh_arena_init(&compiler_state->msg_arena, opts->allocator, 4096); - compiler_state->msg_alloc = bh_arena_allocator(&compiler_state->msg_arena); - bh_table_init(opts->allocator, compiler_state->loaded_files, 15); - - onyx_message_init(compiler_state->msg_alloc, &compiler_state->loaded_files); + onyx_errors_init(&compiler_state->loaded_files); compiler_state->token_alloc = opts->allocator; @@ -150,7 +146,6 @@ static void compiler_state_init(CompilerState* compiler_state, OnyxCompileOption static void compiler_state_free(CompilerState* cs) { bh_arena_free(&cs->ast_arena); - bh_arena_free(&cs->msg_arena); bh_arena_free(&cs->sp_arena); bh_table_free(cs->loaded_files); onyx_wasm_module_free(&cs->wasm_mod); @@ -333,7 +328,7 @@ static CompilerProgress process_source_file(CompilerState* compiler_state, char* ParseResults results = parse_source_file(compiler_state, &fc); merge_parse_results(compiler_state, &results); - if (onyx_message_has_errors()) { + if (onyx_has_errors()) { return ONYX_COMPILER_PROGRESS_FAILED_PARSE; } else { return ONYX_COMPILER_PROGRESS_SUCCESS; @@ -354,7 +349,7 @@ static i32 onyx_compile(CompilerState* compiler_state) { } initialize_builtins(compiler_state->ast_alloc, &compiler_state->prog_info); - if (onyx_message_has_errors()) { + if (onyx_has_errors()) { return ONYX_COMPILER_PROGRESS_FAILED_SEMPASS; } @@ -380,7 +375,7 @@ static i32 onyx_compile(CompilerState* compiler_state) { onyx_sempass_init(compiler_state->sp_alloc, compiler_state->ast_alloc); onyx_sempass(&compiler_state->prog_info); - if (onyx_message_has_errors()) { + if (onyx_has_errors()) { return ONYX_COMPILER_PROGRESS_FAILED_SEMPASS; } @@ -398,7 +393,7 @@ static i32 onyx_compile(CompilerState* compiler_state) { compiler_state->wasm_mod = onyx_wasm_module_create(compiler_state->options->allocator); onyx_wasm_module_compile(&compiler_state->wasm_mod, &compiler_state->prog_info); - if (onyx_message_has_errors()) { + if (onyx_has_errors()) { return ONYX_COMPILER_PROGRESS_FAILED_BINARY_GEN; } @@ -454,7 +449,7 @@ int main(int argc, char *argv[]) { case ONYX_COMPILER_PROGRESS_FAILED_PARSE: case ONYX_COMPILER_PROGRESS_FAILED_SEMPASS: case ONYX_COMPILER_PROGRESS_FAILED_BINARY_GEN: - onyx_message_print(); + onyx_errors_print(); break; case ONYX_COMPILER_PROGRESS_FAILED_OUTPUT: diff --git a/src/onyxbuiltins.c b/src/onyxbuiltins.c index 67f1a2c5..d1cd9261 100644 --- a/src/onyxbuiltins.c +++ b/src/onyxbuiltins.c @@ -1,6 +1,6 @@ #include "onyxastnodes.h" #include "onyxtypes.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" #include "onyxutils.h" AstBasicType basic_type_void = { Ast_Kind_Basic_Type, 0, NULL, "void" , &basic_types[Basic_Kind_Void] }; @@ -65,9 +65,7 @@ void initialize_builtins(bh_allocator a, ProgramInfo* prog) { Package* p = program_info_package_lookup_or_create(prog, "builtin", prog->global_scope, a); builtin_string_type = (AstType *) symbol_raw_resolve(p->scope, "string"); if (builtin_string_type == NULL) { - onyx_message_add(Msg_Type_Literal, - (OnyxFilePos) { 0 }, - "'string' struct not found in builtin package"); + onyx_report_error((OnyxFilePos) { 0 }, "'string' struct not found in builtin package."); return; } } \ No newline at end of file diff --git a/src/onyxchecker.c b/src/onyxchecker.c index c3d1b54f..1c491448 100644 --- a/src/onyxchecker.c +++ b/src/onyxchecker.c @@ -46,17 +46,15 @@ b32 check_return(AstReturn* retnode) { if (check_expression(&retnode->expr)) return 1; if (!types_are_compatible(retnode->expr->type, semstate.expected_return_type)) { - onyx_message_add(Msg_Type_Function_Return_Mismatch, - retnode->expr->token->pos, + onyx_report_error(retnode->expr->token->pos, + "Expected to return a value of type '%s', returning value of type '%s'.", type_get_name(retnode->expr->type), type_get_name(semstate.expected_return_type)); return 1; } } else { if (semstate.expected_return_type->Basic.size > 0) { - onyx_message_add(Msg_Type_Literal, - retnode->token->pos, - "returning from non-void function without value"); + onyx_report_error(retnode->token->pos, "returning from non-void function without value"); return 1; } } @@ -70,9 +68,7 @@ b32 check_if(AstIfWhile* ifnode) { if (check_expression(&ifnode->cond)) return 1; if (!type_is_bool(ifnode->cond->type)) { - onyx_message_add(Msg_Type_Literal, - ifnode->cond->token->pos, - "expected boolean type for condition"); + onyx_report_error(ifnode->cond->token->pos, "expected boolean type for condition"); return 1; } @@ -88,9 +84,7 @@ b32 check_while(AstIfWhile* whilenode) { if (check_expression(&whilenode->cond)) return 1; if (!type_is_bool(whilenode->cond->type)) { - onyx_message_add(Msg_Type_Literal, - whilenode->cond->token->pos, - "expected boolean type for condition"); + onyx_report_error(whilenode->cond->token->pos, "expected boolean type for condition"); return 1; } @@ -110,23 +104,17 @@ b32 check_for(AstFor* fornode) { fill_in_type((AstTyped *) fornode->var); if (!type_is_integer(fornode->start->type)) { - onyx_message_add(Msg_Type_Literal, - fornode->start->token->pos, - "expected expression of integer type for start"); + onyx_report_error(fornode->start->token->pos, "expected expression of integer type for start"); return 1; } if (!type_is_integer(fornode->end->type)) { - onyx_message_add(Msg_Type_Literal, - fornode->end->token->pos, - "expected expression of integer type for end"); + onyx_report_error(fornode->end->token->pos, "expected expression of integer type for end"); return 1; } if (!type_is_integer(fornode->step->type)) { - onyx_message_add(Msg_Type_Literal, - fornode->step->token->pos, - "expected expression of integer type for step"); + onyx_report_error(fornode->step->token->pos, "expected expression of integer type for step"); return 1; } @@ -138,16 +126,12 @@ b32 check_for(AstFor* fornode) { } if (!types_are_compatible(fornode->end->type, fornode->start->type)) { - onyx_message_add(Msg_Type_Literal, - fornode->end->token->pos, - "type of end does not match type of start"); + onyx_report_error(fornode->end->token->pos, "type of end does not match type of start"); return 1; } if (!types_are_compatible(fornode->step->type, fornode->start->type)) { - onyx_message_add(Msg_Type_Literal, - fornode->start->token->pos, - "type of step does not match type of start"); + onyx_report_error(fornode->start->token->pos, "type of step does not match type of start"); return 1; } @@ -162,9 +146,7 @@ b32 check_switch(AstSwitch* switchnode) { if (check_expression(&switchnode->expr)) return 1; if (!type_is_integer(switchnode->expr->type) && switchnode->expr->type->kind != Type_Kind_Enum) { - onyx_message_add(Msg_Type_Literal, - switchnode->expr->token->pos, - "expected integer or enum type for switch expression"); + onyx_report_error(switchnode->expr->token->pos, "expected integer or enum type for switch expression"); return 1; } @@ -181,9 +163,7 @@ b32 check_switch(AstSwitch* switchnode) { } if (sc->value->kind != Ast_Kind_NumLit) { - onyx_message_add(Msg_Type_Literal, - sc->value->token->pos, - "case statement expected compile time known integer"); + onyx_report_error(sc->value->token->pos, "case statement expected compile time known integer"); return 1; } @@ -194,9 +174,7 @@ b32 check_switch(AstSwitch* switchnode) { switchnode->max_case = bh_max(switchnode->max_case, value); if (bh_imap_has(&switchnode->case_map, value)) { - onyx_message_add(Msg_Type_Multiple_Cases, - sc->value->token->pos, - value); + onyx_report_error(sc->value->token->pos, "Multiple cases for values '%d'.", value); return 1; } @@ -236,9 +214,7 @@ no_match: continue; } - onyx_message_add(Msg_Type_Literal, - call->token->pos, - "unable to match overloaded function"); + onyx_report_error(call->token->pos, "unable to match overloaded function"); return NULL; } @@ -247,9 +223,7 @@ b32 check_call(AstCall* call) { AstFunction* callee = (AstFunction *) call->callee; if (callee->kind == Ast_Kind_Symbol) { - onyx_message_add(Msg_Type_Unresolved_Symbol, - callee->token->pos, - callee->token->text, callee->token->length); + onyx_report_error(callee->token->pos, "Unresolved symbol '%b'.", callee->token->text, callee->token->length); return 1; } @@ -262,17 +236,14 @@ b32 check_call(AstCall* call) { if (check_expression((AstTyped **) &actual_param)) return 1; if (actual_param->value->kind == Ast_Kind_Overloaded_Function) { - onyx_message_add(Msg_Type_Literal, - actual_param->token->pos, - "cannot pass overloaded functions as parameters."); + onyx_report_error(actual_param->token->pos, "Cannot pass overloaded functions as parameters."); return 1; } if (type_is_structlike_strict(actual_param->value->type)) { if (!type_structlike_is_simple(actual_param->value->type)) { - onyx_message_add(Msg_Type_Literal, - actual_param->token->pos, - "can only pass simple structs as parameters (no nested structures). passing by pointer is the only way for now."); + onyx_report_error(actual_param->token->pos, + "Can only pass simple structs as parameters (no nested structures). passing by pointer is the only way for now."); return 1; } } @@ -299,8 +270,8 @@ b32 check_call(AstCall* call) { fill_in_type((AstTyped *) callee); if (callee->type->kind != Type_Kind_Function) { - onyx_message_add(Msg_Type_Call_Non_Function, - call->token->pos, + onyx_report_error(call->token->pos, + "Attempting to call something that is not a function, '%b'.", callee->token->text, callee->token->length); return 1; } @@ -400,8 +371,8 @@ b32 check_call(AstCall* call) { i32 arg_pos = 0; while (arg_pos < callee->type->Function.param_count && actual_param != NULL) { if (!types_are_compatible(formal_params[arg_pos], actual_param->type)) { - onyx_message_add(Msg_Type_Function_Param_Mismatch, - actual_param->token->pos, + onyx_report_error(actual_param->token->pos, + "The function '%b' expects a value of type '%s' for parameter '%d', got '%s'.", callee->token->text, callee->token->length, type_get_name(formal_params[arg_pos]), arg_pos, @@ -414,16 +385,12 @@ b32 check_call(AstCall* call) { } if (arg_pos < callee->type->Function.param_count) { - onyx_message_add(Msg_Type_Literal, - call->token->pos, - "too few arguments to function call"); + onyx_report_error(call->token->pos, "Too few arguments to function call."); return 1; } if (actual_param != NULL) { - onyx_message_add(Msg_Type_Literal, - call->token->pos, - "too many arguments to function call"); + onyx_report_error(call->token->pos, "Too many arguments to function call."); return 1; } @@ -434,29 +401,27 @@ b32 check_call(AstCall* call) { b32 check_binop_assignment(AstBinaryOp* binop, b32 assignment_is_ok) { if (!assignment_is_ok) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "assignment not valid in expression"); + onyx_report_error(binop->token->pos, "Assignment not valid in expression."); return 1; } if (!is_lval((AstNode *) binop->left)) { - onyx_message_add(Msg_Type_Not_Lval, - binop->left->token->pos, + onyx_report_error(binop->left->token->pos, + "Cannot assign to '%b'.", binop->left->token->text, binop->left->token->length); return 1; } if ((binop->left->flags & Ast_Flag_Const) != 0 && binop->left->type != NULL) { - onyx_message_add(Msg_Type_Assign_Const, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Cannot assign to constant '%b.'.", binop->left->token->text, binop->left->token->length); return 1; } if (binop->right->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->right->token->text, binop->right->token->length); return 1; } @@ -501,8 +466,8 @@ b32 check_binop_assignment(AstBinaryOp* binop, b32 assignment_is_ok) { } if (!types_are_compatible(binop->left->type, binop->right->type)) { - onyx_message_add(Msg_Type_Assignment_Mismatch, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Cannot assign value of type '%s' to a '%s'.", type_get_name(binop->left->type), type_get_name(binop->right->type)); return 1; @@ -517,36 +482,32 @@ b32 check_binaryop_compare(AstBinaryOp** pbinop) { AstBinaryOp* binop = *pbinop; if (binop->left->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->left->token->text, binop->left->token->length); return 1; } if (binop->right->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->right->token->text, binop->right->token->length); return 1; } if (type_is_structlike_strict(binop->left->type)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "invalid type for left side of binary operator"); + onyx_report_error(binop->token->pos, "Invalid type for left side of comparison operator."); return 1; } if (type_is_structlike_strict(binop->right->type)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "invalid type for right side of binary operator"); + onyx_report_error(binop->token->pos, "Invalid type for right side of comparison operator."); return 1; } if (!types_are_compatible(binop->left->type, binop->right->type)) { - onyx_message_add(Msg_Type_Binop_Mismatch, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Cannot compare '%s' to '%s'.", type_get_name(binop->left->type), type_get_name(binop->right->type)); return 1; @@ -565,23 +526,21 @@ b32 check_binaryop_bool(AstBinaryOp** pbinop) { AstBinaryOp* binop = *pbinop; if (binop->left->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->left->token->text, binop->left->token->length); return 1; } if (binop->right->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->right->token->text, binop->right->token->length); return 1; } if (!type_is_bool(binop->left->type) || !type_is_bool(binop->right->type)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "boolean operator expects boolean types for both operands"); + onyx_report_error(binop->token->pos, "Boolean operator expects boolean types for both operands."); return 1; } @@ -611,62 +570,50 @@ b32 check_binaryop(AstBinaryOp** pbinop, b32 assignment_is_ok) { return check_binaryop_bool(pbinop); if (binop->left->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->left->token->text, binop->left->token->length); return 1; } if (binop->right->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Unable to resolve type for symbol '%b'.", binop->right->token->text, binop->right->token->length); return 1; } if (!type_is_numeric(binop->left->type) && !type_is_pointer(binop->left->type)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "expected numeric or pointer type for left side of binary operator"); + onyx_report_error(binop->token->pos, "Expected numeric or pointer type for left side of binary operator."); return 1; } if (!type_is_numeric(binop->right->type)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "expected numeric type for right side of binary operator"); + onyx_report_error(binop->token->pos, "Expected numeric type for right side of binary operator."); return 1; } if (type_is_pointer(binop->right->type)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "right side of binary operator is a pointer"); + onyx_report_error(binop->token->pos, "Right side of binary operator is a pointer."); return 1; } if (binop->left->type->kind == Type_Kind_Basic && binop->left->type->Basic.kind == Basic_Kind_Rawptr && !binop_is_compare(binop)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "cannot operate on a rawptr"); + onyx_report_error(binop->token->pos, "Cannot operate on a 'rawptr'. Cast it to a another pointer type first."); return 1; } b32 lptr = type_is_pointer(binop->left->type); if (lptr && (binop->operation != Binary_Op_Add && binop->operation != Binary_Op_Minus)) { - onyx_message_add(Msg_Type_Literal, - binop->token->pos, - "this operator is not supported for these operands"); + onyx_report_error(binop->token->pos, "This operator is not supported for these operands."); return 1; } if (lptr) { if (!type_is_integer(binop->right->type)) { - onyx_message_add(Msg_Type_Literal, - binop->right->token->pos, - "expected integer type"); + onyx_report_error(binop->right->token->pos, "Expected integer type."); return 1; } @@ -698,8 +645,8 @@ b32 check_binaryop(AstBinaryOp** pbinop, b32 assignment_is_ok) { } if (!types_are_compatible(binop->left->type, binop->right->type)) { - onyx_message_add(Msg_Type_Binop_Mismatch, - binop->token->pos, + onyx_report_error(binop->token->pos, + "Mismatched types for binary operation. left: '%s', right: '%s'.", type_get_name(binop->left->type), type_get_name(binop->right->type)); return 1; @@ -738,9 +685,11 @@ b32 check_struct_literal(AstStructLiteral* sl) { u32 mem_count = type_structlike_mem_count(sl->type); if (mem_count != bh_arr_length(sl->values)) { - onyx_message_add(Msg_Type_Literal, - sl->token->pos, - "incorrect number of initial values for this type"); + onyx_report_error(sl->token->pos, + "'%s' expects %d values, given %d.", + type_get_name(sl->type), + bh_arr_length(sl->values), + mem_count); return 1; } @@ -757,8 +706,9 @@ b32 check_struct_literal(AstStructLiteral* sl) { Type* formal = smem.type; if (!types_are_compatible(formal, (*actual)->type)) { - onyx_message_add(Msg_Type_Assignment_Mismatch, - sl->token->pos, + onyx_report_error(sl->token->pos, + "Mismatched types for %d%s member, expected '%s, got '%s'.", + i, bh_num_suffix(i), type_get_name(formal), type_get_name((*actual)->type)); return 1; @@ -778,9 +728,7 @@ b32 check_address_of(AstAddressOf* aof) { && aof->expr->kind != Ast_Kind_Field_Access && aof->expr->kind != Ast_Kind_Memres && aof->expr->kind != Ast_Kind_Local) { - onyx_message_add(Msg_Type_Literal, - aof->token->pos, - "cannot take the address of this"); + onyx_report_error(aof->token->pos, "Cannot take the address of value."); return 1; } @@ -795,16 +743,12 @@ b32 check_dereference(AstDereference* deref) { if (check_expression(&deref->expr)) return 1; if (!type_is_pointer(deref->expr->type)) { - onyx_message_add(Msg_Type_Literal, - deref->token->pos, - "cannot dereference non-pointer"); + onyx_report_error(deref->token->pos, "Cannot dereference non-pointer value."); return 1; } if (deref->expr->type == basic_type_rawptr.type) { - onyx_message_add(Msg_Type_Literal, - deref->token->pos, - "cannot dereference rawptr"); + onyx_report_error(deref->token->pos, "Cannot dereference 'rawptr'. Cast to another pointer type first."); return 1; } @@ -818,17 +762,13 @@ b32 check_array_access(AstArrayAccess* aa) { if (check_expression(&aa->expr)) return 1; if (!type_is_array_accessible(aa->addr->type)) { - onyx_message_add(Msg_Type_Literal, - aa->token->pos, - "expected pointer or array type for left of array access"); + onyx_report_error(aa->token->pos, "Expected pointer or array type for left of array access."); return 1; } if (aa->expr->type->kind != Type_Kind_Basic || (aa->expr->type->Basic.kind != Basic_Kind_I32 && aa->expr->type->Basic.kind != Basic_Kind_U32)) { - onyx_message_add(Msg_Type_Literal, - aa->token->pos, - "expected 32-bit integer type for index"); + onyx_report_error(aa->token->pos, "Expected type u32 or i32 for index."); return 1; } @@ -854,9 +794,7 @@ b32 check_array_access(AstArrayAccess* aa) { aa->type = aa->addr->type->Pointer.elem; } else { - onyx_message_add(Msg_Type_Literal, - aa->token->pos, - "invalid type for left of array access"); + onyx_report_error(aa->token->pos, "Invalid type for left of array access."); return 1; } @@ -871,25 +809,19 @@ b32 check_slice(AstSlice* sl) { if (check_expression(&sl->hi)) return 1; if (!type_is_pointer(sl->addr->type)) { - onyx_message_add(Msg_Type_Literal, - sl->token->pos, - "expected pointer or array type for left of slice creation"); + onyx_report_error(sl->token->pos, "Expected pointer or array type for left of slice creation."); return 1; } if (sl->lo->type->kind != Type_Kind_Basic || (sl->lo->type->Basic.kind != Basic_Kind_I32 && sl->lo->type->Basic.kind != Basic_Kind_U32)) { - onyx_message_add(Msg_Type_Literal, - sl->token->pos, - "expected 32-bit integer type for lower index"); + onyx_report_error(sl->lo->token->pos, "Expected type u32 or i32 for lower index."); return 1; } if (sl->hi->type->kind != Type_Kind_Basic || (sl->hi->type->Basic.kind != Basic_Kind_I32 && sl->hi->type->Basic.kind != Basic_Kind_U32)) { - onyx_message_add(Msg_Type_Literal, - sl->token->pos, - "expected 32-bit integer type for upper index"); + onyx_report_error(sl->hi->token->pos, "Expected type u32 or i32 for upper index."); return 1; } @@ -899,9 +831,7 @@ b32 check_slice(AstSlice* sl) { else if (sl->addr->type->kind == Type_Kind_Array) of = sl->addr->type->Array.elem; else { - onyx_message_add(Msg_Type_Literal, - sl->token->pos, - "invalid type for left of slice creation"); + onyx_report_error(sl->token->pos, "Invalid type for left of slice creation."); return 1; } @@ -916,17 +846,19 @@ b32 check_field_access(AstFieldAccess** pfield) { if (check_expression(&field->expr)) return 1; if (!type_is_structlike(field->expr->type)) { - onyx_message_add(Msg_Type_Literal, - field->token->pos, - "cannot access field on non structures"); + onyx_report_error(field->token->pos, + "Cannot access field '%b' on '%s'. Type is not a struct.", + field->token->text, + field->token->length, + type_get_name(field->expr->type)); return 1; } token_toggle_end(field->token); StructMember smem; if (!type_lookup_member(field->expr->type, field->token->text, &smem)) { - onyx_message_add(Msg_Type_No_Field, - field->token->pos, + onyx_report_error(field->token->pos, + "Field '%s' does not exists on '%s'.", field->token->text, type_get_name(field->expr->type)); token_toggle_end(field->token); @@ -956,9 +888,7 @@ b32 check_align_of(AstAlignOf* ao) { b32 check_expression(AstTyped** pexpr) { AstTyped* expr = *pexpr; if (expr->kind > Ast_Kind_Type_Start && expr->kind < Ast_Kind_Type_End) { - onyx_message_add(Msg_Type_Literal, - expr->token->pos, - "type used as part of an expression"); + onyx_report_error(expr->token->pos, "Type used as part of an expression."); return 1; } @@ -973,17 +903,15 @@ b32 check_expression(AstTyped** pexpr) { case Ast_Kind_Block: retval = check_block((AstBlock *) expr); break; case Ast_Kind_Symbol: - onyx_message_add(Msg_Type_Unresolved_Symbol, - expr->token->pos, + onyx_report_error(expr->token->pos, + "Unable to resolve symbol '%b'.", expr->token->text, expr->token->length); retval = 1; break; case Ast_Kind_Param: if (expr->type == NULL) { - onyx_message_add(Msg_Type_Literal, - expr->token->pos, - "local variable with unknown type"); + onyx_report_error(expr->token->pos, "Parameter with unknown type. You should hopefully never see this."); retval = 1; } break; @@ -1000,9 +928,7 @@ b32 check_expression(AstTyped** pexpr) { case Ast_Kind_Global: if (expr->type == NULL) { - onyx_message_add(Msg_Type_Literal, - expr->token->pos, - "global with unknown type"); + onyx_report_error(expr->token->pos, "Global with unknown type."); retval = 1; } break; @@ -1062,8 +988,8 @@ b32 check_global(AstGlobal* global) { fill_in_type((AstTyped *) global); if (global->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - global->token->pos, + onyx_report_error(global->token->pos, + "Unable to resolve type for global '%b'.", global->exported_name->text, global->exported_name->length); @@ -1083,20 +1009,7 @@ b32 check_statement(AstNode* stmt) { case Ast_Kind_For: return check_for((AstFor *) stmt); case Ast_Kind_Switch: return check_switch((AstSwitch *) stmt); case Ast_Kind_Block: return check_block((AstBlock *) stmt); - case Ast_Kind_Defer: { - if (!semstate.defer_allowed) { - onyx_message_add(Msg_Type_Literal, - stmt->token->pos, - "deferred statement not allowed in deferred block"); - return 1; - } - - semstate.defer_allowed = 0; - b32 state = check_statement(((AstDefer *) stmt)->stmt); - semstate.defer_allowed = 1; - - return state; - } + case Ast_Kind_Defer: return check_statement(((AstDefer *) stmt)->stmt); case Ast_Kind_Binary_Op: stmt->flags |= Ast_Flag_Expr_Ignored; @@ -1124,8 +1037,8 @@ b32 check_block(AstBlock* block) { fill_in_type(value); if (value->type == NULL) { - onyx_message_add(Msg_Type_Unresolved_Type, - value->token->pos, + onyx_report_error(value->token->pos, + "Unable to resolve type for local '%b'.", value->token->text, value->token->length); return 1; } @@ -1146,17 +1059,13 @@ b32 check_function(AstFunction* func) { b32 check_overloaded_function(AstOverloadedFunction* func) { bh_arr_each(AstTyped *, node, func->overloads) { if ((*node)->kind == Ast_Kind_Overloaded_Function) { - onyx_message_add(Msg_Type_Literal, - (*node)->token->pos, - "overload option can not be another overloaded function (yet)"); + onyx_report_error((*node)->token->pos, "Overload option can not be another overloaded function."); return 1; } if ((*node)->kind != Ast_Kind_Function) { - onyx_message_add(Msg_Type_Literal, - (*node)->token->pos, - "overload option not function"); + onyx_report_error((*node)->token->pos, "Overload option not function."); return 1; } @@ -1169,19 +1078,12 @@ b32 check_struct(AstStructType* s_node) { bh_table(i32) mem_set; bh_table_init(global_heap_allocator, mem_set, bh_arr_length(s_node->members)); - if (bh_arr_length(s_node->members) == 0) { - onyx_message_add(Msg_Type_Literal, - s_node->token->pos, - "empty structure"); - return 1; - } - bh_arr_each(AstStructMember *, member, s_node->members) { token_toggle_end((*member)->token); if (bh_table_has(i32, mem_set, (*member)->token->text)) { - onyx_message_add(Msg_Type_Duplicate_Member, - (*member)->token->pos, + onyx_report_error((*member)->token->pos, + "Duplicate struct member '%s'.", (*member)->token->text); token_toggle_end((*member)->token); @@ -1207,9 +1109,8 @@ b32 check_function_header(AstFunction* func) { AstLocal* local = param->local; if (expect_default_param && param->default_value == NULL) { - onyx_message_add(Msg_Type_Literal, - local->token->pos, - "all parameters must have default values after the first default valued parameter."); + onyx_report_error(local->token->pos, + "All parameters must have default values after the first default valued parameter."); return 1; } @@ -1218,17 +1119,13 @@ b32 check_function_header(AstFunction* func) { fill_in_type((AstTyped *) local); if (local->type == NULL) { - onyx_message_add(Msg_Type_Literal, - local->token->pos, - "function parameter types must be known"); + onyx_report_error(local->token->pos, "Function parameter types must be known."); return 1; } if (local->type->kind != Type_Kind_Array && type_size_of(local->type) == 0) { - onyx_message_add(Msg_Type_Literal, - local->token->pos, - "function parameters must have non-void types"); + onyx_report_error(local->token->pos, "Function parameters cannot have zero-width types."); return 1; } } @@ -1237,30 +1134,22 @@ b32 check_function_header(AstFunction* func) { if ((func->flags & Ast_Flag_Exported) != 0) { if ((func->flags & Ast_Flag_Foreign) != 0) { - onyx_message_add(Msg_Type_Literal, - func->token->pos, - "exporting a foreign function"); + onyx_report_error(func->token->pos, "exporting a foreign function"); return 1; } if ((func->flags & Ast_Flag_Intrinsic) != 0) { - onyx_message_add(Msg_Type_Literal, - func->token->pos, - "exporting a intrinsic function"); + onyx_report_error(func->token->pos, "exporting a intrinsic function"); return 1; } if ((func->flags & Ast_Flag_Inline) != 0) { - onyx_message_add(Msg_Type_Literal, - func->token->pos, - "exporting a inlined function"); + onyx_report_error(func->token->pos, "exporting a inlined function"); return 1; } if (func->exported_name == NULL) { - onyx_message_add(Msg_Type_Literal, - func->token->pos, - "exporting function without a name"); + onyx_report_error(func->token->pos, "exporting function without a name"); return 1; } } @@ -1276,17 +1165,15 @@ b32 check_memres(AstMemRes* memres) { check_expression(&memres->initial_value); if ((memres->initial_value->flags & Ast_Flag_Comptime) == 0) { - onyx_message_add(Msg_Type_Literal, - memres->initial_value->token->pos, - "top level expressions must be compile time known"); + onyx_report_error(memres->initial_value->token->pos, "Top level expressions must be compile time known."); return 1; } Type* memres_type = memres->type; if (!types_are_compatible(memres_type, memres->initial_value->type)) { - onyx_message_add(Msg_Type_Binop_Mismatch, - memres->token->pos, + onyx_report_error(memres->token->pos, + "Cannot assign value of type '%s' to a '%s'.", type_get_name(memres_type), type_get_name(memres->initial_value->type)); return 1; diff --git a/src/onyxerrors.c b/src/onyxerrors.c new file mode 100644 index 00000000..5e9879d0 --- /dev/null +++ b/src/onyxerrors.c @@ -0,0 +1,66 @@ + +#include "onyxerrors.h" +#include "onyxutils.h" + +#define MAX_MSGS 100 + +OnyxErrors errors; + +void onyx_errors_init(bh_table(bh_file_contents)* files) { + errors.file_contents = files; + + bh_arena_init(&errors.msg_arena, global_heap_allocator, 16 * 1024); + errors.msg_alloc = bh_arena_allocator(&errors.msg_arena); + + bh_arr_new(global_heap_allocator, errors.errors, 4); +} + +void onyx_report_error(OnyxFilePos pos, char * format, ...) { + + va_list vargs; + va_start(vargs, format); + char* msg = bh_bprintf_va(format, vargs); + va_end(vargs); + + OnyxError err = { + .pos = pos, + .text = bh_strdup(errors.msg_alloc, msg), + }; + + bh_arr_push(errors.errors, err); +} + +static void print_detailed_message(OnyxError* err, bh_file_contents* fc) { + bh_printf("(%s:%l,%l) %s\n", err->pos.filename, err->pos.line, err->pos.column, err->text); + + i32 linelength = 0; + char* walker = err->pos.line_start; + while (*walker != '\n') linelength++, walker++; + + i32 numlen = bh_printf(" %d | ", err->pos.line); + bh_printf("%b\n", err->pos.line_start, linelength); + + char* pointer_str = bh_alloc_array(global_scratch_allocator, char, linelength + numlen); + memset(pointer_str, ' ', linelength + numlen); + memset(pointer_str + err->pos.column + numlen - 1, '~', err->pos.length - 1); + pointer_str[err->pos.column + numlen - 2] = '^'; + pointer_str[err->pos.column + numlen + err->pos.length - 1] = 0; + + bh_printf("%s\n", pointer_str); +} + +void onyx_errors_print() { + bh_arr_each(OnyxError, err, errors.errors) { + if (err->pos.filename) { + bh_file_contents* fc = &bh_table_get(bh_file_contents, *errors.file_contents, (char *) err->pos.filename); + print_detailed_message(err, fc); + + } else { + bh_printf("(%l,%l) %s\n", err->pos.line, err->pos.column, err->text); + } + } +} + +b32 onyx_has_errors() { + return bh_arr_length(errors.errors) > 0; +} diff --git a/src/onyxmsgs.c b/src/onyxmsgs.c deleted file mode 100644 index b436e9a9..00000000 --- a/src/onyxmsgs.c +++ /dev/null @@ -1,107 +0,0 @@ - -#include "onyxmsgs.h" -#include "onyxutils.h" - -#define MAX_MSGS 100 - -OnyxMessages msgs; - -static const char* msg_formats[] = { - "%s", - "expected token '%s', got '%s'", - "unexpected token '%s'", - "unknown type '%s'", - "cannot assign to '%b'", - "attempt to assign to constant '%b'", - "unknown symbol '%s'", - "unknown directive '%b'", - - "redeclaration of symbol '%s'", - "mismatched types for binary operator, '%s', '%s'", - "mismatched types on assignment, expected '%s', got '%s'", - "mismatched types for global '%b'; expected '%s', got '%s'", - "expected expression, got '%s'", - "attempt to call non-function, '%b'", - - "returning '%s' from function that returns '%s'", - "function '%b' expected type '%s' in position '%d', got '%s'", - - "duplicate declaration of struct member '%s'", - "field '%s' does not exist on '%s'", - "duplicate value for struct member '%b'", - "no value provided for field '%b'", - - "multiple cases for '%l'", - - "unable to resolve type for symbol '%b'", - "unable to resolve symbol '%b'", - - "failed to generate load instruction for type '%s'", - "failed to generate store instruction for type '%s'", - - "file not found '%s'", -}; - -void onyx_message_init(bh_allocator allocator, bh_table(bh_file_contents)* files) { - msgs.allocator = allocator; - msgs.first = NULL; - msgs.file_contents = files; -} - -void onyx_message_add(MsgType type, OnyxFilePos pos, ...) { - Message* msg = bh_alloc_item(msgs.allocator, Message); - msg->type = type; - msg->pos = pos; - - va_list arg_list; - va_start(arg_list, pos); - bh_snprintf_va(msg->text, ONYX_MSG_BUFFER_SIZE, msg_formats[type], arg_list); - va_end(arg_list); - - Message** walker = &msgs.first; - while (*walker && strcmp((*walker)->pos.filename, pos.filename) < 0) walker = &(*walker)->next; - while (*walker && (*walker)->pos.line < pos.line) walker = &(*walker)->next; - while (*walker && (*walker)->pos.line == pos.line && (*walker)->pos.column < pos.column) walker = &(*walker)->next; - - msg->next = *walker; - *walker = msg; -} - -static void print_detailed_message(Message* msg, bh_file_contents* fc) { - bh_printf("(%s:%l,%l) %s\n", msg->pos.filename, msg->pos.line, msg->pos.column, msg->text); - - i32 linelength = 0; - char* walker = msg->pos.line_start; - while (*walker != '\n') linelength++, walker++; - - i32 numlen = bh_printf(" %d | ", msg->pos.line); - bh_printf("%b\n", msg->pos.line_start, linelength); - - char* pointer_str = bh_alloc_array(global_scratch_allocator, char, linelength + numlen); - memset(pointer_str, ' ', linelength + numlen); - memset(pointer_str + msg->pos.column + numlen - 1, '~', msg->pos.length - 1); - pointer_str[msg->pos.column + numlen - 2] = '^'; - pointer_str[msg->pos.column + numlen + msg->pos.length - 1] = 0; - - bh_printf("%s\n", pointer_str); -} - -void onyx_message_print() { - Message* msg = msgs.first; - i32 msg_count = MAX_MSGS; - - while (msg && msg_count-- > 0) { - if (msg->pos.filename) { - bh_file_contents* fc = &bh_table_get(bh_file_contents, *msgs.file_contents, (char *) msg->pos.filename); - - print_detailed_message(msg, fc); - } else { - bh_printf("(%l,%l) %s\n", msg->pos.line, msg->pos.column, msg->text); - } - msg = msg->next; - } -} - -b32 onyx_message_has_errors() { - return msgs.first != NULL; -} diff --git a/src/onyxparser.c b/src/onyxparser.c index 177b4ad6..223ccbd0 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -1,5 +1,5 @@ #include "onyxlex.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" #include "onyxparser.h" #include "onyxutils.h" @@ -85,9 +85,7 @@ static OnyxToken* expect_token(OnyxParser* parser, TokenType token_type) { consume_token(parser); if (token->type != token_type) { - onyx_message_add(Msg_Type_Expected_Token, - token->pos, - token_name(token_type), token_name(token->type)); + onyx_report_error(token->pos, "expected token '%s', got '%s'.", token_name(token_type), token_name(token->type)); parser->hit_unexpected_token = 1; parser->curr = &parser->tokenizer->tokens[bh_arr_length(parser->tokenizer->tokens) - 1]; return NULL; @@ -452,9 +450,7 @@ static AstTyped* parse_factor(OnyxParser* parser) { break; } default: { - onyx_message_add(Msg_Type_Literal, - char_lit->token->pos, - "invalid escaped character"); + onyx_report_error(char_lit->token->pos, "invalid escaped character"); break; } } @@ -464,16 +460,12 @@ static AstTyped* parse_factor(OnyxParser* parser) { break; } - onyx_message_add(Msg_Type_Literal, - parser->curr->pos, - "invalid directive in expression."); + onyx_report_error(parser->curr->pos, "invalid directive in expression."); return NULL; } default: - onyx_message_add(Msg_Type_Unexpected_Token, - parser->curr->pos, - token_name(parser->curr->type)); + onyx_report_error(parser->curr->pos, "unexpected token '%s'.", token_name(parser->curr->type)); return NULL; } @@ -947,14 +939,7 @@ static b32 parse_possible_symbol_declaration(OnyxParser* parser, AstNode** ret) consume_token(parser); AstTyped* expr = parse_expression(parser); - if (expr == NULL) { - token_toggle_end(parser->curr); - onyx_message_add(Msg_Type_Expected_Expression, - assignment->token->pos, - parser->curr->text); - token_toggle_end(parser->curr); - return 1; - } + if (expr == NULL) return 1; assignment->right = expr; AstNode* left_symbol = make_node(AstNode, Ast_Kind_Symbol); @@ -1108,15 +1093,7 @@ static AstNode* parse_statement(OnyxParser* parser) { break; } - if (needs_semicolon) { - if (parser->curr->type != ';') { - onyx_message_add(Msg_Type_Expected_Token, - parser->curr->pos, - token_name(';'), - token_name(parser->curr->type)); - } - consume_token(parser); - } + if (needs_semicolon) expect_token(parser, ';'); return retval; } @@ -1249,11 +1226,9 @@ static AstType* parse_type(OnyxParser* parser, bh_arr(AstPolyParam)* poly_vars) } else if (parser->curr->type == '$') { - if (poly_vars == NULL) { - onyx_message_add(Msg_Type_Literal, - parser->curr->pos, - "polymorphic variable not valid here."); - } + if (poly_vars == NULL) + onyx_report_error(parser->curr->pos, "polymorphic variable not valid here."); + bh_arr(AstPolyParam) pv = *poly_vars; consume_token(parser); @@ -1299,12 +1274,7 @@ static AstType* parse_type(OnyxParser* parser, bh_arr(AstPolyParam)* poly_vars) } else { - token_toggle_end(parser->curr); - onyx_message_add(Msg_Type_Unexpected_Token, - parser->curr->pos, - parser->curr->text); - token_toggle_end(parser->curr); - + onyx_report_error(parser->curr->pos, "unexpected token '%b'.", parser->curr->text, parser->curr->length); consume_token(parser); break; } @@ -1346,9 +1316,7 @@ static AstStructType* parse_struct(OnyxParser* parser) { OnyxToken* directive_token = expect_token(parser, '#'); OnyxToken* symbol_token = expect_token(parser, Token_Type_Symbol); - onyx_message_add(Msg_Type_Unknown_Directive, - directive_token->pos, - symbol_token->text, symbol_token->length); + onyx_report_error(directive_token->pos, "unknown directive '#%b'.", symbol_token->text, symbol_token->length); } } @@ -1535,9 +1503,7 @@ static AstFunction* parse_function_definition(OnyxParser* parser) { OnyxToken* directive_token = expect_token(parser, '#'); OnyxToken* symbol_token = expect_token(parser, Token_Type_Symbol); - onyx_message_add(Msg_Type_Unknown_Directive, - directive_token->pos, - symbol_token->text, symbol_token->length); + onyx_report_error(directive_token->pos, "unknown directive '#%b'.", symbol_token->text, symbol_token->length); } } @@ -1592,9 +1558,7 @@ static AstTyped* parse_global_declaration(OnyxParser* parser) { OnyxToken* directive_token = expect_token(parser, '#'); OnyxToken* symbol_token = expect_token(parser, Token_Type_Symbol); - onyx_message_add(Msg_Type_Unknown_Directive, - directive_token->pos, - symbol_token->text, symbol_token->length); + onyx_report_error(directive_token->pos, "unknown directive '#%b'.", symbol_token->text, symbol_token->length); } } @@ -1618,9 +1582,7 @@ static AstEnumType* parse_enum_declaration(OnyxParser* parser) { OnyxToken* directive_token = expect_token(parser, '#'); OnyxToken* symbol_token = expect_token(parser, Token_Type_Symbol); - onyx_message_add(Msg_Type_Unknown_Directive, - directive_token->pos, - symbol_token->text, symbol_token->length); + onyx_report_error(directive_token->pos, "unknown directive '#%b'.", symbol_token->text, symbol_token->length); } } @@ -1849,8 +1811,7 @@ static AstNode* parse_top_level_statement(OnyxParser* parser) { return (AstNode *) include; } else { - onyx_message_add(Msg_Type_Unknown_Directive, - dir_token->pos, dir_token->text, dir_token->length); + onyx_report_error(dir_token->pos, "unknown directive '#%b'.", dir_token->text, dir_token->length); return NULL; } } diff --git a/src/onyxsempass.c b/src/onyxsempass.c index 7324468e..73e33595 100644 --- a/src/onyxsempass.c +++ b/src/onyxsempass.c @@ -26,7 +26,7 @@ void onyx_sempass(ProgramInfo* program) { semstate.program = program; onyx_resolve_symbols(program); - if (onyx_message_has_errors()) return; + if (onyx_has_errors()) return; onyx_type_check(program); @@ -38,5 +38,5 @@ void onyx_sempass(ProgramInfo* program) { bh_arr_clear(semstate.other_entities); } - if (onyx_message_has_errors()) return; + if (onyx_has_errors()) return; } diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 7e4f10d5..a91641ad 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -56,11 +56,8 @@ static AstType* symres_type(AstType* type) { AstFieldAccess* field = (AstFieldAccess *) type; symres_field_access(&field); - if (!node_is_type((AstNode *) field)) { - onyx_message_add(Msg_Type_Literal, - type->token->pos, - "field access did not result in a type"); - } + if (!node_is_type((AstNode *) field)) + onyx_report_error(type->token->pos, "field access did not result in a type"); return (AstType *) field; } @@ -130,9 +127,6 @@ static AstType* symres_type(AstType* type) { return type; } - onyx_message_add(Msg_Type_Literal, - (OnyxFilePos) { 0 }, - onyx_ast_node_kind_string(type->kind)); return type; } @@ -194,9 +188,7 @@ static void symres_ufc(AstBinaryOp** ufc) { symres_expression(&(*ufc)->left); if (call_node->kind != Ast_Kind_Call) { - onyx_message_add(Msg_Type_Literal, - (*ufc)->token->pos, - "universal function call expected call on right side"); + onyx_report_error((*ufc)->token->pos, "universal function call expected call on right side"); return; } @@ -236,9 +228,7 @@ static void symres_struct_literal(AstStructLiteral* sl) { sl->type = type_build_from_ast(semstate.allocator, sl->type_node); if (!type_is_structlike_strict(sl->type)) { - onyx_message_add(Msg_Type_Literal, - sl->token->pos, - "type is not a constructable using a struct literal"); + onyx_report_error(sl->token->pos, "Type is not a constructable using a struct literal."); return; } @@ -250,18 +240,15 @@ static void symres_struct_literal(AstStructLiteral* sl) { bh_arr_each(AstStructMember *, smem, sl->named_values) { token_toggle_end((*smem)->token); if (!type_lookup_member(sl->type, (*smem)->token->text, &s)) { - onyx_message_add(Msg_Type_No_Field, - (*smem)->token->pos, - (*smem)->token->text, type_get_name(sl->type)); + onyx_report_error((*smem)->token->pos, + "The field '%s' does not exist on type '%s'.", (*smem)->token->text, type_get_name(sl->type)); token_toggle_end((*smem)->token); return; } token_toggle_end((*smem)->token); if (sl->values[s.idx] != NULL) { - onyx_message_add(Msg_Type_Duplicate_Value, - (*smem)->token->pos, - (*smem)->token->text, (*smem)->token->length); + onyx_report_error((*smem)->token->pos, "Multiple values given for '%b'.", (*smem)->token->text, (*smem)->token->length); return; } @@ -275,8 +262,7 @@ static void symres_struct_literal(AstStructLiteral* sl) { if (sl->values[idx] == NULL) { if (st->members[idx]->initial_value == NULL) { - onyx_message_add(Msg_Type_Field_No_Value, - sl->token->pos, + onyx_report_error(sl->token->pos, "No value was given for the field '%b'.", st->members[idx]->token->text, st->members[idx]->token->length); return; @@ -490,8 +476,8 @@ void symres_function(AstFunction* func) { if (param->default_value != NULL) { if (!types_are_compatible(param->local->type, param->default_value->type)) { - onyx_message_add(Msg_Type_Assignment_Mismatch, - param->local->token->pos, + onyx_report_error(param->local->token->pos, + "Expected default value of type '%s', was of type '%s'.", type_get_name(param->local->type), type_get_name(param->default_value->type)); return; @@ -529,9 +515,7 @@ void symres_function(AstFunction* func) { } } else { - onyx_message_add(Msg_Type_Literal, - param->local->token->pos, - "can only 'use' structures or pointers to structures."); + onyx_report_error(param->local->token->pos, "can only 'use' structures or pointers to structures."); } } } @@ -564,9 +548,7 @@ static void symres_use_package(AstUsePackage* package) { token_toggle_end(package->package->token); if (p == NULL) { - onyx_message_add(Msg_Type_Literal, - package->token->pos, - "package not found in included source files"); + onyx_report_error(package->token->pos, "package not found in included source files"); return; } @@ -585,9 +567,7 @@ static void symres_use_package(AstUsePackage* package) { AstNode* thing = symbol_resolve(p->scope, (*alias)->token); if (thing == NULL) { - onyx_message_add(Msg_Type_Literal, - (*alias)->token->pos, - "not found in package"); + onyx_report_error((*alias)->token->pos, "not found in package"); return; } @@ -619,9 +599,7 @@ static void symres_enum(AstEnumType* enum_node) { } else if ((*value)->value->type_node == (AstType *) &basic_type_i64) { next_assign_value = (*value)->value->value.l; } else { - onyx_message_add(Msg_Type_Literal, - (*value)->token->pos, - "expected numeric integer literal for enum initialization"); + onyx_report_error((*value)->token->pos, "expected numeric integer literal for enum initialization"); return; } diff --git a/src/onyxutils.c b/src/onyxutils.c index 00c7bae4..481aed41 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -3,7 +3,7 @@ #include "onyxutils.h" #include "onyxlex.h" #include "onyxastnodes.h" -#include "onyxmsgs.h" +#include "onyxerrors.h" #include "onyxparser.h" #include "onyxastnodes.h" #include "onyxsempass.h" @@ -156,7 +156,7 @@ b32 symbol_introduce(Scope* scope, OnyxToken* tkn, AstNode* symbol) { b32 symbol_raw_introduce(Scope* scope, char* name, OnyxFilePos pos, AstNode* symbol) { if (bh_table_has(AstNode *, scope->symbols, name)) { - onyx_message_add(Msg_Type_Redeclare_Symbol, pos, name); + onyx_report_error(pos, "Redeclaration of symbol '%s'.", name); return 0; } @@ -194,7 +194,7 @@ AstNode* symbol_resolve(Scope* start_scope, OnyxToken* tkn) { AstNode* res = symbol_raw_resolve(start_scope, tkn->text); if (res == NULL) { - onyx_message_add(Msg_Type_Unknown_Symbol, tkn->pos, tkn->text); + onyx_report_error(tkn->pos, "Unable to resolve symbol '%s'", tkn->text); token_toggle_end(tkn); return &empty_node; } @@ -389,9 +389,7 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, AstCall* call) { bh_arr_each(AstPolyParam, param, pp->poly_params) { AstArgument* arg = call->arguments; if (param->idx >= call->arg_count) { - onyx_message_add(Msg_Type_Literal, - call->token->pos, - "not enough arguments to polymorphic procedure."); + onyx_report_error(call->token->pos, "Not enough arguments to polymorphic procedure."); return NULL; } @@ -401,9 +399,7 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, AstCall* call) { Type* resolved_type = solve_poly_type(param->poly_sym, param->type_expr, arg_type); if (resolved_type == NULL) { - onyx_message_add(Msg_Type_Literal, - call->token->pos, - "unable to match polymorphic procedure type."); + onyx_report_error(call->token->pos, "Unable to match polymorphic procedure type."); return NULL; } @@ -431,16 +427,14 @@ AstFunction* polymorphic_proc_lookup(AstPolyProc* pp, AstCall* call) { bh_table_put(AstFunction *, pp->concrete_funcs, key_buf, func); symres_function(func); - if (onyx_message_has_errors()) goto has_error; + if (onyx_has_errors()) goto has_error; if (check_function_header(func)) goto has_error; if (check_function(func)) goto has_error; - if (onyx_message_has_errors()) goto has_error; + if (onyx_has_errors()) goto has_error; goto no_errors; has_error: - onyx_message_add(Msg_Type_Literal, - call->token->pos, - "error in polymorphic procedure generated from this call site."); + onyx_report_error(call->token->pos, "Error in polymorphic procedure generated from this call site."); return NULL; no_errors: diff --git a/src/onyxwasm.c b/src/onyxwasm.c index f79e6ca1..e0ddb40e 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -353,46 +353,46 @@ static u64 local_lookup_idx(LocalAllocator* la, u64 value) { #define WI(instr) bh_arr_push(code, ((WasmInstruction){ instr, 0x00 })) #define WID(instr, data) bh_arr_push(code, ((WasmInstruction){ instr, data })) #define WIL(instr, data) bh_arr_push(code, ((WasmInstruction){ instr, { .l = data } })) -#define COMPILE_FUNC(kind, ...) static void compile_ ## kind (OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, __VA_ARGS__) - -COMPILE_FUNC(function_body, AstFunction* fd); -COMPILE_FUNC(block, AstBlock* block, b32 generate_block_headers); -COMPILE_FUNC(statement, AstNode* stmt); -COMPILE_FUNC(assignment, AstBinaryOp* assign); -COMPILE_FUNC(store_instruction, Type* type, u32 offset); -COMPILE_FUNC(load_instruction, Type* type, u32 offset); -COMPILE_FUNC(if, AstIfWhile* if_node); -COMPILE_FUNC(while, AstIfWhile* while_node); -COMPILE_FUNC(for, AstFor* for_node); -COMPILE_FUNC(switch, AstSwitch* switch_node); -COMPILE_FUNC(defer, AstDefer* defer); -COMPILE_FUNC(deferred_stmts, AstNode* node); -COMPILE_FUNC(binop, AstBinaryOp* binop); -COMPILE_FUNC(unaryop, AstUnaryOp* unop); -COMPILE_FUNC(call, AstCall* call); -COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call); -COMPILE_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return); -COMPILE_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return); -COMPILE_FUNC(local_location, AstLocal* local, u64* offset_return); -COMPILE_FUNC(memory_reservation_location, AstMemRes* memres); -COMPILE_FUNC(location, AstTyped* expr); -COMPILE_FUNC(struct_load, Type* type, u64 offset); -COMPILE_FUNC(struct_lval, AstTyped* lval); -COMPILE_FUNC(struct_store, Type* type, u64 offset); -COMPILE_FUNC(struct_literal, AstStructLiteral* sl); -COMPILE_FUNC(expression, AstTyped* expr); -COMPILE_FUNC(cast, AstUnaryOp* cast); -COMPILE_FUNC(return, AstReturn* ret); -COMPILE_FUNC(stack_enter, u64 stacksize); -COMPILE_FUNC(stack_leave, u32 unused); - -COMPILE_FUNC(function_body, AstFunction* fd) { +#define EMIT_FUNC(kind, ...) static void emit_ ## kind (OnyxWasmModule* mod, bh_arr(WasmInstruction)* pcode, __VA_ARGS__) + +EMIT_FUNC(function_body, AstFunction* fd); +EMIT_FUNC(block, AstBlock* block, b32 generate_block_headers); +EMIT_FUNC(statement, AstNode* stmt); +EMIT_FUNC(assignment, AstBinaryOp* assign); +EMIT_FUNC(store_instruction, Type* type, u32 offset); +EMIT_FUNC(load_instruction, Type* type, u32 offset); +EMIT_FUNC(if, AstIfWhile* if_node); +EMIT_FUNC(while, AstIfWhile* while_node); +EMIT_FUNC(for, AstFor* for_node); +EMIT_FUNC(switch, AstSwitch* switch_node); +EMIT_FUNC(defer, AstDefer* defer); +EMIT_FUNC(deferred_stmts, AstNode* node); +EMIT_FUNC(binop, AstBinaryOp* binop); +EMIT_FUNC(unaryop, AstUnaryOp* unop); +EMIT_FUNC(call, AstCall* call); +EMIT_FUNC(intrinsic_call, AstIntrinsicCall* call); +EMIT_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return); +EMIT_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return); +EMIT_FUNC(local_location, AstLocal* local, u64* offset_return); +EMIT_FUNC(memory_reservation_location, AstMemRes* memres); +EMIT_FUNC(location, AstTyped* expr); +EMIT_FUNC(struct_load, Type* type, u64 offset); +EMIT_FUNC(struct_lval, AstTyped* lval); +EMIT_FUNC(struct_store, Type* type, u64 offset); +EMIT_FUNC(struct_literal, AstStructLiteral* sl); +EMIT_FUNC(expression, AstTyped* expr); +EMIT_FUNC(cast, AstUnaryOp* cast); +EMIT_FUNC(return, AstReturn* ret); +EMIT_FUNC(stack_enter, u64 stacksize); +EMIT_FUNC(stack_leave, u32 unused); + +EMIT_FUNC(function_body, AstFunction* fd) { if (fd->body == NULL) return; - compile_block(mod, pcode, fd->body, 0); + emit_block(mod, pcode, fd->body, 0); } -COMPILE_FUNC(block, AstBlock* block, b32 generate_block_headers) { +EMIT_FUNC(block, AstBlock* block, b32 generate_block_headers) { bh_arr(WasmInstruction) code = *pcode; if (generate_block_headers) { @@ -404,10 +404,10 @@ COMPILE_FUNC(block, AstBlock* block, b32 generate_block_headers) { bh_imap_put(&mod->local_map, (u64) *local, local_allocate(mod->local_alloc, *local)); forll (AstNode, stmt, block->body, next) { - compile_statement(mod, &code, stmt); + emit_statement(mod, &code, stmt); } - compile_deferred_stmts(mod, &code, (AstNode *) block); + emit_deferred_stmts(mod, &code, (AstNode *) block); bh_arr_each(AstLocal *, local, block->locals) local_free(mod->local_alloc, *local); @@ -420,7 +420,7 @@ COMPILE_FUNC(block, AstBlock* block, b32 generate_block_headers) { *pcode = code; } -COMPILE_FUNC(structured_jump, i32 jump_count, JumpType jump) { +EMIT_FUNC(structured_jump, i32 jump_count, JumpType jump) { bh_arr(WasmInstruction) code = *pcode; static const u8 wants[Jump_Type_Count] = { 1, 2, 3 }; @@ -452,30 +452,30 @@ COMPILE_FUNC(structured_jump, i32 jump_count, JumpType jump) { *pcode = code; } -COMPILE_FUNC(statement, AstNode* stmt) { +EMIT_FUNC(statement, AstNode* stmt) { bh_arr(WasmInstruction) code = *pcode; switch (stmt->kind) { - case Ast_Kind_Return: compile_return(mod, &code, (AstReturn *) stmt); break; - case Ast_Kind_If: compile_if(mod, &code, (AstIfWhile *) stmt); break; - case Ast_Kind_While: compile_while(mod, &code, (AstIfWhile *) stmt); break; - case Ast_Kind_For: compile_for(mod, &code, (AstFor *) stmt); break; - case Ast_Kind_Switch: compile_switch(mod, &code, (AstSwitch *) stmt); break; - case Ast_Kind_Jump: compile_structured_jump(mod, &code, ((AstJump *) stmt)->count, ((AstJump *) stmt)->jump); break; - case Ast_Kind_Block: compile_block(mod, &code, (AstBlock *) stmt, 1); break; - case Ast_Kind_Defer: compile_defer(mod, &code, (AstDefer *) stmt); break; - default: compile_expression(mod, &code, (AstTyped *) stmt); break; + case Ast_Kind_Return: emit_return(mod, &code, (AstReturn *) stmt); break; + case Ast_Kind_If: emit_if(mod, &code, (AstIfWhile *) stmt); break; + case Ast_Kind_While: emit_while(mod, &code, (AstIfWhile *) stmt); break; + case Ast_Kind_For: emit_for(mod, &code, (AstFor *) stmt); break; + case Ast_Kind_Switch: emit_switch(mod, &code, (AstSwitch *) stmt); break; + case Ast_Kind_Jump: emit_structured_jump(mod, &code, ((AstJump *) stmt)->count, ((AstJump *) stmt)->jump); break; + case Ast_Kind_Block: emit_block(mod, &code, (AstBlock *) stmt, 1); break; + case Ast_Kind_Defer: emit_defer(mod, &code, (AstDefer *) stmt); break; + default: emit_expression(mod, &code, (AstTyped *) stmt); break; } *pcode = code; } -COMPILE_FUNC(assignment, AstBinaryOp* assign) { +EMIT_FUNC(assignment, AstBinaryOp* assign) { bh_arr(WasmInstruction) code = *pcode; if (type_is_structlike_strict(assign->right->type)) { - compile_expression(mod, &code, assign->right); - compile_struct_lval(mod, &code, assign->left); + emit_expression(mod, &code, assign->right); + emit_struct_lval(mod, &code, assign->left); *pcode = code; return; @@ -486,53 +486,53 @@ COMPILE_FUNC(assignment, AstBinaryOp* assign) { if (lval->kind == Ast_Kind_Local) { if (bh_imap_get(&mod->local_map, (u64) lval) & LOCAL_IS_WASM) { u64 localidx = bh_imap_get(&mod->local_map, (u64) lval); - compile_expression(mod, &code, assign->right); + emit_expression(mod, &code, assign->right); WIL(WI_LOCAL_SET, localidx); } else { u64 offset = 0; - compile_local_location(mod, &code, (AstLocal *) lval, &offset); - compile_expression(mod, &code, assign->right); - compile_store_instruction(mod, &code, lval->type, offset); + emit_local_location(mod, &code, (AstLocal *) lval, &offset); + emit_expression(mod, &code, assign->right); + emit_store_instruction(mod, &code, lval->type, offset); } } else if (lval->kind == Ast_Kind_Global) { i32 globalidx = (i32) bh_imap_get(&mod->index_map, (u64) lval); - compile_expression(mod, &code, assign->right); + emit_expression(mod, &code, assign->right); WID(WI_GLOBAL_SET, globalidx); } else if (lval->kind == Ast_Kind_Dereference) { AstDereference* deref = (AstDereference *) lval; - compile_expression(mod, &code, deref->expr); - compile_expression(mod, &code, assign->right); + emit_expression(mod, &code, deref->expr); + emit_expression(mod, &code, assign->right); - compile_store_instruction(mod, &code, deref->type, 0); + emit_store_instruction(mod, &code, deref->type, 0); } else if (lval->kind == Ast_Kind_Array_Access) { AstArrayAccess* aa = (AstArrayAccess *) lval; u64 offset = 0; - compile_array_access_location(mod, &code, aa, &offset); - compile_expression(mod, &code, assign->right); + emit_array_access_location(mod, &code, aa, &offset); + emit_expression(mod, &code, assign->right); - compile_store_instruction(mod, &code, aa->type, offset); + emit_store_instruction(mod, &code, aa->type, offset); } else if (lval->kind == Ast_Kind_Field_Access) { AstFieldAccess* field = (AstFieldAccess *) lval; u64 offset = 0; - compile_field_access_location(mod, &code, field, &offset); - compile_expression(mod, &code, assign->right); + emit_field_access_location(mod, &code, field, &offset); + emit_expression(mod, &code, assign->right); - compile_store_instruction(mod, &code, field->type, offset); + emit_store_instruction(mod, &code, field->type, offset); } else if (lval->kind == Ast_Kind_Memres) { AstMemRes* memres = (AstMemRes *) lval; - compile_memory_reservation_location(mod, &code, memres); - compile_expression(mod, &code, assign->right); - compile_store_instruction(mod, &code, memres->type, 0); + emit_memory_reservation_location(mod, &code, memres); + emit_expression(mod, &code, assign->right); + emit_store_instruction(mod, &code, memres->type, 0); } else { assert(("Invalid lval", 0)); @@ -541,11 +541,11 @@ COMPILE_FUNC(assignment, AstBinaryOp* assign) { *pcode = code; } -COMPILE_FUNC(store_instruction, Type* type, u32 offset) { +EMIT_FUNC(store_instruction, Type* type, u32 offset) { bh_arr(WasmInstruction) code = *pcode; if (type_is_structlike_strict(type)) { - compile_struct_store(mod, pcode, type, offset); + emit_struct_store(mod, pcode, type, offset); return; } @@ -576,19 +576,19 @@ COMPILE_FUNC(store_instruction, Type* type, u32 offset) { if (store_size == 4) WID(WI_F32_STORE, ((WasmInstructionData) { alignment, offset })); else if (store_size == 8) WID(WI_F64_STORE, ((WasmInstructionData) { alignment, offset })); } else { - onyx_message_add(Msg_Type_Failed_Gen_Store, - (OnyxFilePos) { 0 }, + onyx_report_error((OnyxFilePos) { 0 }, + "Failed to generate store instruction for type '%s'.", type_get_name(type)); } *pcode = code; } -COMPILE_FUNC(load_instruction, Type* type, u32 offset) { +EMIT_FUNC(load_instruction, Type* type, u32 offset) { bh_arr(WasmInstruction) code = *pcode; if (type_is_structlike_strict(type)) { - compile_struct_load(mod, pcode, type, offset); + emit_struct_load(mod, pcode, type, offset); return; } @@ -639,36 +639,36 @@ COMPILE_FUNC(load_instruction, Type* type, u32 offset) { WID(instr, ((WasmInstructionData) { alignment, offset })); if (instr == WI_NOP) { - onyx_message_add(Msg_Type_Failed_Gen_Load, - (OnyxFilePos) { 0 }, - type_get_name(type)); + onyx_report_error((OnyxFilePos) { 0 }, + "Failed to generate load instruction for type '%s'.", + type_get_name(type)); } *pcode = code; } -COMPILE_FUNC(if, AstIfWhile* if_node) { +EMIT_FUNC(if, AstIfWhile* if_node) { bh_arr(WasmInstruction) code = *pcode; if (if_node->assignment != NULL) { bh_imap_put(&mod->local_map, (u64) if_node->local, local_allocate(mod->local_alloc, if_node->local)); - compile_assignment(mod, &code, if_node->assignment); + emit_assignment(mod, &code, if_node->assignment); } - compile_expression(mod, &code, if_node->cond); + emit_expression(mod, &code, if_node->cond); WID(WI_IF_START, 0x40); bh_arr_push(mod->structured_jump_target, 0); - if (if_node->true_stmt) compile_block(mod, &code, if_node->true_stmt, 0); + if (if_node->true_stmt) emit_block(mod, &code, if_node->true_stmt, 0); if (if_node->false_stmt) { WI(WI_ELSE); if (if_node->false_stmt->kind == Ast_Kind_If) { - compile_if(mod, &code, (AstIfWhile *) if_node->false_stmt); + emit_if(mod, &code, (AstIfWhile *) if_node->false_stmt); } else { - compile_block(mod, &code, if_node->false_stmt, 0); + emit_block(mod, &code, if_node->false_stmt, 0); } } @@ -683,27 +683,27 @@ COMPILE_FUNC(if, AstIfWhile* if_node) { *pcode = code; } -COMPILE_FUNC(while, AstIfWhile* while_node) { +EMIT_FUNC(while, AstIfWhile* while_node) { bh_arr(WasmInstruction) code = *pcode; if (while_node->assignment != NULL) { bh_imap_put(&mod->local_map, (u64) while_node->local, local_allocate(mod->local_alloc, while_node->local)); - compile_assignment(mod, &code, while_node->assignment); + emit_assignment(mod, &code, while_node->assignment); } if (while_node->false_stmt == NULL) { WID(WI_BLOCK_START, 0x40); WID(WI_LOOP_START, 0x40); - compile_expression(mod, &code, while_node->cond); + emit_expression(mod, &code, while_node->cond); WI(WI_I32_EQZ); WID(WI_COND_JUMP, 0x01); bh_arr_push(mod->structured_jump_target, 1); bh_arr_push(mod->structured_jump_target, 2); - compile_block(mod, &code, while_node->true_stmt, 0); + emit_block(mod, &code, while_node->true_stmt, 0); bh_arr_pop(mod->structured_jump_target); bh_arr_pop(mod->structured_jump_target); @@ -715,20 +715,20 @@ COMPILE_FUNC(while, AstIfWhile* while_node) { WI(WI_BLOCK_END); } else { - compile_expression(mod, &code, while_node->cond); + emit_expression(mod, &code, while_node->cond); bh_arr_push(mod->structured_jump_target, 1); bh_arr_push(mod->structured_jump_target, 2); WID(WI_IF_START, 0x40); WID(WI_LOOP_START, 0x40); - compile_block(mod, &code, while_node->true_stmt, 0); - compile_expression(mod, &code, while_node->cond); + emit_block(mod, &code, while_node->true_stmt, 0); + emit_expression(mod, &code, while_node->cond); WID(WI_COND_JUMP, 0x00); WI(WI_LOOP_END); WI(WI_ELSE); - compile_block(mod, &code, while_node->false_stmt, 0); + emit_block(mod, &code, while_node->false_stmt, 0); WID(WI_IF_END, 0x40); bh_arr_pop(mod->structured_jump_target); @@ -741,7 +741,7 @@ COMPILE_FUNC(while, AstIfWhile* while_node) { *pcode = code; } -COMPILE_FUNC(for, AstFor* for_node) { +EMIT_FUNC(for, AstFor* for_node) { bh_arr(WasmInstruction) code = *pcode; AstLocal* var = for_node->var; @@ -757,12 +757,12 @@ COMPILE_FUNC(for, AstFor* for_node) { WasmInstructionType ge_instr = var_type == WASM_TYPE_INT32 ? WI_I32_GE_S : WI_I64_GE_S; if (it_is_local) { - compile_expression(mod, &code, for_node->start); + emit_expression(mod, &code, for_node->start); WIL(WI_LOCAL_SET, tmp); } else { - compile_local_location(mod, &code, var, &offset); - compile_expression(mod, &code, for_node->start); - compile_store_instruction(mod, &code, var->type, offset); + emit_local_location(mod, &code, var, &offset); + emit_expression(mod, &code, for_node->start); + emit_store_instruction(mod, &code, var->type, offset); } WID(WI_BLOCK_START, 0x40); @@ -775,29 +775,29 @@ COMPILE_FUNC(for, AstFor* for_node) { WIL(WI_LOCAL_GET, tmp); } else { offset = 0; - compile_local_location(mod, &code, var, &offset); - compile_load_instruction(mod, &code, var->type, offset); + emit_local_location(mod, &code, var, &offset); + emit_load_instruction(mod, &code, var->type, offset); } - compile_expression(mod, &code, for_node->end); + emit_expression(mod, &code, for_node->end); WI(ge_instr); WID(WI_COND_JUMP, 0x01); - compile_block(mod, &code, for_node->stmt, 0); + emit_block(mod, &code, for_node->stmt, 0); if (it_is_local) { WIL(WI_LOCAL_GET, tmp); - compile_expression(mod, &code, for_node->step); + emit_expression(mod, &code, for_node->step); WI(add_instr); WIL(WI_LOCAL_SET, tmp); } else { offset = 0; - compile_local_location(mod, &code, var, &offset); + emit_local_location(mod, &code, var, &offset); offset = 0; - compile_local_location(mod, &code, var, &offset); - compile_load_instruction(mod, &code, var->type, offset); - compile_expression(mod, &code, for_node->step); + emit_local_location(mod, &code, var, &offset); + emit_load_instruction(mod, &code, var->type, offset); + emit_expression(mod, &code, for_node->step); WI(add_instr); - compile_store_instruction(mod, &code, var->type, offset); + emit_store_instruction(mod, &code, var->type, offset); } bh_arr_pop(mod->structured_jump_target); @@ -814,7 +814,7 @@ COMPILE_FUNC(for, AstFor* for_node) { *pcode = code; } -COMPILE_FUNC(switch, AstSwitch* switch_node) { +EMIT_FUNC(switch, AstSwitch* switch_node) { bh_arr(WasmInstruction) code = *pcode; bh_imap block_map; @@ -823,7 +823,7 @@ COMPILE_FUNC(switch, AstSwitch* switch_node) { if (switch_node->assignment != NULL) { bh_imap_put(&mod->local_map, (u64) switch_node->local, local_allocate(mod->local_alloc, switch_node->local)); - compile_assignment(mod, &code, switch_node->assignment); + emit_assignment(mod, &code, switch_node->assignment); } WID(WI_BLOCK_START, 0x40); @@ -851,7 +851,7 @@ COMPILE_FUNC(switch, AstSwitch* switch_node) { } WID(WI_BLOCK_START, 0x40); - compile_expression(mod, &code, switch_node->expr); + emit_expression(mod, &code, switch_node->expr); if (switch_node->min_case != 0) { WID(WI_I32_CONST, switch_node->min_case); WI(WI_I32_SUB); @@ -864,7 +864,7 @@ COMPILE_FUNC(switch, AstSwitch* switch_node) { u64 bn = bh_imap_get(&block_map, (u64) sc->block); - compile_block(mod, &code, sc->block, 0); + emit_block(mod, &code, sc->block, 0); if (bh_arr_last(code).type != WI_JUMP) WID(WI_JUMP, block_num - bn); @@ -876,7 +876,7 @@ COMPILE_FUNC(switch, AstSwitch* switch_node) { } if (switch_node->default_case != NULL) { - compile_block(mod, &code, switch_node->default_case, 0); + emit_block(mod, &code, switch_node->default_case, 0); } WI(WI_BLOCK_END); @@ -889,14 +889,14 @@ COMPILE_FUNC(switch, AstSwitch* switch_node) { *pcode = code; } -COMPILE_FUNC(defer, AstDefer* defer) { +EMIT_FUNC(defer, AstDefer* defer) { bh_arr_push(mod->deferred_stmts, ((DeferredStmt) { .depth = bh_arr_length(mod->structured_jump_target), .stmt = defer->stmt, })); } -COMPILE_FUNC(deferred_stmts, AstNode* node) { +EMIT_FUNC(deferred_stmts, AstNode* node) { if (bh_arr_length(mod->deferred_stmts) == 0) return; bh_arr(WasmInstruction) code = *pcode; @@ -904,7 +904,7 @@ COMPILE_FUNC(deferred_stmts, AstNode* node) { u64 depth = bh_arr_length(mod->structured_jump_target); while (bh_arr_last(mod->deferred_stmts).depth == depth) { - compile_statement(mod, &code, bh_arr_last(mod->deferred_stmts).stmt); + emit_statement(mod, &code, bh_arr_last(mod->deferred_stmts).stmt); bh_arr_pop(mod->deferred_stmts); } @@ -939,11 +939,11 @@ static const WasmInstructionType binop_map[][4] = { /* BOR */ { WI_I32_OR, WI_I64_OR, WI_NOP, WI_NOP }, }; -COMPILE_FUNC(binop, AstBinaryOp* binop) { +EMIT_FUNC(binop, AstBinaryOp* binop) { bh_arr(WasmInstruction) code = *pcode; if (binop_is_assignment(binop)) { - compile_assignment(mod, &code, binop); + emit_assignment(mod, &code, binop); *pcode = code; return; } @@ -984,15 +984,15 @@ COMPILE_FUNC(binop, AstBinaryOp* binop) { } } - compile_expression(mod, &code, binop->left); - compile_expression(mod, &code, binop->right); + emit_expression(mod, &code, binop->left); + emit_expression(mod, &code, binop->right); WI(binop_instr); *pcode = code; } -COMPILE_FUNC(unaryop, AstUnaryOp* unop) { +EMIT_FUNC(unaryop, AstUnaryOp* unop) { bh_arr(WasmInstruction) code = *pcode; switch (unop->operation) { @@ -1003,18 +1003,18 @@ COMPILE_FUNC(unaryop, AstUnaryOp* unop) { || type->kind == Basic_Kind_I16 || type->kind == Basic_Kind_I8) { WID(WI_I32_CONST, 0x00); - compile_expression(mod, &code, unop->expr); + emit_expression(mod, &code, unop->expr); WI(WI_I32_SUB); } else if (type->kind == Basic_Kind_I64) { WID(WI_I64_CONST, 0x00); - compile_expression(mod, &code, unop->expr); + emit_expression(mod, &code, unop->expr); WI(WI_I64_SUB); } else { - compile_expression(mod, &code, unop->expr); + emit_expression(mod, &code, unop->expr); if (type->kind == Basic_Kind_F32) WI(WI_F32_NEG); @@ -1027,24 +1027,24 @@ COMPILE_FUNC(unaryop, AstUnaryOp* unop) { } case Unary_Op_Not: - compile_expression(mod, &code, unop->expr); + emit_expression(mod, &code, unop->expr); WI(WI_I32_EQZ); break; - case Unary_Op_Cast: compile_cast(mod, &code, unop); break; + case Unary_Op_Cast: emit_cast(mod, &code, unop); break; } *pcode = code; } -COMPILE_FUNC(call, AstCall* call) { +EMIT_FUNC(call, AstCall* call) { bh_arr(WasmInstruction) code = *pcode; for (AstArgument *arg = call->arguments; arg != NULL; arg = (AstArgument *) arg->next) { - compile_expression(mod, &code, arg->value); + emit_expression(mod, &code, arg->value); } CallingConvention cc = type_function_get_cc(call->callee->type); @@ -1069,7 +1069,7 @@ COMPILE_FUNC(call, AstCall* call) { bh_arr_push(code, ((WasmInstruction){ WI_CALL, func_idx })); } else { - compile_expression(mod, &code, call->callee); + emit_expression(mod, &code, call->callee); i32 type_idx = generate_type_idx(mod, call->callee->type); WID(WI_CALL_INDIRECT, ((WasmInstructionData) { type_idx, 0x00 })); @@ -1082,13 +1082,13 @@ COMPILE_FUNC(call, AstCall* call) { WID(WI_GLOBAL_SET, stack_top_idx); WID(WI_GLOBAL_GET, stack_top_idx); - compile_load_instruction(mod, &code, return_type, 0); + emit_load_instruction(mod, &code, return_type, 0); } *pcode = code; } -COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call) { +EMIT_FUNC(intrinsic_call, AstIntrinsicCall* call) { bh_arr(WasmInstruction) code = *pcode; i32 place_arguments_normally = 1; @@ -1101,7 +1101,7 @@ COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call) { for (AstArgument *arg = call->arguments; arg != NULL; arg = (AstArgument *) arg->next) { - compile_expression(mod, &code, arg->value); + emit_expression(mod, &code, arg->value); } } @@ -1159,10 +1159,10 @@ COMPILE_FUNC(intrinsic_call, AstIntrinsicCall* call) { *pcode = code; } -COMPILE_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return) { +EMIT_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return) { bh_arr(WasmInstruction) code = *pcode; - compile_expression(mod, &code, aa->expr); + emit_expression(mod, &code, aa->expr); if (aa->elem_size != 1) { WID(WI_I32_CONST, aa->elem_size); WI(WI_I32_MUL); @@ -1171,18 +1171,18 @@ COMPILE_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return) { u64 offset = 0; if (aa->addr->kind == Ast_Kind_Array_Access && aa->addr->type->kind == Type_Kind_Array) { - compile_array_access_location(mod, &code, (AstArrayAccess *) aa->addr, &offset); + emit_array_access_location(mod, &code, (AstArrayAccess *) aa->addr, &offset); } else if (aa->addr->kind == Ast_Kind_Field_Access && aa->addr->type->kind == Type_Kind_Array) { - compile_field_access_location(mod, &code, (AstFieldAccess *) aa->addr, &offset); + emit_field_access_location(mod, &code, (AstFieldAccess *) aa->addr, &offset); } else if ((aa->addr->kind == Ast_Kind_Local || aa->addr->kind == Ast_Kind_Param) && aa->addr->type->kind == Type_Kind_Array) { - compile_local_location(mod, &code, (AstLocal *) aa->addr, &offset); + emit_local_location(mod, &code, (AstLocal *) aa->addr, &offset); } else if (aa->addr->kind == Ast_Kind_Memres && aa->addr->type->kind != Type_Kind_Array) { - compile_memory_reservation_location(mod, &code, (AstMemRes *) aa->addr); + emit_memory_reservation_location(mod, &code, (AstMemRes *) aa->addr); } else { - compile_expression(mod, &code, aa->addr); + emit_expression(mod, &code, aa->addr); } WI(WI_I32_ADD); @@ -1191,7 +1191,7 @@ COMPILE_FUNC(array_access_location, AstArrayAccess* aa, u64* offset_return) { *pcode = code; } -COMPILE_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { +EMIT_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { bh_arr(WasmInstruction) code = *pcode; u64 offset = field->offset; @@ -1205,18 +1205,18 @@ COMPILE_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { if (source_expr->kind == Ast_Kind_Array_Access && source_expr->type->kind != Type_Kind_Pointer) { u64 o2 = 0; - compile_array_access_location(mod, &code, (AstArrayAccess *) source_expr, &o2); + emit_array_access_location(mod, &code, (AstArrayAccess *) source_expr, &o2); offset += o2; } else if ((source_expr->kind == Ast_Kind_Local || source_expr->kind == Ast_Kind_Param) && source_expr->type->kind != Type_Kind_Pointer) { u64 o2 = 0; - compile_local_location(mod, &code, (AstLocal *) source_expr, &o2); + emit_local_location(mod, &code, (AstLocal *) source_expr, &o2); offset += o2; } else if (source_expr->kind == Ast_Kind_Memres && source_expr->type->kind != Type_Kind_Pointer) { - compile_memory_reservation_location(mod, &code, (AstMemRes *) source_expr); + emit_memory_reservation_location(mod, &code, (AstMemRes *) source_expr); } else { - compile_expression(mod, &code, source_expr); + emit_expression(mod, &code, source_expr); } *offset_return = offset; @@ -1224,7 +1224,7 @@ COMPILE_FUNC(field_access_location, AstFieldAccess* field, u64* offset_return) { *pcode = code; } -COMPILE_FUNC(memory_reservation_location, AstMemRes* memres) { +EMIT_FUNC(memory_reservation_location, AstMemRes* memres) { bh_arr(WasmInstruction) code = *pcode; WID(WI_I32_CONST, memres->addr); @@ -1232,7 +1232,7 @@ COMPILE_FUNC(memory_reservation_location, AstMemRes* memres) { *pcode = code; } -COMPILE_FUNC(local_location, AstLocal* local, u64* offset_return) { +EMIT_FUNC(local_location, AstLocal* local, u64* offset_return) { bh_arr(WasmInstruction) code = *pcode; u64 local_offset = (u64) bh_imap_get(&mod->local_map, (u64) local); @@ -1253,7 +1253,7 @@ COMPILE_FUNC(local_location, AstLocal* local, u64* offset_return) { *pcode = code; } -COMPILE_FUNC(struct_load, Type* type, u64 offset) { +EMIT_FUNC(struct_load, Type* type, u64 offset) { // NOTE: Expects the stack to look like: // @@ -1266,7 +1266,7 @@ COMPILE_FUNC(struct_load, Type* type, u64 offset) { if (mem_count == 1) { type_lookup_member_by_idx(type, 0, &smem); - compile_load_instruction(mod, &code, smem.type, offset); + emit_load_instruction(mod, &code, smem.type, offset); *pcode = code; return; } @@ -1277,7 +1277,7 @@ COMPILE_FUNC(struct_load, Type* type, u64 offset) { fori (i, 0, mem_count) { type_lookup_member_by_idx(type, i, &smem); if (i != 0) WIL(WI_LOCAL_GET, tmp_idx); - compile_load_instruction(mod, &code, smem.type, offset + smem.offset); + emit_load_instruction(mod, &code, smem.type, offset + smem.offset); } local_raw_free(mod->local_alloc, WASM_TYPE_INT32); @@ -1285,7 +1285,7 @@ COMPILE_FUNC(struct_load, Type* type, u64 offset) { *pcode = code; } -COMPILE_FUNC(struct_lval, AstTyped* lval) { +EMIT_FUNC(struct_lval, AstTyped* lval) { // NOTE: Expects the stack to look like: // mem_1 // mem_2 @@ -1299,21 +1299,21 @@ COMPILE_FUNC(struct_lval, AstTyped* lval) { u64 offset = 0; switch (lval->kind) { - case Ast_Kind_Local: compile_local_location(mod, &code, (AstLocal *) lval, &offset); break; - case Ast_Kind_Dereference: compile_expression(mod, &code, ((AstDereference *) lval)->expr); break; - case Ast_Kind_Array_Access: compile_array_access_location(mod, &code, (AstArrayAccess *) lval, &offset); break; - case Ast_Kind_Field_Access: compile_field_access_location(mod, &code, (AstFieldAccess *) lval, &offset); break; - case Ast_Kind_Memres: compile_memory_reservation_location(mod, &code, (AstMemRes *) lval); break; + case Ast_Kind_Local: emit_local_location(mod, &code, (AstLocal *) lval, &offset); break; + case Ast_Kind_Dereference: emit_expression(mod, &code, ((AstDereference *) lval)->expr); break; + case Ast_Kind_Array_Access: emit_array_access_location(mod, &code, (AstArrayAccess *) lval, &offset); break; + case Ast_Kind_Field_Access: emit_field_access_location(mod, &code, (AstFieldAccess *) lval, &offset); break; + case Ast_Kind_Memres: emit_memory_reservation_location(mod, &code, (AstMemRes *) lval); break; default: assert(0); } - compile_struct_store(mod, &code, lval->type, offset); + emit_struct_store(mod, &code, lval->type, offset); *pcode = code; } -COMPILE_FUNC(struct_store, Type* type, u64 offset) { +EMIT_FUNC(struct_store, Type* type, u64 offset) { // NOTE: Expects the stack to look like: // mem_1 // mem_2 @@ -1341,7 +1341,7 @@ COMPILE_FUNC(struct_store, Type* type, u64 offset) { WIL(WI_LOCAL_GET, loc_idx); } - compile_struct_store(mod, &code, smem.type, offset + smem.offset); + emit_struct_store(mod, &code, smem.type, offset + smem.offset); } else { WasmType wt = onyx_type_to_wasm_type(smem.type); @@ -1351,7 +1351,7 @@ COMPILE_FUNC(struct_store, Type* type, u64 offset) { WIL(WI_LOCAL_GET, loc_idx); WIL(WI_LOCAL_GET, tmp_idx); - compile_store_instruction(mod, &code, smem.type, offset + smem.offset); + emit_store_instruction(mod, &code, smem.type, offset + smem.offset); local_raw_free(mod->local_alloc, wt); } @@ -1362,24 +1362,24 @@ COMPILE_FUNC(struct_store, Type* type, u64 offset) { *pcode = code; } -COMPILE_FUNC(struct_literal, AstStructLiteral* sl) { +EMIT_FUNC(struct_literal, AstStructLiteral* sl) { bh_arr(WasmInstruction) code = *pcode; bh_arr_each(AstTyped *, val, sl->values) { - compile_expression(mod, &code, *val); + emit_expression(mod, &code, *val); } *pcode = code; } -COMPILE_FUNC(location, AstTyped* expr) { +EMIT_FUNC(location, AstTyped* expr) { bh_arr(WasmInstruction) code = *pcode; switch (expr->kind) { case Ast_Kind_Param: case Ast_Kind_Local: { u64 offset = 0; - compile_local_location(mod, &code, (AstLocal *) expr, &offset); + emit_local_location(mod, &code, (AstLocal *) expr, &offset); if (offset != 0) { WID(WI_I32_CONST, offset); WI(WI_I32_ADD); @@ -1388,14 +1388,14 @@ COMPILE_FUNC(location, AstTyped* expr) { } case Ast_Kind_Dereference: { - compile_expression(mod, &code, ((AstDereference *) expr)->expr); + emit_expression(mod, &code, ((AstDereference *) expr)->expr); break; } case Ast_Kind_Array_Access: { AstArrayAccess* aa = (AstArrayAccess *) expr; u64 offset = 0; - compile_array_access_location(mod, &code, aa, &offset); + emit_array_access_location(mod, &code, aa, &offset); if (offset != 0) { WID(WI_I32_CONST, offset); WI(WI_I32_ADD); @@ -1414,7 +1414,7 @@ COMPILE_FUNC(location, AstTyped* expr) { } u64 offset = 0; - compile_field_access_location(mod, &code, field, &offset); + emit_field_access_location(mod, &code, field, &offset); if (offset != 0) { WID(WI_I32_CONST, offset); WI(WI_I32_ADD); @@ -1429,10 +1429,7 @@ COMPILE_FUNC(location, AstTyped* expr) { } default: { - DEBUG_HERE; - onyx_message_add(Msg_Type_Literal, - (OnyxFilePos) { 0 }, - "location unknown"); + onyx_report_error(expr->token->pos, "Unable to generate locate for '%s'.", onyx_ast_node_kind_string(expr->kind)); break; } } @@ -1440,7 +1437,7 @@ COMPILE_FUNC(location, AstTyped* expr) { *pcode = code; } -COMPILE_FUNC(expression, AstTyped* expr) { +EMIT_FUNC(expression, AstTyped* expr) { bh_arr(WasmInstruction) code = *pcode; switch (expr->kind) { @@ -1473,10 +1470,10 @@ COMPILE_FUNC(expression, AstTyped* expr) { } else { u64 offset = 0; - compile_local_location(mod, &code, (AstLocal *) expr, &offset); + emit_local_location(mod, &code, (AstLocal *) expr, &offset); if (expr->type->kind != Type_Kind_Array) { - compile_load_instruction(mod, &code, expr->type, offset); + emit_load_instruction(mod, &code, expr->type, offset); } else if (offset != 0) { WID(WI_I32_CONST, offset); WI(WI_I32_ADD); @@ -1523,7 +1520,7 @@ COMPILE_FUNC(expression, AstTyped* expr) { } case Ast_Kind_Struct_Literal: { - compile_struct_literal(mod, &code, (AstStructLiteral *) expr); + emit_struct_literal(mod, &code, (AstStructLiteral *) expr); break; } @@ -1533,30 +1530,30 @@ COMPILE_FUNC(expression, AstTyped* expr) { break; } - case Ast_Kind_Block: compile_block(mod, &code, (AstBlock *) expr, 1); break; - case Ast_Kind_Call: compile_call(mod, &code, (AstCall *) expr); break; - case Ast_Kind_Intrinsic_Call: compile_intrinsic_call(mod, &code, (AstIntrinsicCall *) expr); break; - case Ast_Kind_Binary_Op: compile_binop(mod, &code, (AstBinaryOp *) expr); break; - case Ast_Kind_Unary_Op: compile_unaryop(mod, &code, (AstUnaryOp *) expr); break; + case Ast_Kind_Block: emit_block(mod, &code, (AstBlock *) expr, 1); break; + case Ast_Kind_Call: emit_call(mod, &code, (AstCall *) expr); break; + case Ast_Kind_Intrinsic_Call: emit_intrinsic_call(mod, &code, (AstIntrinsicCall *) expr); break; + case Ast_Kind_Binary_Op: emit_binop(mod, &code, (AstBinaryOp *) expr); break; + case Ast_Kind_Unary_Op: emit_unaryop(mod, &code, (AstUnaryOp *) expr); break; case Ast_Kind_Address_Of: { AstAddressOf* aof = (AstAddressOf *) expr; - compile_location(mod, &code, aof->expr); + emit_location(mod, &code, aof->expr); break; } case Ast_Kind_Dereference: { AstDereference* deref = (AstDereference *) expr; - compile_expression(mod, &code, deref->expr); - compile_load_instruction(mod, &code, deref->type, 0); + emit_expression(mod, &code, deref->expr); + emit_load_instruction(mod, &code, deref->type, 0); break; } case Ast_Kind_Array_Access: { AstArrayAccess* aa = (AstArrayAccess *) expr; u64 offset = 0; - compile_array_access_location(mod, &code, aa, &offset); - compile_load_instruction(mod, &code, aa->type, offset); + emit_array_access_location(mod, &code, aa, &offset); + emit_load_instruction(mod, &code, aa->type, offset); break; } @@ -1587,8 +1584,8 @@ COMPILE_FUNC(expression, AstTyped* expr) { } u64 offset = 0; - compile_field_access_location(mod, &code, field, &offset); - compile_load_instruction(mod, &code, field->type, offset); + emit_field_access_location(mod, &code, field, &offset); + emit_load_instruction(mod, &code, field->type, offset); break; } @@ -1597,15 +1594,15 @@ COMPILE_FUNC(expression, AstTyped* expr) { u64 tmp_local = local_raw_allocate(mod->local_alloc, WASM_TYPE_INT32); - compile_expression(mod, &code, sl->lo); + emit_expression(mod, &code, sl->lo); WIL(WI_LOCAL_TEE, tmp_local); if (sl->elem_size != 1) { WID(WI_I32_CONST, sl->elem_size); WI(WI_I32_MUL); } - compile_expression(mod, &code, sl->addr); + emit_expression(mod, &code, sl->addr); WI(WI_I32_ADD); - compile_expression(mod, &code, sl->hi); + emit_expression(mod, &code, sl->hi); WIL(WI_LOCAL_GET, tmp_local); WI(WI_I32_SUB); @@ -1635,9 +1632,7 @@ COMPILE_FUNC(expression, AstTyped* expr) { WID(WI_I64_CONST, ev->value->value.l); } else { - onyx_message_add(Msg_Type_Literal, - ev->token->pos, - "invalid backing type for enum"); + onyx_report_error(ev->token->pos, "Invalid backing type for enum."); } break; } @@ -1645,7 +1640,7 @@ COMPILE_FUNC(expression, AstTyped* expr) { case Ast_Kind_Memres: { AstMemRes* memres = (AstMemRes *) expr; WID(WI_I32_CONST, memres->addr); - compile_load_instruction(mod, &code, memres->type, 0); + emit_load_instruction(mod, &code, memres->type, 0); break; } @@ -1688,45 +1683,37 @@ static const WasmInstructionType cast_map[][11] = { /* PTR */ { WI_UNREACHABLE, WI_UNREACHABLE, WI_UNREACHABLE, WI_UNREACHABLE, WI_NOP, WI_NOP, WI_I64_FROM_I32_U, WI_I64_FROM_I32_U, WI_UNREACHABLE, WI_UNREACHABLE, WI_NOP }, }; -COMPILE_FUNC(cast, AstUnaryOp* cast) { +EMIT_FUNC(cast, AstUnaryOp* cast) { bh_arr(WasmInstruction) code = *pcode; - compile_expression(mod, &code, cast->expr); + emit_expression(mod, &code, cast->expr); Type* from = cast->expr->type; Type* to = cast->type; if (from->kind == Type_Kind_Struct || to->kind == Type_Kind_Struct) { - onyx_message_add(Msg_Type_Literal, - cast->token->pos, - "cannot cast to or from a struct"); + onyx_report_error(cast->token->pos, "Cannot cast to or from a struct."); WI(WI_DROP); *pcode = code; return; } if (from->kind == Type_Kind_Slice || to->kind == Type_Kind_Slice) { - onyx_message_add(Msg_Type_Literal, - cast->token->pos, - "cannot cast to or from a slice"); + onyx_report_error(cast->token->pos, "Cannot cast to or from a slice."); WI(WI_DROP); *pcode = code; return; } if (from->kind == Type_Kind_DynArray || to->kind == Type_Kind_DynArray) { - onyx_message_add(Msg_Type_Literal, - cast->token->pos, - "cannot cast to or from a dynamic array"); + onyx_report_error(cast->token->pos, "Cannot cast to or from a dynamic array."); WI(WI_DROP); *pcode = code; return; } if (to->kind == Type_Kind_Function) { - onyx_message_add(Msg_Type_Literal, - cast->token->pos, - "cannot cast to a function"); + onyx_report_error(cast->token->pos, "Cannot cast to a function."); WI(WI_DROP); *pcode = code; return; @@ -1736,9 +1723,7 @@ COMPILE_FUNC(cast, AstUnaryOp* cast) { if (to->kind == Type_Kind_Enum) to = to->Enum.backing; if (from->kind == Type_Kind_Basic && from->Basic.kind == Basic_Kind_Void) { - onyx_message_add(Msg_Type_Literal, - cast->token->pos, - "cannot cast from void"); + onyx_report_error(cast->token->pos, "Cannot cast from void."); WI(WI_DROP); *pcode = code; return; @@ -1781,9 +1766,7 @@ COMPILE_FUNC(cast, AstUnaryOp* cast) { WasmInstructionType cast_op = cast_map[fromidx][toidx]; if (cast_op == WI_UNREACHABLE) { bh_printf("%d %d\n", fromidx, toidx); - onyx_message_add(Msg_Type_Literal, - cast->token->pos, - "bad cast"); + onyx_report_error(cast->token->pos, "Bad cast."); } else if (cast_op != WI_NOP) { WI(cast_op); @@ -1793,53 +1776,53 @@ COMPILE_FUNC(cast, AstUnaryOp* cast) { *pcode = code; } -COMPILE_FUNC(return, AstReturn* ret) { +EMIT_FUNC(return, AstReturn* ret) { bh_arr(WasmInstruction) code = *pcode; if (ret->expr) { if (mod->curr_cc == CC_Return_Stack) { if (type_is_structlike_strict(ret->expr->type)) { - compile_expression(mod, &code, ret->expr); + emit_expression(mod, &code, ret->expr); WIL(WI_LOCAL_GET, mod->stack_base_idx); WID(WI_I32_CONST, type_size_of(ret->expr->type)); WI(WI_I32_SUB); - compile_store_instruction(mod, &code, ret->expr->type, 0); + emit_store_instruction(mod, &code, ret->expr->type, 0); } else { WIL(WI_LOCAL_GET, mod->stack_base_idx); WID(WI_I32_CONST, type_size_of(ret->expr->type)); WI(WI_I32_SUB); - compile_expression(mod, &code, ret->expr); - compile_store_instruction(mod, &code, ret->expr->type, 0); + emit_expression(mod, &code, ret->expr); + emit_store_instruction(mod, &code, ret->expr->type, 0); } } else { - compile_expression(mod, &code, ret->expr); + emit_expression(mod, &code, ret->expr); } } - compile_deferred_stmts(mod, &code, (AstNode *) ret); + emit_deferred_stmts(mod, &code, (AstNode *) ret); if (bh_arr_length(mod->deferred_stmts) != 0) { i32 i = bh_arr_length(mod->deferred_stmts) - 1; while (i >= 0) { - compile_statement(mod, &code, mod->deferred_stmts[i].stmt); + emit_statement(mod, &code, mod->deferred_stmts[i].stmt); i--; } } if (mod->has_stack_locals) - compile_stack_leave(mod, &code, 0); + emit_stack_leave(mod, &code, 0); WI(WI_RETURN); *pcode = code; } -COMPILE_FUNC(stack_enter, u64 stacksize) { +EMIT_FUNC(stack_enter, u64 stacksize) { bh_arr(WasmInstruction) code = *pcode; bh_align(stacksize, 16); @@ -1856,7 +1839,7 @@ COMPILE_FUNC(stack_enter, u64 stacksize) { *pcode = code; } -COMPILE_FUNC(stack_leave, u32 unused) { +EMIT_FUNC(stack_leave, u32 unused) { bh_arr(WasmInstruction) code = *pcode; u64 stack_top_idx = bh_imap_get(&mod->index_map, (u64) &builtin_stack_top); @@ -1939,7 +1922,7 @@ static i32 get_element_idx(OnyxWasmModule* mod, AstFunction* func) { } } -static inline b32 should_compile_function(AstFunction* fd) { +static inline b32 should_EMIT_FUNCtion(AstFunction* fd) { // NOTE: Don't output intrinsic functions if (fd->flags & Ast_Flag_Intrinsic) return 0; @@ -1959,8 +1942,8 @@ static inline b32 should_compile_function(AstFunction* fd) { } -static void compile_function(OnyxWasmModule* mod, AstFunction* fd) { - if (!should_compile_function(fd)) return; +static void EMIT_FUNCtion(OnyxWasmModule* mod, AstFunction* fd) { + if (!should_EMIT_FUNCtion(fd)) return; i32 type_idx = generate_type_idx(mod, fd->type); @@ -2039,11 +2022,11 @@ static void compile_function(OnyxWasmModule* mod, AstFunction* fd) { } // Generate code - compile_function_body(mod, &wasm_func.code, fd); + emit_function_body(mod, &wasm_func.code, fd); if (mod->has_stack_locals) { - compile_stack_enter(mod, &wasm_func.code, mod->local_alloc->max_stack); - compile_stack_leave(mod, &wasm_func.code, 0); + emit_stack_enter(mod, &wasm_func.code, mod->local_alloc->max_stack); + emit_stack_leave(mod, &wasm_func.code, 0); } } @@ -2055,7 +2038,7 @@ static void compile_function(OnyxWasmModule* mod, AstFunction* fd) { bh_imap_clear(&mod->local_map); } -static void compile_global(OnyxWasmModule* module, AstGlobal* global) { +static void emit_global(OnyxWasmModule* module, AstGlobal* global) { WasmType global_type = onyx_type_to_wasm_type(global->type); if (global->flags & Ast_Flag_Foreign) { @@ -2109,7 +2092,7 @@ static void compile_global(OnyxWasmModule* module, AstGlobal* global) { } -static void compile_string_literal(OnyxWasmModule* mod, AstStrLit* strlit) { +static void emit_string_literal(OnyxWasmModule* mod, AstStrLit* strlit) { // NOTE: Allocating more than necessary, but there are no cases // in a string literal that create more bytes than already @@ -2174,7 +2157,7 @@ static void compile_string_literal(OnyxWasmModule* mod, AstStrLit* strlit) { bh_arr_push(mod->data, datum); } -static void compile_raw_data(OnyxWasmModule* mod, ptr data, AstTyped* node) { +static void emit_raw_data(OnyxWasmModule* mod, ptr data, AstTyped* node) { switch (node->kind) { case Ast_Kind_NumLit: { switch (node->type->Basic.kind) { @@ -2207,13 +2190,13 @@ static void compile_raw_data(OnyxWasmModule* mod, ptr data, AstTyped* node) { //fallthrough } - default: onyx_message_add(Msg_Type_Literal, - node->token->pos, - "invalid data"); + default: onyx_report_error(node->token->pos, + "Cannot generate constant data for '%s'.", + onyx_ast_node_kind_string(node->kind)); } } -static void compile_memory_reservation(OnyxWasmModule* mod, AstMemRes* memres) { +static void emit_memory_reservation(OnyxWasmModule* mod, AstMemRes* memres) { Type* effective_type = memres->type; u64 alignment = type_alignment_of(effective_type); @@ -2226,7 +2209,7 @@ static void compile_memory_reservation(OnyxWasmModule* mod, AstMemRes* memres) { if (memres->initial_value != NULL) { u8* data = bh_alloc(global_heap_allocator, size); - compile_raw_data(mod, data, memres->initial_value); + emit_raw_data(mod, data, memres->initial_value); WasmDatum datum = { .offset = offset, @@ -2241,7 +2224,7 @@ static void compile_memory_reservation(OnyxWasmModule* mod, AstMemRes* memres) { mod->next_datum_offset = offset + size; } -static void compile_file_contents(OnyxWasmModule* mod, AstFileContents* fc) { +static void emit_file_contents(OnyxWasmModule* mod, AstFileContents* fc) { token_toggle_end(fc->filename); if (bh_table_has(u32, mod->loaded_file_offsets, fc->filename->text)) { @@ -2255,8 +2238,8 @@ static void compile_file_contents(OnyxWasmModule* mod, AstFileContents* fc) { bh_table_put(u32, mod->loaded_file_offsets, fc->filename->text, offset); if (!bh_file_exists(fc->filename->text)) { - onyx_message_add(Msg_Type_File_Not_Found, - fc->filename->pos, + onyx_report_error(fc->filename->pos, + "Unable to open file for reading, '%s'.", fc->filename->text); token_toggle_end(fc->filename); @@ -2369,7 +2352,7 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, ProgramInfo* program) { switch (entity->type) { case Entity_Type_Function_Header: { - if (!should_compile_function(entity->function)) break; + if (!should_EMIT_FUNCtion(entity->function)) break; u64 func_idx; if ((entity->function->flags & Ast_Flag_Foreign) != 0) @@ -2393,22 +2376,22 @@ void onyx_wasm_module_compile(OnyxWasmModule* module, ProgramInfo* program) { } case Entity_Type_String_Literal: { - compile_string_literal(module, (AstStrLit *) entity->strlit); + emit_string_literal(module, (AstStrLit *) entity->strlit); break; } case Entity_Type_File_Contents: { - compile_file_contents(module, (AstFileContents *) entity->file_contents); + emit_file_contents(module, (AstFileContents *) entity->file_contents); break; } case Entity_Type_Memory_Reservation: { - compile_memory_reservation(module, (AstMemRes *) entity->mem_res); + emit_memory_reservation(module, (AstMemRes *) entity->mem_res); break; } - case Entity_Type_Function: compile_function(module, entity->function); break; - case Entity_Type_Global: compile_global(module, entity->global); break; + case Entity_Type_Function: EMIT_FUNCtion(module, entity->function); break; + case Entity_Type_Global: emit_global(module, entity->global); break; default: break; } -- 2.25.1