diff options
| author | A1029384756 <hayden.gray104@gmail.com> | 2025-11-12 11:42:55 -0500 |
|---|---|---|
| committer | A1029384756 <hayden.gray104@gmail.com> | 2025-11-12 11:45:20 -0500 |
| commit | 8d189a070ce81e44d41a4ae087576b41f61735b5 (patch) | |
| tree | 4c7396f0eb4a23a4dc90dc65f30122df6467d12e /src | |
| parent | f8a4f450e526382e8076102f6d65324cbfa5c207 (diff) | |
added #all_or_none
Diffstat (limited to 'src')
| -rw-r--r-- | src/odin/printer/visit.odin | 4 | ||||
| -rw-r--r-- | src/server/collector.odin | 3 | ||||
| -rw-r--r-- | src/server/completion.odin | 1 | ||||
| -rw-r--r-- | src/server/documentation.odin | 3 | ||||
| -rw-r--r-- | src/server/symbol.odin | 4 |
5 files changed, 15 insertions, 0 deletions
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} } |