diff options
| author | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-18 23:23:50 +0000 |
|---|---|---|
| committer | Zuhaitz Méndez Fernández de Aránguiz <zuhaitz@debian> | 2026-01-18 23:23:50 +0000 |
| commit | 82559fe7ff00f5cce030f4d5231a270267087624 (patch) | |
| tree | d6571b5376ca153d46947b83ae94508de714b089 /src | |
| parent | 562e010dd47ec1e238017369ea481700d826b68d (diff) | |
Fix for #5
Diffstat (limited to 'src')
| -rw-r--r-- | src/parser/parser_expr.c | 9 | ||||
| -rw-r--r-- | src/parser/parser_stmt.c | 9 | ||||
| -rw-r--r-- | src/parser/parser_utils.c | 31 |
3 files changed, 44 insertions, 5 deletions
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 == ')') { |
