summaryrefslogtreecommitdiff
path: root/src/parser/parser_struct.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/parser_struct.c')
-rw-r--r--src/parser/parser_struct.c52
1 files changed, 40 insertions, 12 deletions
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;