aboutsummaryrefslogtreecommitdiff
path: root/src/server/generics.odin
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-08-31 09:33:02 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-08-31 09:33:02 -0400
commit83bbda80b7701cfb8b9f1590f7f47e452351fea5 (patch)
treedb07b573bc54d8426ff364aacb25362639bf9796 /src/server/generics.odin
parent03091375333703fc78ac9aafd508155436537f52 (diff)
Resolve generic overloaded procs that don't have a return value
Diffstat (limited to 'src/server/generics.odin')
-rw-r--r--src/server/generics.odin26
1 files changed, 10 insertions, 16 deletions
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 7eea7a2..33543cf 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -431,19 +431,21 @@ resolve_generic_function :: proc {
}
resolve_generic_function_ast :: proc(ast_context: ^AstContext, proc_lit: ast.Proc_Lit) -> (Symbol, bool) {
- if proc_lit.type.params == nil {
+ if ast_context.call == nil {
return Symbol{}, false
}
- if proc_lit.type.results == nil {
- return Symbol{}, false
+ params: []^ast.Field
+ if proc_lit.type.params != nil {
+ params = proc_lit.type.params.list
}
- if ast_context.call == nil {
- return Symbol{}, false
+ results: []^ast.Field
+ if proc_lit.type.results != nil {
+ results = proc_lit.type.results.list
}
- return resolve_generic_function_symbol(ast_context, proc_lit.type.params.list, proc_lit.type.results.list)
+ return resolve_generic_function_symbol(ast_context, params, results)
}
@@ -455,14 +457,6 @@ resolve_generic_function_symbol :: proc(
Symbol,
bool,
) {
- if params == nil {
- return {}, false
- }
-
- if results == nil {
- return {}, false
- }
-
if ast_context.call == nil {
return {}, false
}
@@ -701,7 +695,7 @@ resolve_poly_struct :: proc(ast_context: ^AstContext, b: ^SymbolStructValueBuild
poly_map: map[string]^ast.Expr,
symbol_value_builder: ^SymbolStructValueBuilder,
parent: ^ast.Node,
- parent_proc: ^ast.Proc_Type,
+ parent_proc: ^ast.Proc_Type,
i: int,
poly_index: int,
}
@@ -755,7 +749,7 @@ resolve_poly_struct :: proc(ast_context: ^AstContext, b: ^SymbolStructValueBuild
}
#partial switch v in node.derived {
- case ^ast.Array_Type, ^ast.Dynamic_Array_Type, ^ast.Selector_Expr, ^ast.Pointer_Type:
+ case ^ast.Array_Type, ^ast.Dynamic_Array_Type, ^ast.Selector_Expr, ^ast.Pointer_Type:
data.parent = node
case ^ast.Proc_Type:
data.parent_proc = v