diff options
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/analysis.odin | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index b7564b1..3f900ff 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -772,8 +772,21 @@ resolve_function_overload :: proc(ast_context: ^AstContext, group: ast.Proc_Grou if !ok { break next_fn } - - if !is_symbol_same_typed(ast_context, call_symbol, arg_symbol, proc_arg.flags) { + + if value, ok := arg_symbol.value.(SymbolUnionValue); ok { + found := false + for variant in value.types { + if symbol, ok := resolve_type_expression(ast_context, variant); ok { + if is_symbol_same_typed(ast_context, call_symbol, symbol, proc_arg.flags) { + found = true + break + } + } + } + if !found { + break next_fn + } + } else if !is_symbol_same_typed(ast_context, call_symbol, arg_symbol, proc_arg.flags) { break next_fn } |