aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanielGavin <danielgavin5@hotmail.com>2023-01-24 20:44:39 +0100
committerDanielGavin <danielgavin5@hotmail.com>2023-01-24 20:44:39 +0100
commit74acfe4fa2fd9a1c8636c3666b8fea38ebdef727 (patch)
tree366b4640e6ea244e7b0f6e75eb71abea181731d2
parent4605d64accc56bf9406388d32e4612c4f2ea3543 (diff)
Fixed error where `->` with call expression couldn't be resolved
-rw-r--r--src/server/analysis.odin20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index ff42709..25dc2ef 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -1308,7 +1308,25 @@ internal_resolve_type_expression :: proc(
case ^Implicit_Selector_Expr:
return Symbol{}, false
case ^Selector_Call_Expr:
- return internal_resolve_type_expression(ast_context, v.expr)
+ if selector, ok := internal_resolve_type_expression(
+ ast_context,
+ v.expr,
+ ); ok {
+ ast_context.use_locals = false
+ ast_context.current_package = selector.pkg
+
+ #partial switch s in selector.value {
+ case SymbolProcedureValue:
+ if len(s.return_types) == 1 {
+ return internal_resolve_type_expression(
+ ast_context,
+ s.return_types[0].type,
+ )
+ }
+ }
+
+ return selector, true
+ }
case ^Selector_Expr:
if selector, ok := internal_resolve_type_expression(
ast_context,