aboutsummaryrefslogtreecommitdiff
path: root/src/server/symbol.odin
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2024-04-15 23:20:50 +0200
committerLaytan Laats <laytanlaats@hotmail.com>2024-04-15 23:20:50 +0200
commit25de95df4262c318de7ded5bdc5ca027ab6d4872 (patch)
tree11a8d879f9182a70bd8ef54283344266b04667db /src/server/symbol.odin
parentaa1aabda1cce68a6038c48429cc759f09ad2ebab (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.odin16
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
}