From 82559fe7ff00f5cce030f4d5231a270267087624 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Sun, 18 Jan 2026 23:23:50 +0000 Subject: Fix for #5 --- src/parser/parser_expr.c | 9 ++++++++- src/parser/parser_stmt.c | 9 ++++++++- src/parser/parser_utils.c | 31 ++++++++++++++++++++++++++++--- 3 files changed, 44 insertions(+), 5 deletions(-) (limited to 'src/parser') diff --git a/src/parser/parser_expr.c b/src/parser/parser_expr.c index 6d95f12..ef3980c 100644 --- a/src/parser/parser_expr.c +++ b/src/parser/parser_expr.c @@ -800,7 +800,14 @@ static ASTNode *create_fstring_block(ParserContext *ctx, const char *content) } if (depth == 1 && *p == ':' && !colon) { - colon = p; + if ((p + 1) < end_brace && *(p + 1) == ':') + { + p++; + } + else + { + colon = p; + } } p++; } diff --git a/src/parser/parser_stmt.c b/src/parser/parser_stmt.c index daf3f72..8480716 100644 --- a/src/parser/parser_stmt.c +++ b/src/parser/parser_stmt.c @@ -1771,7 +1771,14 @@ char *process_printf_sugar(ParserContext *ctx, const char *content, int newline, } if (depth == 1 && *p == ':' && !colon) { - colon = p; + if (*(p + 1) == ':') + { + p++; + } + else + { + colon = p; + } } if (depth == 0) { diff --git a/src/parser/parser_utils.c b/src/parser/parser_utils.c index 0dc7cbf..df55d16 100644 --- a/src/parser/parser_utils.c +++ b/src/parser/parser_utils.c @@ -774,7 +774,7 @@ Module *find_module(ParserContext *ctx, const char *alias) Module *m = ctx->modules; while (m) { - if (strcmp(m->alias, alias) == 0) + if (m->alias && strcmp(m->alias, alias) == 0) { return m; } @@ -786,7 +786,7 @@ Module *find_module(ParserContext *ctx, const char *alias) void register_module(ParserContext *ctx, const char *alias, const char *path) { Module *m = xmalloc(sizeof(Module)); - m->alias = xstrdup(alias); + m->alias = alias ? xstrdup(alias) : NULL; m->path = xstrdup(path); m->base_name = extract_module_name(path); m->next = ctx->modules; @@ -2582,7 +2582,32 @@ char *rewrite_expr_methods(ParserContext *ctx, char *raw) src++; char mangled[256]; - snprintf(mangled, sizeof(mangled), "%s_%s", func_name, method); + + // Resolve alias + Module *mod = find_module(ctx, func_name); + if (mod) + { + if (mod->is_c_header) + { + snprintf(mangled, sizeof(mangled), "%s", method); + } + else + { + snprintf(mangled, sizeof(mangled), "%s_%s", mod->base_name, method); + } + } + else + { + ASTNode *sdef = find_struct_def(ctx, func_name); + if (sdef) + { + snprintf(mangled, sizeof(mangled), "%s__%s", func_name, method); + } + else + { + snprintf(mangled, sizeof(mangled), "%s_%s", func_name, method); + } + } if (*src == ')') { -- cgit v1.2.3