further progress on metacode-driven generation of rdi headers; metaprogram xlist generation; getting rdi_dump up-to-speed

This commit is contained in:
Ryan Fleury
2024-06-01 10:16:38 -07:00
parent de56231f4a
commit d66bbdc6a7
8 changed files with 428 additions and 92 deletions
+72 -62
View File
@@ -5,77 +5,87 @@
//~ rjf: RDI Enum -> String Functions
internal String8
rdi_string_from_data_section_tag(RDI_DataSectionTag tag){
String8 result = {0};
switch (tag){
#define X(N,C) case C: result = str8_lit(#N); break;
#define Y(N)
RDI_DataSectionTagXList(X,Y)
#undef X
#undef Y
}
return(result);
}
internal String8
rdi_string_from_arch(RDI_Arch arch){
String8 result = {0};
switch (arch){
default: result = str8_lit("<invalid-arch>"); break;
case RDI_Arch_X86: result = str8_lit("x86"); break;
case RDI_Arch_X64: result = str8_lit("x64"); break;
}
return(result);
}
internal String8
rdi_string_from_language(RDI_Language language){
String8 result = {0};
switch (language){
#define X(name,code) case code: result = str8_lit(#name); break;
RDI_LanguageXList(X)
rdi_string_from_data_section_tag(RDI_DataSectionTag v)
{
String8 result = str8_lit("<invalid RDI_DataSectionTag>");
switch(v)
{
default:{}break;
#define X(name) case RDI_DataSectionTag_##name:{result = str8_lit(#name);}break;
RDI_DataSectionTag_XList
#undef X
}
return(result);
return result;
}
internal String8
rdi_string_from_type_kind(RDI_TypeKind type_kind){
String8 result = {0};
switch (type_kind){
default: result = str8_lit("<invalid-type-kind>"); break;
#define X(name,code) case code: result = str8_lit(#name); break;
#define XZ(name,code,size) X(name,code)
#define Y(a,n)
RDI_TypeKindXList(X,XZ,Y)
#undef X
#undef XZ
#undef Y
}
return(result);
}
internal String8
rdi_string_from_member_kind(RDI_MemberKind member_kind){
String8 result = {0};
switch (member_kind){
default: result = str8_lit("<invalid-member-kind>"); break;
#define X(N,C) case C: result = str8_lit(#N); break;
RDI_MemberKindXList(X)
rdi_string_from_arch(RDI_Arch v)
{
String8 result = str8_lit("<invalid RDI_Arch>");
switch(v)
{
default:{}break;
#define X(name) case RDI_Arch_##name:{result = str8_lit(#name);}break;
RDI_Arch_XList
#undef X
}
return(result);
return result;
}
internal String8
rdi_string_from_local_kind(RDI_LocalKind local_kind){
String8 result = {0};
switch (local_kind){
default: result = str8_lit("<invalid-local-kind>"); break;
case RDI_LocalKind_Parameter: result = str8_lit("Parameter"); break;
case RDI_LocalKind_Variable: result = str8_lit("Variable"); break;
rdi_string_from_language(RDI_Language v)
{
String8 result = str8_lit("<invalid RDI_Language>");
switch(v)
{
default:{}break;
#define X(name) case RDI_Language_##name:{result = str8_lit(#name);}break;
RDI_Language_XList
#undef X
}
return(result);
return result;
}
internal String8
rdi_string_from_type_kind(RDI_TypeKind v)
{
String8 result = str8_lit("<invalid RDI_TypeKind>");
switch(v)
{
default:{}break;
#define X(name) case RDI_TypeKind_##name:{result = str8_lit(#name);}break;
RDI_TypeKind_XList
#undef X
}
return result;
}
internal String8
rdi_string_from_member_kind(RDI_MemberKind v)
{
String8 result = str8_lit("<invalid RDI_MemberKind>");
switch(v)
{
default:{}break;
#define X(name) case RDI_MemberKind_##name:{result = str8_lit(#name);}break;
RDI_MemberKind_XList
#undef X
}
return result;
}
internal String8
rdi_string_from_local_kind(RDI_LocalKind v)
{
String8 result = str8_lit("<invalid RDI_LocalKind>");
switch(v)
{
default:{}break;
#define X(name) case RDI_LocalKind_##name:{result = str8_lit(#name);}break;
RDI_LocalKind_XList
#undef X
}
return result;
}
////////////////////////////////
@@ -160,11 +170,11 @@ rdi_stringize_data_sections(Arena *arena, String8List *out, RDI_Parsed *parsed,
internal void
rdi_stringize_top_level_info(Arena *arena, String8List *out, RDI_Parsed *parsed,
RDI_TopLevelInfo *tli, U32 indent_level){
String8 arch_str = rdi_string_from_arch(tli->architecture);
String8 arch_str = rdi_string_from_arch(tli->arch);
String8 exe_name = {0};
exe_name.str = rdi_string_from_idx(parsed, tli->exe_name_string_idx, &exe_name.size);
str8_list_pushf(arena, out, "%.*sarchitecture=%.*s\n",
str8_list_pushf(arena, out, "%.*sarch=%.*s\n",
indent_level, rdi_stringize_spaces, str8_varg(arch_str));
str8_list_pushf(arena, out, "%.*sexe_name='%.*s'\n",
indent_level, rdi_stringize_spaces, str8_varg(exe_name));
+6 -6
View File
@@ -41,12 +41,12 @@ struct RDI_ScopeBundle
////////////////////////////////
//~ rjf: RDI Enum -> String Functions
internal String8 rdi_string_from_data_section_tag(RDI_DataSectionTag tag);
internal String8 rdi_string_from_arch(RDI_Arch arch);
internal String8 rdi_string_from_language(RDI_Language language);
internal String8 rdi_string_from_type_kind(RDI_TypeKind type_kind);
internal String8 rdi_string_from_member_kind(RDI_MemberKind member_kind);
internal String8 rdi_string_from_local_kind(RDI_LocalKind local_kind);
internal String8 rdi_string_from_data_section_tag(RDI_DataSectionTag v);
internal String8 rdi_string_from_arch(RDI_Arch v);
internal String8 rdi_string_from_language(RDI_Language v);
internal String8 rdi_string_from_type_kind(RDI_TypeKind v);
internal String8 rdi_string_from_member_kind(RDI_MemberKind v);
internal String8 rdi_string_from_local_kind(RDI_LocalKind v);
////////////////////////////////
//~ rjf: RDI Flags -> String Functions