diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/analysis.odin | 4 | ||||
| -rw-r--r-- | src/server/generics.odin | 6 |
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 { |