mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-29 01:14:40 +00:00
Add doc-format support for bit_field
This commit is contained in:
@@ -10,8 +10,8 @@ Array :: struct($T: typeid) {
|
||||
String :: distinct Array(byte)
|
||||
|
||||
Version_Type_Major :: 0
|
||||
Version_Type_Minor :: 2
|
||||
Version_Type_Patch :: 4
|
||||
Version_Type_Minor :: 3
|
||||
Version_Type_Patch :: 0
|
||||
|
||||
Version_Type :: struct {
|
||||
major, minor, patch: u8,
|
||||
@@ -110,6 +110,8 @@ Entity_Flag :: enum u32le {
|
||||
Param_No_Alias = 7, // #no_alias
|
||||
Param_Any_Int = 8, // #any_int
|
||||
|
||||
Bit_Field_Field = 19,
|
||||
|
||||
Type_Alias = 20,
|
||||
|
||||
Builtin_Pkg_Builtin = 30,
|
||||
@@ -137,6 +139,7 @@ Entity :: struct {
|
||||
// May be used by (Struct fields and procedure fields):
|
||||
// .Variable
|
||||
// .Constant
|
||||
// This is equal to the "bit size" it this is a `bit_field`s field
|
||||
field_group_index: i32le,
|
||||
|
||||
// May used by:
|
||||
@@ -187,6 +190,7 @@ Type_Kind :: enum u32le {
|
||||
Multi_Pointer = 22,
|
||||
Matrix = 23,
|
||||
Soa_Pointer = 24,
|
||||
Bit_Field = 25,
|
||||
}
|
||||
|
||||
Type_Elems_Cap :: 4
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user