diff options
| author | DanielGavin <danielgavin5@hotmail.com> | 2024-07-11 21:01:47 +0200 |
|---|---|---|
| committer | DanielGavin <danielgavin5@hotmail.com> | 2024-07-11 21:01:47 +0200 |
| commit | 28f10b496b051560ad60f35a57a0ffde543b053e (patch) | |
| tree | 1fddb10e5f1ba887969aaa2a328e58b4d412bdc6 | |
| parent | 9fccfd8ddc42de2275dad94f357eb3828fd3eeed (diff) | |
| parent | 905716a76f4c46afd76305b207f80b7f7e0c2911 (diff) | |
Merge branch 'master' into rename
| -rw-r--r-- | src/server/generics.odin | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/server/generics.odin b/src/server/generics.odin index 5ff5997..237a271 100644 --- a/src/server/generics.odin +++ b/src/server/generics.odin @@ -148,7 +148,6 @@ resolve_poly :: proc( return found } - case ^ast.Struct_Type: case ^ast.Dynamic_Array_Type: if call_array, ok := call_node.derived.(^ast.Dynamic_Array_Type); ok { if poly_type, ok := p.elem.derived.(^ast.Poly_Type); ok { @@ -304,6 +303,7 @@ resolve_poly :: proc( return true } } + case ^ast.Struct_Type, ^ast.Proc_Type: case ^ast.Ident: return true case: @@ -457,6 +457,26 @@ find_and_replace_poly_type :: proc( v.pos.file = expr.pos.file v.end.file = expr.end.file } + case ^ast.Proc_Type: + if v.params != nil { + for param in v.params.list { + if expr, ok := get_poly_map(param.type, poly_map); ok { + param.type = expr + param.pos.file = expr.pos.file + param.end.file = expr.end.file + } + } + } + + if v.results != nil { + for result in v.results.list { + if expr, ok := get_poly_map(result.type, poly_map); ok { + result.type = expr + result.pos.file = expr.pos.file + result.end.file = expr.end.file + } + } + } } return visitor |