Mercurial > projects > dil
view trunk/src/dil/IdentsGenerator.d @ 523:d22a33cab0b5
Added some more predefined identifiers.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sun, 16 Dec 2007 19:31:36 +0100 |
parents | 4e14cd1b24da |
children | 32f55cac5c46 |
line wrap: on
line source
/++ Author: Aziz Köksal License: GPL3 +/ module dil.IdentsGenerator; struct StrPair { const: char[] str; /// Identifier string in code. char[] idStr; /// In table. } static const StrPair[] identPairs = [ // Predefined version identifiers: {"DigitalMars"}, {"X86"}, {"X86_64"}, /*{"Windows"}, */{"Win32"}, {"Win64"}, {"linux"}, {"LittleEndian"}, {"BigEndian"}, {"D_Coverage"}, {"D_InlineAsm_X86"}, {"D_Version2"}, {"none"}, {"all"}, // Variadic parameters: {"_arguments"}, {"_argptr"}, // scope: {"exit"}, {"success"}, {"failure"}, // pragma: {"msg"}, {"lib"}, // Linkage: {"C"}, {"D"}, {"Windows"}, {"Pascal"}, {"System"}, // Operator methods: {"opCall"}, // ASM identifiers: {"near"}, {"far"}, {"word"}, {"dword"}, {"qword"}, {"ptr"}, {"offset"}, {"seg"}, {"__LOCAL_SIZE"}, {"FS"}, {"ST"}, {"AL"}, {"AH"}, {"AX"}, {"EAX"}, {"BL"}, {"BH"}, {"BX"}, {"EBX"}, {"CL"}, {"CH"}, {"CX"}, {"ECX"}, {"DL"}, {"DH"}, {"DX"}, {"EDX"}, {"BP"}, {"EBP"}, {"SP"}, {"ESP"}, {"DI"}, {"EDI"}, {"SI"}, {"ESI"}, {"ES"}, {"CS"}, {"SS"}, {"DS"}, {"GS"}, {"CR0"}, {"CR2"}, {"CR3"}, {"CR4"}, {"DR0"}, {"DR1"}, {"DR2"}, {"DR3"}, {"DR6"}, {"DR7"}, {"TR3"}, {"TR4"}, {"TR5"}, {"TR6"}, {"TR7"}, {"MM0"}, {"MM1"}, {"MM2"}, {"MM3"}, {"MM4"}, {"MM5"}, {"MM6"}, {"MM7"}, {"XMM0"}, {"XMM1"}, {"XMM2"}, {"XMM3"}, {"XMM4"}, {"XMM5"}, {"XMM6"}, {"XMM7"}, ]; /++ CTF for generating the members of the struct Ident. The resulting string could look like this: --- private struct Ids {static const: Identifier _str = {"str", TOK.Identifier, ID.str}; // more ... } Identifier* str = &Ids._str; // more ... private Identifier*[] __allIds = [ str, // more ... ] --- +/ char[] generateIdentMembers(char[] private_members = "") { private_members = "private struct Ids {static const:"; char[] public_members = ""; char[] array = "private Identifier*[] __allIds = ["; foreach (pair; identPairs) { // NB: conditional makes function uneligible for CTE. // char[] idString = pair.idStr ? pair.idStr : pair.str; // Identifier _str = {"str", TOK.Identifier, ID.str}; private_members ~= "Identifier _"~pair.str~` = {"`~pair.str~`", TOK.Identifier, ID.`~pair.str~"};\n"; // Identifier* str = &_str; public_members ~= "Identifier* "~pair.str~" = &Ids._"~pair.str~";\n"; array ~= pair.str~","; } private_members ~= "}"; // Close private { array ~= "];"; return private_members ~ public_members ~ array; } /// CTF for generating the members of the enum ID. char[] generateIDMembers(char[] members = "") { foreach (pair; identPairs) members ~= pair.str ~ ",\n"; return members; } // pragma(msg, generateIdentMembers()); // pragma(msg, generateIDMembers());