mirror of
https://github.com/Ed94/Odin.git
synced 2026-07-31 20:00:09 +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)
|
String :: distinct Array(byte)
|
||||||
|
|
||||||
Version_Type_Major :: 0
|
Version_Type_Major :: 0
|
||||||
Version_Type_Minor :: 2
|
Version_Type_Minor :: 3
|
||||||
Version_Type_Patch :: 4
|
Version_Type_Patch :: 0
|
||||||
|
|
||||||
Version_Type :: struct {
|
Version_Type :: struct {
|
||||||
major, minor, patch: u8,
|
major, minor, patch: u8,
|
||||||
@@ -110,6 +110,8 @@ Entity_Flag :: enum u32le {
|
|||||||
Param_No_Alias = 7, // #no_alias
|
Param_No_Alias = 7, // #no_alias
|
||||||
Param_Any_Int = 8, // #any_int
|
Param_Any_Int = 8, // #any_int
|
||||||
|
|
||||||
|
Bit_Field_Field = 19,
|
||||||
|
|
||||||
Type_Alias = 20,
|
Type_Alias = 20,
|
||||||
|
|
||||||
Builtin_Pkg_Builtin = 30,
|
Builtin_Pkg_Builtin = 30,
|
||||||
@@ -137,6 +139,7 @@ Entity :: struct {
|
|||||||
// May be used by (Struct fields and procedure fields):
|
// May be used by (Struct fields and procedure fields):
|
||||||
// .Variable
|
// .Variable
|
||||||
// .Constant
|
// .Constant
|
||||||
|
// This is equal to the "bit size" it this is a `bit_field`s field
|
||||||
field_group_index: i32le,
|
field_group_index: i32le,
|
||||||
|
|
||||||
// May used by:
|
// May used by:
|
||||||
@@ -187,6 +190,7 @@ Type_Kind :: enum u32le {
|
|||||||
Multi_Pointer = 22,
|
Multi_Pointer = 22,
|
||||||
Matrix = 23,
|
Matrix = 23,
|
||||||
Soa_Pointer = 24,
|
Soa_Pointer = 24,
|
||||||
|
Bit_Field = 25,
|
||||||
}
|
}
|
||||||
|
|
||||||
Type_Elems_Cap :: 4
|
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);
|
str = write_expr_to_string(str, bf->fields[i], false);
|
||||||
}
|
}
|
||||||
return str;
|
|
||||||
}
|
}
|
||||||
str = gb_string_appendc(str, "}");
|
str = gb_string_appendc(str, "}");
|
||||||
case_end;
|
case_end;
|
||||||
|
|||||||
+6
-3
@@ -14,8 +14,8 @@ struct OdinDocVersionType {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define OdinDocVersionType_Major 0
|
#define OdinDocVersionType_Major 0
|
||||||
#define OdinDocVersionType_Minor 2
|
#define OdinDocVersionType_Minor 3
|
||||||
#define OdinDocVersionType_Patch 4
|
#define OdinDocVersionType_Patch 0
|
||||||
|
|
||||||
struct OdinDocHeaderBase {
|
struct OdinDocHeaderBase {
|
||||||
u8 magic[8];
|
u8 magic[8];
|
||||||
@@ -84,6 +84,7 @@ enum OdinDocTypeKind : u32 {
|
|||||||
OdinDocType_MultiPointer = 22,
|
OdinDocType_MultiPointer = 22,
|
||||||
OdinDocType_Matrix = 23,
|
OdinDocType_Matrix = 23,
|
||||||
OdinDocType_SoaPointer = 24,
|
OdinDocType_SoaPointer = 24,
|
||||||
|
OdinDocType_BitField = 25,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum OdinDocTypeFlag_Basic : u32 {
|
enum OdinDocTypeFlag_Basic : u32 {
|
||||||
@@ -170,6 +171,8 @@ enum OdinDocEntityFlag : u64 {
|
|||||||
OdinDocEntityFlag_Param_NoAlias = 1ull<<7,
|
OdinDocEntityFlag_Param_NoAlias = 1ull<<7,
|
||||||
OdinDocEntityFlag_Param_AnyInt = 1ull<<8,
|
OdinDocEntityFlag_Param_AnyInt = 1ull<<8,
|
||||||
|
|
||||||
|
OdinDocEntityFlag_BitField_Field = 1ull<<19,
|
||||||
|
|
||||||
OdinDocEntityFlag_Type_Alias = 1ull<<20,
|
OdinDocEntityFlag_Type_Alias = 1ull<<20,
|
||||||
|
|
||||||
OdinDocEntityFlag_Builtin_Pkg_Builtin = 1ull<<30,
|
OdinDocEntityFlag_Builtin_Pkg_Builtin = 1ull<<30,
|
||||||
@@ -192,7 +195,7 @@ struct OdinDocEntity {
|
|||||||
u32 reserved_for_init;
|
u32 reserved_for_init;
|
||||||
OdinDocString comment; // line comment
|
OdinDocString comment; // line comment
|
||||||
OdinDocString docs; // preceding 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;
|
OdinDocEntityIndex foreign_library;
|
||||||
OdinDocString link_name;
|
OdinDocString link_name;
|
||||||
OdinDocArray<OdinDocAttribute> attributes;
|
OdinDocArray<OdinDocAttribute> attributes;
|
||||||
|
|||||||
+23
-1
@@ -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));
|
doc_type.types = odin_write_slice(w, types, gb_count_of(types));
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case Type_Struct:
|
||||||
doc_type.kind = OdinDocType_Struct;
|
doc_type.kind = OdinDocType_Struct;
|
||||||
if (type->Struct.soa_kind != StructSoa_None) {
|
if (type->Struct.soa_kind != StructSoa_None) {
|
||||||
@@ -863,6 +876,10 @@ gb_internal OdinDocEntityIndex odin_doc_add_entity(OdinDocWriter *w, Entity *e)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Entity_Variable:
|
case Entity_Variable:
|
||||||
|
if (e->flags & EntityFlag_BitFieldField) {
|
||||||
|
flags |= OdinDocEntityFlag_BitField_Field;
|
||||||
|
}
|
||||||
|
|
||||||
if (e->Variable.is_foreign) { flags |= OdinDocEntityFlag_Foreign; }
|
if (e->Variable.is_foreign) { flags |= OdinDocEntityFlag_Foreign; }
|
||||||
if (e->Variable.is_export) { flags |= OdinDocEntityFlag_Export; }
|
if (e->Variable.is_export) { flags |= OdinDocEntityFlag_Export; }
|
||||||
if (e->Variable.thread_local_model != "") {
|
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) {
|
if (init_expr == nullptr) {
|
||||||
init_expr = e->Variable.init_expr;
|
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;
|
break;
|
||||||
case Entity_Constant:
|
case Entity_Constant:
|
||||||
field_group_index = e->Constant.field_group_index;
|
field_group_index = e->Constant.field_group_index;
|
||||||
|
|||||||
Reference in New Issue
Block a user