diff options
| author | Laytan Laats <laytanlaats@hotmail.com> | 2024-04-15 23:20:50 +0200 |
|---|---|---|
| committer | Laytan Laats <laytanlaats@hotmail.com> | 2024-04-15 23:20:50 +0200 |
| commit | 25de95df4262c318de7ded5bdc5ca027ab6d4872 (patch) | |
| tree | 11a8d879f9182a70bd8ef54283344266b04667db /src/server/symbol.odin | |
| parent | aa1aabda1cce68a6038c48429cc759f09ad2ebab (diff) | |
support bit_fields
They are pretty similar to structs (just a bit simpler) so I piggy backed
of that a lot here, added some basic tests and tested the formatting
myself.
Diffstat (limited to 'src/server/symbol.odin')
| -rw-r--r-- | src/server/symbol.odin | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/server/symbol.odin b/src/server/symbol.odin index 10750a8..31c5fa8 100644 --- a/src/server/symbol.odin +++ b/src/server/symbol.odin @@ -28,6 +28,12 @@ SymbolStructValue :: struct { args: []^ast.Expr, //The arguments in the call expression for poly } +SymbolBitFieldValue :: struct { + names: []string, + ranges: []common.Range, + types: []^ast.Expr, +} + SymbolPackageValue :: struct {} SymbolProcedureValue :: struct { @@ -126,6 +132,7 @@ SymbolValue :: union { SymbolBasicValue, SymbolUntypedValue, SymbolMatrixValue, + SymbolBitFieldValue, } SymbolFlag :: enum { @@ -185,7 +192,8 @@ free_symbol :: proc(symbol: Symbol, allocator: mem.Allocator) { symbol.signature != "struct" && symbol.signature != "union" && symbol.signature != "enum" && - symbol.signature != "bitset" { + symbol.signature != "bitset" && + symbol.signature != "bit_field" { delete(symbol.signature, allocator) } @@ -235,6 +243,9 @@ free_symbol :: proc(symbol: Symbol, allocator: mem.Allocator) { case SymbolUntypedValue: delete(v.tok.text) case SymbolPackageValue: + case SymbolBitFieldValue: + delete(v.names, allocator) + common.free_ast(v.types, allocator) } } @@ -346,6 +357,9 @@ symbol_to_expr :: proc( type.params = new_type(ast.Field_List, pos, end, allocator) type.params.list = v.arg_types return type + case SymbolBitFieldValue: + type := new_type(ast.Bit_Field_Type, pos, end, allocator) + return type case: return nil } |