From 8d189a070ce81e44d41a4ae087576b41f61735b5 Mon Sep 17 00:00:00 2001 From: A1029384756 Date: Wed, 12 Nov 2025 11:42:55 -0500 Subject: added #all_or_none --- src/odin/printer/visit.odin | 4 ++++ src/server/collector.odin | 3 +++ src/server/completion.odin | 1 + src/server/documentation.odin | 3 +++ src/server/symbol.odin | 4 ++++ 5 files changed, 15 insertions(+) (limited to 'src') diff --git a/src/odin/printer/visit.odin b/src/odin/printer/visit.odin index 8c820d4..6294dbe 100644 --- a/src/odin/printer/visit.odin +++ b/src/odin/printer/visit.odin @@ -1613,6 +1613,10 @@ visit_expr :: proc( document = cons_with_nopl(document, text("#no_copy")) } + if v.is_all_or_none { + document = cons_with_nopl(document, text("#all_or_none")) + } + if v.align != nil { document = cons_with_nopl(document, text("#align")) document = cons_with_nopl(document, visit_expr(p, v.align)) diff --git a/src/server/collector.odin b/src/server/collector.odin index 8dcb794..3491f63 100644 --- a/src/server/collector.odin +++ b/src/server/collector.odin @@ -166,6 +166,9 @@ collect_struct_fields :: proc( b.align = clone_expr(struct_type.align, collection.allocator, &collection.unique_strings) b.max_field_align = clone_expr(struct_type.max_field_align, collection.allocator, &collection.unique_strings) b.min_field_align = clone_expr(struct_type.min_field_align, collection.allocator, &collection.unique_strings) + if struct_type.is_all_or_none { + b.tags |= {.Is_All_Or_None} + } if struct_type.is_no_copy { b.tags |= {.Is_No_Copy} } diff --git a/src/server/completion.odin b/src/server/completion.odin index 44916d7..4b1e099 100644 --- a/src/server/completion.odin +++ b/src/server/completion.odin @@ -586,6 +586,7 @@ DIRECTIVE_NAME_LIST :: []string { "packed", "raw_union", "align", + "all_or_none", /* union type */ "no_nil", "shared_nil", diff --git a/src/server/documentation.odin b/src/server/documentation.odin index 3ae3c53..0069ac4 100644 --- a/src/server/documentation.odin +++ b/src/server/documentation.odin @@ -634,6 +634,9 @@ write_struct_hover :: proc(sb: ^strings.Builder, ast_context: ^AstContext, v: Sy case .Is_No_Copy: wrote_tag = true strings.write_string(sb, " #no_copy") + case .Is_All_Or_None: + wrote_tag = true + strings.write_string(sb, " #all_or_none") } } diff --git a/src/server/symbol.odin b/src/server/symbol.odin index 5181ca3..d10178d 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -16,6 +16,7 @@ SymbolStructTag :: enum { Is_Packed, Is_Raw_Union, Is_No_Copy, + Is_All_Or_None, } SymbolStructTags :: bit_set[SymbolStructTag] @@ -427,6 +428,9 @@ write_struct_type :: proc( b.align = v.align b.max_field_align = v.max_field_align b.min_field_align = v.min_field_align + if v.is_all_or_none { + b.tags |= {.Is_All_Or_None} + } if v.is_no_copy { b.tags |= {.Is_No_Copy} } -- cgit v1.2.3