diff options
| -rw-r--r-- | src/parser/parser_stmt.c | 8 | ||||
| -rw-r--r-- | src/utils/utils.c | 3 | ||||
| -rw-r--r-- | src/zen/zen_facts.c | 16 | ||||
| -rw-r--r-- | src/zprep.h | 1 |
4 files changed, 26 insertions, 2 deletions
diff --git a/src/parser/parser_stmt.c b/src/parser/parser_stmt.c index 24dfa10..6f93dbf 100644 --- a/src/parser/parser_stmt.c +++ b/src/parser/parser_stmt.c @@ -3725,6 +3725,14 @@ ASTNode *parse_import(ParserContext *ctx, Lexer *l) } } + // Canonicalize path to avoid duplicates (for example: "./std/io.zc" vs "std/io.zc") + char *real_fn = realpath(fn, NULL); + if (real_fn) + { + free(fn); + fn = real_fn; + } + // Check if file already imported if (is_file_imported(ctx, fn)) { diff --git a/src/utils/utils.c b/src/utils/utils.c index 19a722e..66a0a22 100644 --- a/src/utils/utils.c +++ b/src/utils/utils.c @@ -107,6 +107,7 @@ void zwarn(const char *fmt, ...) { return; } + g_warning_count++; va_list a; va_start(a, fmt); fprintf(stderr, COLOR_YELLOW "warning: " COLOR_RESET COLOR_BOLD); @@ -122,6 +123,7 @@ void zwarn_at(Token t, const char *fmt, ...) return; } // Header: 'warning: message'. + g_warning_count++; va_list a; va_start(a, fmt); fprintf(stderr, COLOR_YELLOW "warning: " COLOR_RESET COLOR_BOLD); @@ -528,6 +530,7 @@ char *load_file(const char *fn) // ** Build Directives ** char g_link_flags[MAX_FLAGS_SIZE] = ""; char g_cflags[MAX_FLAGS_SIZE] = ""; +int g_warning_count = 0; CompilerConfig g_config = {0}; void scan_build_directives(ParserContext *ctx, const char *src) diff --git a/src/zen/zen_facts.c b/src/zen/zen_facts.c index d245d9b..a86e0cb 100644 --- a/src/zen/zen_facts.c +++ b/src/zen/zen_facts.c @@ -369,7 +369,7 @@ void zen_init(void) // Global helper to print. void zzen_at(Token t, const char *msg, const char *url) { - fprintf(stderr, "\033[1;35mzen: \033[0m\033[1m%s\033[0m\n", msg); + fprintf(stderr, COLOR_GREEN "zen: " COLOR_RESET COLOR_BOLD "%s" COLOR_RESET "\n", msg); extern char *g_current_filename; if (t.line > 0) @@ -395,7 +395,7 @@ void zzen_at(Token t, const char *msg, const char *url) { fprintf(stderr, " "); } - fprintf(stderr, "\033[1;35m^ zen tip\033[0m\n"); + fprintf(stderr, COLOR_GREEN "^ zen tip" COLOR_RESET "\n"); } if (url) @@ -416,6 +416,12 @@ int zen_trigger_at(ZenTrigger t, Token location) return 0; } + extern int g_warning_count; + if (g_warning_count > 0) + { + return 0; + } + if ((rand() % 100) >= ZEN_PROBABILITY) { return 0; @@ -464,6 +470,12 @@ void zen_trigger_global(void) return; } + extern int g_warning_count; + if (g_warning_count > 0) + { + return; + } + if ((rand() % 100) >= ZEN_PROBABILITY) { return; diff --git a/src/zprep.h b/src/zprep.h index 669169c..75d9cac 100644 --- a/src/zprep.h +++ b/src/zprep.h @@ -128,6 +128,7 @@ char *load_file(const char *filename); // ** Build Directives ** extern char g_link_flags[MAX_FLAGS_SIZE]; extern char g_cflags[MAX_FLAGS_SIZE]; +extern int g_warning_count; struct ParserContext; |
