diff options
Diffstat (limited to 'src/sim86')
| -rw-r--r-- | src/sim86/generated/generated.cpp | 3 | ||||
| -rw-r--r-- | src/sim86/sim86.cpp | 2 | ||||
| -rw-r--r-- | src/sim86/sim86.mdesk | 2 | ||||
| -rw-r--r-- | src/sim86/sim86_meta.c | 44 |
4 files changed, 40 insertions, 11 deletions
diff --git a/src/sim86/generated/generated.cpp b/src/sim86/generated/generated.cpp index 0f457a1..77a657f 100644 --- a/src/sim86/generated/generated.cpp +++ b/src/sim86/generated/generated.cpp @@ -11,7 +11,7 @@ enum flags_8086 Flag_Trap = (1 << 8), }; -int flags_8086_strings_count = 9; +int flags_8086_stringsCount = 9; char *flags_8086_strings[] = { "C", @@ -27,5 +27,4 @@ char *flags_8086_strings[] = enum sim86_enum { -Sim86_Count }; diff --git a/src/sim86/sim86.cpp b/src/sim86/sim86.cpp index 7c444bd..6eee81d 100644 --- a/src/sim86/sim86.cpp +++ b/src/sim86/sim86.cpp @@ -28,7 +28,7 @@ FlagsToString(char *Buffer, u32 Flags) u32 Length = 0; for(s32 MappingIndex = 0; - MappingIndex < flags_8086_strings_count; + MappingIndex < flags_8086_stringsCount; MappingIndex++) { u8 Char = flags_8086_strings[MappingIndex][0]; diff --git a/src/sim86/sim86.mdesk b/src/sim86/sim86.mdesk index 0635110..6370221 100644 --- a/src/sim86/sim86.mdesk +++ b/src/sim86/sim86.mdesk @@ -11,7 +11,7 @@ { Trap, "T", } } -@table_gen_enum_flags(sim86_flags_mapping, name) flags_8086 +@table_gen_flags(sim86_flags_mapping, name) flags_8086 @table_gen_data(sim86_flags_mapping, `char *`, str) flags_8086_strings // TODO: diff --git a/src/sim86/sim86_meta.c b/src/sim86/sim86_meta.c index 37fe0c3..1201afc 100644 --- a/src/sim86/sim86_meta.c +++ b/src/sim86/sim86_meta.c @@ -59,8 +59,8 @@ int main(int ArgsCount, char *Args[]) for(MD_EachNode(Node, Root)) { - // 1. If we find a table_gen_enum_flags tag - if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_enum_flags"), 0)) + // 1. If we find a table_gen_flags tag + if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_flags"), 0)) { MD_String8 TableName = MD_NodeAtIndex(Node->first_tag->first_child, 0)->string; MD_String8 MemberName = MD_NodeAtIndex(Node->first_tag->first_child, 1)->string; @@ -111,7 +111,7 @@ int main(int ArgsCount, char *Args[]) int MemberCount = MD_ChildCountFromNode(Table); - MD_S8ListPushFmt(Arena, &Stream, "int %S_count = %d;\n", Node->string, MemberCount); + MD_S8ListPushFmt(Arena, &Stream, "int %SCount = %d;\n", Node->string, MemberCount); // Header MD_S8ListPushFmt(Arena, &Stream, "%S%S[] =\n{\n", Type, Node->string); @@ -124,13 +124,41 @@ int main(int ArgsCount, char *Args[]) MD_S8ListPush(Arena, &Stream, MD_S8Lit("};\n\n")); } -#if 0 - if(MD_NodeHasTag(Node, MD_S8Lit("table"), 0)) + if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_enum"), 0)) { - Assert(0); + MD_String8 TableName = MD_NodeAtIndex(Node->first_tag->first_child, 0)->string; + MD_String8 Prefix = MD_NodeAtIndex(Node->first_tag->first_child, 1)->string; + MD_String8 MemberName = MD_NodeAtIndex(Node->first_tag->first_child, 2)->string; + + MD_Node *Table = MD_FirstNodeWithString(Root, TableName, 0); + + MD_Node *TableTag = MD_TagFromString(Table, MD_S8Lit("table"), 0); + MD_Node *MemberNode = MD_FirstNodeWithString(TableTag->first_child, MemberName, 0); + int MemberIndex = MD_IndexFromNode(MemberNode); + + + MD_S8ListPushFmt(Arena, &Stream, "enum %S\n{\n", Node->raw_string); + + for(MD_EachNode(Member, Table->first_child)) + { + MD_Node *ValueNode = MD_NodeAtIndex(Member->first_child, MemberIndex); + if(Member != Table->first_child) + { + MD_S8ListPushFmt(Arena, &Stream, " %S%S,\n", Prefix, ValueNode->raw_string); + } + else + { + MD_S8ListPushFmt(Arena, &Stream, " %S%S = 0,\n", Prefix, ValueNode->raw_string); + } + + } + MD_S8ListPushFmt(Arena, &Stream, "};\n"); + + } -#endif + +#if 0 if(MD_NodeHasTag(Node, MD_S8Lit("table_gen_enum"), 0)) { // Header @@ -168,6 +196,8 @@ int main(int ArgsCount, char *Args[]) MD_S8ListPush(Arena, &Stream, MD_S8Lit("};\n")); } +#endif + // MD_PrintDebugDumpFromNode(stderr, Node, MD_GenerateFlags_All); } |
