aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2024-02-22 17:37:42 +0000
committergingerBill <bill@gingerbill.org>2024-02-22 17:37:42 +0000
commitdcbcf75269a75a9d677104f40dd99d3610e1353d (patch)
treeb2d62f2ef494a96bded966f64829274948a76064 /src
parent59479b2ba622a0c8ee528eabd84c99c955bc0ea8 (diff)
Add doc-format support for `bit_field`
Diffstat (limited to 'src')
-rw-r--r--src/check_expr.cpp1
-rw-r--r--src/docs_format.cpp9
-rw-r--r--src/docs_writer.cpp24
3 files changed, 29 insertions, 5 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 9b15ae3b2..aba2f5831 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -11174,7 +11174,6 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan
}
str = write_expr_to_string(str, bf->fields[i], false);
}
- return str;
}
str = gb_string_appendc(str, "}");
case_end;
diff --git a/src/docs_format.cpp b/src/docs_format.cpp
index d0bca214b..779190e62 100644
--- a/src/docs_format.cpp
+++ b/src/docs_format.cpp
@@ -14,8 +14,8 @@ struct OdinDocVersionType {
};
#define OdinDocVersionType_Major 0
-#define OdinDocVersionType_Minor 2
-#define OdinDocVersionType_Patch 4
+#define OdinDocVersionType_Minor 3
+#define OdinDocVersionType_Patch 0
struct OdinDocHeaderBase {
u8 magic[8];
@@ -84,6 +84,7 @@ enum OdinDocTypeKind : u32 {
OdinDocType_MultiPointer = 22,
OdinDocType_Matrix = 23,
OdinDocType_SoaPointer = 24,
+ OdinDocType_BitField = 25,
};
enum OdinDocTypeFlag_Basic : u32 {
@@ -170,6 +171,8 @@ enum OdinDocEntityFlag : u64 {
OdinDocEntityFlag_Param_NoAlias = 1ull<<7,
OdinDocEntityFlag_Param_AnyInt = 1ull<<8,
+ OdinDocEntityFlag_BitField_Field = 1ull<<19,
+
OdinDocEntityFlag_Type_Alias = 1ull<<20,
OdinDocEntityFlag_Builtin_Pkg_Builtin = 1ull<<30,
@@ -192,7 +195,7 @@ struct OdinDocEntity {
u32 reserved_for_init;
OdinDocString comment; // line comment
OdinDocString docs; // preceding comment
- i32 field_group_index;
+ i32 field_group_index; // For `bit_field`s this is the "bit_size"
OdinDocEntityIndex foreign_library;
OdinDocString link_name;
OdinDocArray<OdinDocAttribute> attributes;
diff --git a/src/docs_writer.cpp b/src/docs_writer.cpp
index 6816ae8eb..88d9df40c 100644
--- a/src/docs_writer.cpp
+++ b/src/docs_writer.cpp
@@ -615,6 +615,19 @@ gb_internal OdinDocTypeIndex odin_doc_type(OdinDocWriter *w, Type *type) {
doc_type.types = odin_write_slice(w, types, gb_count_of(types));
}
break;
+ case Type_BitField:
+ doc_type.kind = OdinDocType_BitField;
+ {
+ auto fields = array_make<OdinDocEntityIndex>(heap_allocator(), type->BitField.fields.count);
+ defer (array_free(&fields));
+
+ for_array(i, type->BitField.fields) {
+ fields[i] = odin_doc_add_entity(w, type->BitField.fields[i]);
+ }
+ doc_type.entities = odin_write_slice(w, fields.data, fields.count);
+ }
+ break;
+
case Type_Struct:
doc_type.kind = OdinDocType_Struct;
if (type->Struct.soa_kind != StructSoa_None) {
@@ -863,6 +876,10 @@ gb_internal OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e)
}
break;
case Entity_Variable:
+ if (e->flags & EntityFlag_BitFieldField) {
+ flags |= OdinDocEntityFlag_BitField_Field;
+ }
+
if (e->Variable.is_foreign) { flags |= OdinDocEntityFlag_Foreign; }
if (e->Variable.is_export) { flags |= OdinDocEntityFlag_Export; }
if (e->Variable.thread_local_model != "") {
@@ -873,7 +890,12 @@ gb_internal OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e)
if (init_expr == nullptr) {
init_expr = e->Variable.init_expr;
}
- field_group_index = e->Variable.field_group_index;
+
+ if (e->flags & EntityFlag_BitFieldField) {
+ field_group_index = cast(i32)e->Variable.bit_field_bit_size;
+ } else {
+ field_group_index = e->Variable.field_group_index;
+ }
break;
case Entity_Constant:
field_group_index = e->Constant.field_group_index;