Add doc-format support for bit_field

This commit is contained in:
gingerBill
2024-02-22 17:37:42 +00:00
parent 59479b2ba6
commit dcbcf75269
4 changed files with 35 additions and 7 deletions

View File

@@ -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;