aboutsummaryrefslogtreecommitdiff
path: root/src/server/generics.odin
diff options
context:
space:
mode:
authorBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-08-09 09:45:33 -0400
committerBrad Lewis <22850972+BradLewis@users.noreply.github.com>2025-08-09 10:11:41 -0400
commit5b4b6564584ccf544f5fe7e0ce9bafd2e77cdd09 (patch)
tree1f35776123ece621ad6309a142379c18a1b30467 /src/server/generics.odin
parent3e183972229782baefc269d8ca940a60caad83c1 (diff)
Implement method to resolve poly return types based on the types of local variables
Diffstat (limited to 'src/server/generics.odin')
-rw-r--r--src/server/generics.odin5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 1802efb..a629d3e 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -494,6 +494,7 @@ resolve_generic_function_symbol :: proc(
if symbol, ok := resolve_type_expression(ast_context, call_expr.args[i]); ok {
file := strings.trim_prefix(symbol.uri, "file://")
+
if file == "" {
file = call_expr.args[i].pos.file
}
@@ -522,6 +523,10 @@ resolve_generic_function_symbol :: proc(
}
}
+ // We set the offset so we can find it as a local if it's based on the type of a local var
+ symbol_expr.pos.offset = call_expr.pos.offset
+ symbol_expr.end.offset = call_expr.end.offset
+
symbol_expr = clone_expr(symbol_expr, ast_context.allocator, nil)
param_type := clone_expr(param.type, ast_context.allocator, nil)