annotate trunk/src/dil/IdentsGenerator.d @ 558:32f55cac5c46

Added more pre-defined identifiers.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Mon, 24 Dec 2007 20:23:45 +0100
parents d22a33cab0b5
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
502
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
1 /++
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
2 Author: Aziz Köksal
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
3 License: GPL3
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
4 +/
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
5 module dil.IdentsGenerator;
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
6
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
7 struct StrPair
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
8 {
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
9 const:
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
10 char[] str; /// Identifier string in code.
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
11 char[] idStr; /// In table.
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
12 }
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
13
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
14 static const StrPair[] identPairs = [
523
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
15 // Predefined version identifiers:
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
16 {"DigitalMars"}, {"X86"}, {"X86_64"},
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
17 /*{"Windows"}, */{"Win32"}, {"Win64"},
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
18 {"linux"}, {"LittleEndian"}, {"BigEndian"},
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
19 {"D_Coverage"}, {"D_InlineAsm_X86"}, {"D_Version2"},
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
20 {"none"}, {"all"},
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
21 // Variadic parameters:
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
22 {"_arguments"}, {"_argptr"},
502
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
23 // scope:
523
d22a33cab0b5 Added some more predefined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 502
diff changeset
24 {"exit"}, {"success"}, {"failure"},
502
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
25 // pragma:
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
26 {"msg"}, {"lib"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
27 // Linkage:
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
28 {"C"}, {"D"}, {"Windows"}, {"Pascal"}, {"System"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
29 // Operator methods:
558
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
30 {"opNeg"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
31 {"opPos"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
32 {"opComp"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
33 {"opAddAssign"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
34 {"opSubAssign"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
35 {"opPostInc"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
36 {"opPostDec"},
502
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
37 {"opCall"},
558
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
38 {"opCast"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
39 {"opIndex"},
32f55cac5c46 Added more pre-defined identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents: 523
diff changeset
40 {"opSlice"},
502
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
41 // ASM identifiers:
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
42 {"near"}, {"far"}, {"word"}, {"dword"}, {"qword"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
43 {"ptr"}, {"offset"}, {"seg"}, {"__LOCAL_SIZE"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
44 {"FS"}, {"ST"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
45 {"AL"}, {"AH"}, {"AX"}, {"EAX"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
46 {"BL"}, {"BH"}, {"BX"}, {"EBX"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
47 {"CL"}, {"CH"}, {"CX"}, {"ECX"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
48 {"DL"}, {"DH"}, {"DX"}, {"EDX"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
49 {"BP"}, {"EBP"}, {"SP"}, {"ESP"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
50 {"DI"}, {"EDI"}, {"SI"}, {"ESI"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
51 {"ES"}, {"CS"}, {"SS"}, {"DS"}, {"GS"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
52 {"CR0"}, {"CR2"}, {"CR3"}, {"CR4"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
53 {"DR0"}, {"DR1"}, {"DR2"}, {"DR3"}, {"DR6"}, {"DR7"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
54 {"TR3"}, {"TR4"}, {"TR5"}, {"TR6"}, {"TR7"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
55 {"MM0"}, {"MM1"}, {"MM2"}, {"MM3"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
56 {"MM4"}, {"MM5"}, {"MM6"}, {"MM7"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
57 {"XMM0"}, {"XMM1"}, {"XMM2"}, {"XMM3"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
58 {"XMM4"}, {"XMM5"}, {"XMM6"}, {"XMM7"},
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
59 ];
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
60
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
61 /++
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
62 CTF for generating the members of the struct Ident.
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
63 The resulting string could look like this:
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
64 ---
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
65 private struct Ids {static const:
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
66 Identifier _str = {"str", TOK.Identifier, ID.str};
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
67 // more ...
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
68 }
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
69 Identifier* str = &Ids._str;
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
70 // more ...
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
71 private Identifier*[] __allIds = [
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
72 str,
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
73 // more ...
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
74 ]
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
75 ---
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
76 +/
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
77 char[] generateIdentMembers(char[] private_members = "")
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
78 {
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
79 private_members = "private struct Ids {static const:";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
80
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
81 char[] public_members = "";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
82 char[] array = "private Identifier*[] __allIds = [";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
83 foreach (pair; identPairs)
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
84 {
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
85 // NB: conditional makes function uneligible for CTE.
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
86 // char[] idString = pair.idStr ? pair.idStr : pair.str;
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
87 // Identifier _str = {"str", TOK.Identifier, ID.str};
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
88 private_members ~= "Identifier _"~pair.str~` = {"`~pair.str~`", TOK.Identifier, ID.`~pair.str~"};\n";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
89 // Identifier* str = &_str;
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
90 public_members ~= "Identifier* "~pair.str~" = &Ids._"~pair.str~";\n";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
91 array ~= pair.str~",";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
92 }
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
93
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
94 private_members ~= "}"; // Close private {
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
95 array ~= "];";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
96
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
97 return private_members ~ public_members ~ array;
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
98 }
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
99
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
100 /// CTF for generating the members of the enum ID.
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
101 char[] generateIDMembers(char[] members = "")
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
102 {
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
103 foreach (pair; identPairs)
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
104 members ~= pair.str ~ ",\n";
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
105 return members;
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
106 }
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
107
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
108 // pragma(msg, generateIdentMembers());
4e14cd1b24da Refactored code and added modules related to tabulated Identifiers.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff changeset
109 // pragma(msg, generateIDMembers());