aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2024-10-03 21:30:40 +0200
committerDanielGavin <danielgavin5@hotmail.com>2024-10-03 21:30:40 +0200
commitafe0c725e0bd3a0b79adddf3c997391a5088ab35 (patch)
tree98e6573746639cbe4edbad3364bb58931457e0e0 /src/server
parent4b8678b8f6b54e3c8dbbbd943228e6b9c919f330 (diff)
Fix issues with call expression inside another generic call expression.
Diffstat (limited to 'src/server')
-rw-r--r--src/server/generics.odin19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 8c8a5a2..ffb3cb6 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -495,6 +495,25 @@ resolve_generic_function_symbol :: proc(
return {}, false
}
+ //If we have a function call, we should instead look at the return value: bar(foo(123))
+ if symbol_value, ok := symbol.value.(SymbolProcedureValue); ok && len(symbol_value.return_types) > 0 {
+ if _, ok := call_expr.args[i].derived.(^ast.Call_Expr); ok {
+ if symbol_value.return_types[0].type != nil {
+ if symbol, ok = resolve_type_expression(ast_context, symbol_value.return_types[0].type);
+ ok {
+ symbol_expr = symbol_to_expr(
+ symbol,
+ call_expr.args[i].pos.file,
+ context.temp_allocator,
+ )
+ if symbol_expr == nil {
+ return {}, false
+ }
+ }
+ }
+ }
+ }
+
symbol_expr = clone_expr(symbol_expr, ast_context.allocator, nil)
param_type := clone_expr(param.type, ast_context.allocator, nil)