From: Brendan Hansen Date: Wed, 8 Feb 2023 22:03:38 +0000 (-0600) Subject: bugfixes with symbol information; sorting symbols X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=a9c9579b1c41dff2c9c53d491d654dfa8121ead6;p=onyx.git bugfixes with symbol information; sorting symbols --- diff --git a/compiler/src/doc.c b/compiler/src/doc.c index 0cfc5305..1808946f 100644 --- a/compiler/src/doc.c +++ b/compiler/src/doc.c @@ -51,6 +51,18 @@ void onyx_docs_emit_tags(char *dest) { bh_file_close(&tags_file); } +static i32 sort_symbol_resolutions(const SymbolResolution *a, const SymbolResolution *b) { + if (a->file_id != b->file_id) { + return a->file_id > b->file_id ? 1 : -1; + } + + if (a->line != b->line) { + return a->line > b->line ? 1 : -1; + } + + return 0; +} + void onyx_docs_emit_symbol_info(const char *dest) { bh_file sym_file; if (bh_file_create(&sym_file, dest) != BH_FILE_ERROR_NONE) { @@ -60,6 +72,11 @@ void onyx_docs_emit_symbol_info(const char *dest) { SymbolInfoTable *syminfo = context.symbol_info; + qsort(syminfo->symbols_resolutions, + bh_arr_length(syminfo->symbols_resolutions), + sizeof(SymbolResolution), + (int (*)(const void *, const void*)) sort_symbol_resolutions); + bh_buffer file_section; bh_buffer_init(&file_section, global_heap_allocator, 2048); fori (i, 0, shlen(syminfo->files)) { diff --git a/compiler/src/utils.c b/compiler/src/utils.c index 56a8241d..37a33830 100644 --- a/compiler/src/utils.c +++ b/compiler/src/utils.c @@ -1365,6 +1365,8 @@ void track_declaration_for_symbol_info(OnyxFilePos pos, AstNode *node) { SymbolInfoTable *syminfo = context.symbol_info; assert(syminfo); + if (bh_imap_has(&syminfo->node_to_id, (u64) node)) return; + u32 symbol_id = syminfo->next_symbol_id++; u32 file_id = symbol_info_get_file_id(syminfo, pos.filename);