diff options
| author | Daniel Gavin <danielgavin5@hotmail.com> | 2022-10-25 13:56:42 +0200 |
|---|---|---|
| committer | Daniel Gavin <danielgavin5@hotmail.com> | 2022-10-25 13:56:42 +0200 |
| commit | 921b1302a62d62ca112bc7eacbfcbf8d5340bea1 (patch) | |
| tree | f4b395200aafcedc4234437981ca7e8e1469daac /src | |
| parent | 83c61f4f5f439b476855a3f5ca7e49c6ac0df465 (diff) | |
Don't use the internal resolves in function overload(it gave false positive recursion)
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/analysis.odin | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 1e32fe6..e6f640d 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -868,10 +868,8 @@ resolve_function_overload :: proc( candidates := make([dynamic]Symbol, context.temp_allocator) for arg_expr in group.args { - next_fn: if f, ok := internal_resolve_type_expression( - ast_context, - arg_expr, - ); ok { + next_fn: if f, ok := resolve_type_expression(ast_context, arg_expr); + ok { if call_expr == nil || len(call_expr.args) == 0 { append(&candidates, f) break next_fn @@ -905,7 +903,7 @@ resolve_function_overload :: proc( //named parameter if field, is_field := arg.derived.(^ast.Field_Value); is_field { - call_symbol, ok = internal_resolve_type_expression( + call_symbol, ok = resolve_type_expression( ast_context, field.value, ) @@ -923,7 +921,7 @@ resolve_function_overload :: proc( break next_fn } } else { - call_symbol, ok = internal_resolve_type_expression( + call_symbol, ok = resolve_type_expression( ast_context, arg, ) @@ -937,7 +935,7 @@ resolve_function_overload :: proc( if len(p.return_types) != 1 { break next_fn } - if s, ok := internal_resolve_type_expression( + if s, ok := resolve_type_expression( ast_context, p.return_types[0].type, ); ok { @@ -946,12 +944,12 @@ resolve_function_overload :: proc( } if procedure.arg_types[i].type != nil { - arg_symbol, ok = internal_resolve_type_expression( + arg_symbol, ok = resolve_type_expression( ast_context, procedure.arg_types[i].type, ) } else { - arg_symbol, ok = internal_resolve_type_expression( + arg_symbol, ok = resolve_type_expression( ast_context, procedure.arg_types[i].default_value, ) @@ -1088,6 +1086,7 @@ internal_resolve_type_expression :: proc( } if check_node_recursion(ast_context, node) { + fmt.println("recursion expr") //log.error("Recursion detected") return {}, false } @@ -1530,6 +1529,7 @@ internal_resolve_type_identifier :: proc( using ast if check_node_recursion(ast_context, node.derived.(^ast.Ident)) { + fmt.println("recursion ident") //log.error("Recursion detected") return {}, false } |