aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin2
-rw-r--r--src/server/generics.odin21
2 files changed, 22 insertions, 1 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index b6ae251..228eafa 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -2307,6 +2307,8 @@ resolve_location_implicit_selector :: proc(
symbol: Symbol,
ok: bool,
) {
+ ok = true
+
reset_ast_context(ast_context)
set_ast_package_set_scoped(ast_context, ast_context.document_package)
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 65271b2..9e915c3 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -261,6 +261,25 @@ resolve_poly :: proc(
return true
}
}
+ case ^ast.Pointer_Type:
+ if call_pointer, ok := call_node.derived.(^ast.Pointer_Type); ok {
+ if poly_type, ok := p.elem.derived.(^ast.Poly_Type); ok {
+ if ident, ok := unwrap_ident(poly_type.type); ok {
+ save_poly_map(ident, call_pointer.elem, poly_map)
+ }
+
+ if poly_type.specialization != nil {
+ return resolve_poly(
+ ast_context,
+ call_pointer.elem,
+ call_symbol,
+ p.elem,
+ poly_map,
+ )
+ }
+ return true
+ }
+ }
case ^ast.Comp_Lit:
if comp_lit, ok := call_node.derived.(^ast.Comp_Lit); ok {
if poly_type, ok := p.type.derived.(^ast.Poly_Type); ok {
@@ -284,7 +303,7 @@ resolve_poly :: proc(
return true
}
case:
- log.panicf("Unhandled specialization %v", specialization.derived)
+ log.error("Unhandled specialization %v", specialization.derived)
}
return false