diff --git a/src/server/analysis.odin b/src/server/analysis.odin index 0417620..630f4a1 100644 --- a/src/server/analysis.odin +++ b/src/server/analysis.odin @@ -2329,6 +2329,7 @@ make_symbol_procedure_from_ast :: proc( arg_types = arg_types[:], orig_arg_types = arg_types[:], generic = v.generic, + diverging = v.diverging, } if _, ok := common.get_attribute_objc_name(attributes); ok { diff --git a/src/server/collector.odin b/src/server/collector.odin index da98f6a..643f212 100644 --- a/src/server/collector.odin +++ b/src/server/collector.odin @@ -131,6 +131,7 @@ collect_procedure_fields :: proc( arg_types = args[:], orig_arg_types = args[:], generic = is_procedure_generic(proc_type), + diverging = proc_type.diverging, } return value diff --git a/src/server/signature.odin b/src/server/signature.odin index f6a277c..5cc4c05 100644 --- a/src/server/signature.odin +++ b/src/server/signature.odin @@ -80,6 +80,8 @@ build_procedure_symbol_signature :: proc(symbol: ^Symbol) { if len(value.orig_return_types) > 1 { strings.write_string(&builder, ")") } + } else if value.diverging { + strings.write_string(&builder, " -> !") } symbol.signature = strings.to_string(builder) } else if value, ok := symbol.value.(SymbolAggregateValue); ok { diff --git a/src/server/symbol.odin b/src/server/symbol.odin index 1bed406..8a3f4ab 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -41,6 +41,7 @@ SymbolProcedureValue :: struct { orig_return_types: []^ast.Field, //When generics have overloaded the types, we store the original version here. orig_arg_types: []^ast.Field, //When generics have overloaded the types, we store the original version here. generic: bool, + diverging: bool, } SymbolProcedureGroupValue :: struct {