diff --git a/examples/type_metadata/generated/meta_types.c b/examples/type_metadata/generated/meta_types.c index 456c0c5..594cfe5 100644 --- a/examples/type_metadata/generated/meta_types.c +++ b/examples/type_metadata/generated/meta_types.c @@ -1,4 +1,4 @@ -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:493 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:414 TypeInfoMember Circle_members[2] = { {"r", 1, -1, &F32_type_info}, {"pos", 3, -1, &V2F32_type_info}, @@ -14,14 +14,14 @@ TypeInfoMember RoundedPolygon_members[3] = { {"p", 1, 1, &V2F32_type_info}, }; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:532 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:453 TypeInfoEnumerant Shape_members[3] = { {"Circle", 6, 1}, {"Segment", 7, 2}, {"Polygon", 7, 3}, }; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:568 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:489 TypeInfo U32_type_info = {TypeKind_Basic, "U32", 3, 0, 0, 0}; TypeInfo F32_type_info = {TypeKind_Basic, "F32", 3, 0, 0, 0}; TypeInfo V2F32_type_info = {TypeKind_Basic, "V2F32", 5, 0, 0, 0}; diff --git a/examples/type_metadata/generated/meta_types.h b/examples/type_metadata/generated/meta_types.h index f2b5013..b8d0cae 100644 --- a/examples/type_metadata/generated/meta_types.h +++ b/examples/type_metadata/generated/meta_types.h @@ -1,6 +1,6 @@ #if !defined(META_TYPES_H) #define META_TYPES_H -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:393 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:314 typedef struct Circle Circle; struct Circle { @@ -28,11 +28,11 @@ Shape_Segment = 2, Shape_Polygon = 3, } Shape; -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:452 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:373 TypeInfo* type_info_from_shape(Shape v); U32 max_slot_from_shape(Shape v); -// generated by W:/metadesk/examples/type_metadata/type_metadata.c:477 +// generated by W:/metadesk/examples/type_metadata/type_metadata.c:398 extern TypeInfo U32_type_info; extern TypeInfo F32_type_info; extern TypeInfo V2F32_type_info; diff --git a/examples/type_metadata/type_metadata.c b/examples/type_metadata/type_metadata.c index 25769f7..3b6b6a4 100644 --- a/examples/type_metadata/type_metadata.c +++ b/examples/type_metadata/type_metadata.c @@ -10,94 +10,15 @@ //~ includes and globals ////////////////////////////////////////////////////// #include "md.h" +#include "type_metadata.h" + #include "md.c" static MD_Arena *arena = 0; FILE *error_file = 0; -//~ types ///////////////////////////////////////////////////////////////////// - -typedef enum GEN_TypeKind -{ - GEN_TypeKind_Null, - GEN_TypeKind_Basic, - GEN_TypeKind_Struct, - GEN_TypeKind_Enum, -} GEN_TypeKind; - -typedef struct GEN_TypeInfo GEN_TypeInfo; -struct GEN_TypeInfo -{ - GEN_TypeInfo *next; - GEN_TypeKind kind; - MD_Node *node; - - // basic - int size; - - // structs - struct GEN_TypeMember *first_member; - struct GEN_TypeMember *last_member; - int member_count; - - // enums - struct GEN_TypeEnumerant *first_enumerant; - struct GEN_TypeEnumerant *last_enumerant; - int enumerant_count; - GEN_TypeInfo *underlying_type; -}; - -typedef struct GEN_TypeMember GEN_TypeMember; -struct GEN_TypeMember -{ - GEN_TypeMember *next; - MD_Node *node; - GEN_TypeInfo *type; - MD_Node *array_count; -}; - -typedef struct GEN_TypeEnumerant GEN_TypeEnumerant; -struct GEN_TypeEnumerant -{ - GEN_TypeEnumerant *next; - MD_Node *node; - int value; -}; - -typedef struct GEN_MapInfo GEN_MapInfo; -struct GEN_MapInfo -{ - GEN_MapInfo *next; - MD_Node *node; - - MD_Node *in; - MD_Node *out; - - int is_complete; - MD_Node *default_val; - MD_Node *auto_val; -}; - - -//~ helpers /////////////////////////////////////////////////////////////////// -MD_Node* gen_get_md_child_value(MD_Node *parent, MD_String8 child_name); - -//~ analyzers ///////////////////////////////////////////////////////////////// -void gen_gather_types_and_maps(MD_Node *list); -void gen_gather_struct_members(void); - -//~ generators //////////////////////////////////////////////////////////////// -void gen_type_definitions_from_types(FILE *out, GEN_TypeInfo *first_type); -void gen_function_declarations_from_maps(FILE *out, GEN_MapInfo *first_map); -void gen_type_info_declarations_from_types(FILE *out, GEN_TypeInfo *first_type); -void gen_struct_member_tables_from_types(FILE *out, GEN_TypeInfo *first_type); -void gen_enum_member_tables_from_types(FILE *out, GEN_TypeInfo *first_type); -void gen_type_info_definitions_from_types(FILE *out, GEN_TypeInfo *first_type); - - -//~ node maps ///////////////////////////////////////////////////////////////// - +// node maps GEN_TypeInfo *first_type = 0; GEN_TypeInfo *last_type = 0; MD_Map type_map = {0}; diff --git a/examples/type_metadata/type_metadata.h b/examples/type_metadata/type_metadata.h new file mode 100644 index 0000000..3e4456b --- /dev/null +++ b/examples/type_metadata/type_metadata.h @@ -0,0 +1,86 @@ +/* date = September 25th 2021 8:06 pm */ + +#ifndef TYPE_METADATA_H +#define TYPE_METADATA_H + +//~ types ///////////////////////////////////////////////////////////////////// + +typedef enum GEN_TypeKind +{ + GEN_TypeKind_Null, + GEN_TypeKind_Basic, + GEN_TypeKind_Struct, + GEN_TypeKind_Enum, +} GEN_TypeKind; + +typedef struct GEN_TypeInfo GEN_TypeInfo; +struct GEN_TypeInfo +{ + GEN_TypeInfo *next; + GEN_TypeKind kind; + MD_Node *node; + + // basic + int size; + + // structs + struct GEN_TypeMember *first_member; + struct GEN_TypeMember *last_member; + int member_count; + + // enums + struct GEN_TypeEnumerant *first_enumerant; + struct GEN_TypeEnumerant *last_enumerant; + int enumerant_count; + GEN_TypeInfo *underlying_type; +}; + +typedef struct GEN_TypeMember GEN_TypeMember; +struct GEN_TypeMember +{ + GEN_TypeMember *next; + MD_Node *node; + GEN_TypeInfo *type; + MD_Node *array_count; +}; + +typedef struct GEN_TypeEnumerant GEN_TypeEnumerant; +struct GEN_TypeEnumerant +{ + GEN_TypeEnumerant *next; + MD_Node *node; + int value; +}; + +typedef struct GEN_MapInfo GEN_MapInfo; +struct GEN_MapInfo +{ + GEN_MapInfo *next; + MD_Node *node; + + MD_Node *in; + MD_Node *out; + + int is_complete; + MD_Node *default_val; + MD_Node *auto_val; +}; + + +//~ helpers /////////////////////////////////////////////////////////////////// +MD_Node* gen_get_md_child_value(MD_Node *parent, MD_String8 child_name); + +//~ analyzers ///////////////////////////////////////////////////////////////// +void gen_gather_types_and_maps(MD_Node *list); +void gen_gather_struct_members(void); + +//~ generators //////////////////////////////////////////////////////////////// +void gen_type_definitions_from_types(FILE *out, GEN_TypeInfo *first_type); +void gen_function_declarations_from_maps(FILE *out, GEN_MapInfo *first_map); +void gen_type_info_declarations_from_types(FILE *out, GEN_TypeInfo *first_type); +void gen_struct_member_tables_from_types(FILE *out, GEN_TypeInfo *first_type); +void gen_enum_member_tables_from_types(FILE *out, GEN_TypeInfo *first_type); +void gen_type_info_definitions_from_types(FILE *out, GEN_TypeInfo *first_type); + + +#endif //TYPE_METADATA_H