From a7eb36e4ac1eb437f99e2b1d8d8aab93f0767fc1 Mon Sep 17 00:00:00 2001 From: Zuhaitz Méndez Fernández de Aránguiz Date: Fri, 23 Jan 2026 18:20:25 +0000 Subject: Fix for #93 --- src/parser/parser_struct.c | 52 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 40 insertions(+), 12 deletions(-) (limited to 'src/parser/parser_struct.c') diff --git a/src/parser/parser_struct.c b/src/parser/parser_struct.c index 01d1156..19bfd47 100644 --- a/src/parser/parser_struct.c +++ b/src/parser/parser_struct.c @@ -252,9 +252,16 @@ ASTNode *parse_impl(ParserContext *ctx, Lexer *l) f->func.args = na; // Register function for lookup - register_func(ctx, mangled, f->func.arg_count, f->func.defaults, f->func.arg_types, - f->func.ret_type_info, f->func.is_varargs, f->func.is_async, - f->token); + if (f->func.generic_params) + { + register_func_template(ctx, mangled, f->func.generic_params, f); + } + else + { + register_func(ctx, mangled, f->func.arg_count, f->func.defaults, + f->func.arg_types, f->func.ret_type_info, f->func.is_varargs, + f->func.is_async, f->token); + } if (!h) { @@ -284,9 +291,16 @@ ASTNode *parse_impl(ParserContext *ctx, Lexer *l) f->func.args = na; // Register function for lookup - register_func(ctx, mangled, f->func.arg_count, f->func.defaults, - f->func.arg_types, f->func.ret_type_info, f->func.is_varargs, - f->func.is_async, f->token); + if (f->func.generic_params) + { + register_func_template(ctx, mangled, f->func.generic_params, f); + } + else + { + register_func(ctx, mangled, f->func.arg_count, f->func.defaults, + f->func.arg_types, f->func.ret_type_info, f->func.is_varargs, + f->func.is_async, f->token); + } if (!h) { @@ -505,9 +519,16 @@ ASTNode *parse_impl(ParserContext *ctx, Lexer *l) free(f->func.args); f->func.args = na; - register_func(ctx, mangled, f->func.arg_count, f->func.defaults, - f->func.arg_types, f->func.ret_type_info, f->func.is_varargs, 0, - f->token); + if (f->func.generic_params) + { + register_func_template(ctx, mangled, f->func.generic_params, f); + } + else + { + register_func(ctx, mangled, f->func.arg_count, f->func.defaults, + f->func.arg_types, f->func.ret_type_info, f->func.is_varargs, + 0, f->token); + } if (!h) { @@ -534,9 +555,16 @@ ASTNode *parse_impl(ParserContext *ctx, Lexer *l) char *na = patch_self_args(f->func.args, name1); free(f->func.args); f->func.args = na; - register_func(ctx, mangled, f->func.arg_count, f->func.defaults, - f->func.arg_types, f->func.ret_type_info, f->func.is_varargs, - 1, f->token); + if (f->func.generic_params) + { + register_func_template(ctx, mangled, f->func.generic_params, f); + } + else + { + register_func(ctx, mangled, f->func.arg_count, f->func.defaults, + f->func.arg_types, f->func.ret_type_info, + f->func.is_varargs, 1, f->token); + } if (!h) { h = f; -- cgit v1.2.3