summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parser/parser_stmt.c8
-rw-r--r--src/utils/utils.c3
-rw-r--r--src/zen/zen_facts.c16
-rw-r--r--src/zprep.h1
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;