aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/analysis.odin4
-rw-r--r--src/server/generics.odin6
2 files changed, 6 insertions, 4 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin
index c7c5791..9ac88fe 100644
--- a/src/server/analysis.odin
+++ b/src/server/analysis.odin
@@ -1999,6 +1999,10 @@ resolve_symbol_return :: proc(ast_context: ^AstContext, symbol: Symbol, ok := tr
case SymbolStructValue:
b := symbol_struct_value_builder_make(symbol, v, ast_context.allocator)
if v.poly != nil {
+ clear(&b.types)
+ for type in v.types {
+ append(&b.types, clone_expr(type, context.temp_allocator, nil))
+ }
resolve_poly_struct(ast_context, &b, v.poly)
}
diff --git a/src/server/generics.odin b/src/server/generics.odin
index 1e52dcc..fcb1397 100644
--- a/src/server/generics.odin
+++ b/src/server/generics.odin
@@ -642,8 +642,6 @@ is_procedure_generic :: proc(proc_type: ^ast.Proc_Type) -> bool {
return false
}
-
-// TODO: update to use builder
resolve_poly_struct :: proc(ast_context: ^AstContext, b: ^SymbolStructValueBuilder, poly_params: ^ast.Field_List) {
if ast_context.call == nil {
return
@@ -722,9 +720,9 @@ resolve_poly_struct :: proc(ast_context: ^AstContext, b: ^SymbolStructValueBuild
for type, i in b.types {
data := Visit_Data {
- poly_map = poly_map,
+ poly_map = poly_map,
symbol_value_builder = b,
- i = i,
+ i = i,
}
visitor := ast.Visitor {