1 module dsymbol.builtin.names;
2 
3 import dparse.lexer;
4 import dsymbol.string_interning;
5 
6 package istring[24] builtinTypeNames;
7 
8 /// Constants for buit-in or dummy symbol names
9 istring FUNCTION_SYMBOL_NAME;
10 /// ditto
11 istring FUNCTION_LITERAL_SYMBOL_NAME;
12 /// ditto
13 istring IMPORT_SYMBOL_NAME;
14 /// ditto
15 istring ARRAY_SYMBOL_NAME;
16 /// ditto
17 istring ARRAY_LITERAL_SYMBOL_NAME;
18 /// ditto
19 istring ASSOC_ARRAY_SYMBOL_NAME;
20 /// ditto
21 istring POINTER_SYMBOL_NAME;
22 /// ditto
23 istring PARAMETERS_SYMBOL_NAME;
24 /// ditto
25 istring WITH_SYMBOL_NAME;
26 /// ditto
27 istring CONSTRUCTOR_SYMBOL_NAME;
28 /// ditto
29 istring DESTRUCTOR_SYMBOL_NAME;
30 /// ditto
31 istring ARGPTR_SYMBOL_NAME;
32 /// ditto
33 istring ARGUMENTS_SYMBOL_NAME;
34 /// ditto
35 istring THIS_SYMBOL_NAME;
36 /// ditto
37 istring SUPER_SYMBOL_NAME;
38 /// ditto
39 istring UNITTEST_SYMBOL_NAME;
40 /// ditto
41 istring DOUBLE_LITERAL_SYMBOL_NAME;
42 /// ditto
43 istring FLOAT_LITERAL_SYMBOL_NAME;
44 /// ditto
45 istring IDOUBLE_LITERAL_SYMBOL_NAME;
46 /// ditto
47 istring IFLOAT_LITERAL_SYMBOL_NAME;
48 /// ditto
49 istring INT_LITERAL_SYMBOL_NAME;
50 /// ditto
51 istring LONG_LITERAL_SYMBOL_NAME;
52 /// ditto
53 istring REAL_LITERAL_SYMBOL_NAME;
54 /// ditto
55 istring IREAL_LITERAL_SYMBOL_NAME;
56 /// ditto
57 istring UINT_LITERAL_SYMBOL_NAME;
58 /// ditto
59 istring ULONG_LITERAL_SYMBOL_NAME;
60 /// ditto
61 istring CHAR_LITERAL_SYMBOL_NAME;
62 /// ditto
63 istring DSTRING_LITERAL_SYMBOL_NAME;
64 /// ditto
65 istring STRING_LITERAL_SYMBOL_NAME;
66 /// ditto
67 istring WSTRING_LITERAL_SYMBOL_NAME;
68 /// ditto
69 istring BOOL_VALUE_SYMBOL_NAME;
70 /// ditto
71 istring VOID_SYMBOL_NAME;
72 
73 /**
74  * Translates the IDs for built-in types into an interned string.
75  */
76 istring getBuiltinTypeName(IdType id) nothrow @nogc @safe
77 {
78 	switch (id)
79 	{
80 	case tok!"int": return builtinTypeNames[0];
81 	case tok!"uint": return builtinTypeNames[1];
82 	case tok!"double": return builtinTypeNames[2];
83 	case tok!"idouble": return builtinTypeNames[3];
84 	case tok!"float": return builtinTypeNames[4];
85 	case tok!"ifloat": return builtinTypeNames[5];
86 	case tok!"short": return builtinTypeNames[6];
87 	case tok!"ushort": return builtinTypeNames[7];
88 	case tok!"long": return builtinTypeNames[8];
89 	case tok!"ulong": return builtinTypeNames[9];
90 	case tok!"char": return builtinTypeNames[10];
91 	case tok!"wchar": return builtinTypeNames[11];
92 	case tok!"dchar": return builtinTypeNames[12];
93 	case tok!"bool": return builtinTypeNames[13];
94 	case tok!"void": return builtinTypeNames[14];
95 	case tok!"cent": return builtinTypeNames[15];
96 	case tok!"ucent": return builtinTypeNames[16];
97 	case tok!"real": return builtinTypeNames[17];
98 	case tok!"ireal": return builtinTypeNames[18];
99 	case tok!"byte": return builtinTypeNames[19];
100 	case tok!"ubyte": return builtinTypeNames[20];
101 	case tok!"cdouble": return builtinTypeNames[21];
102 	case tok!"cfloat": return builtinTypeNames[22];
103 	case tok!"creal": return builtinTypeNames[23];
104 	default: assert (false);
105 	}
106 }
107 
108 
109 /**
110  * Initializes builtin types and the various properties of builtin types
111  */
112 static this()
113 {
114 	builtinTypeNames[0] = internString("int");
115 	builtinTypeNames[1] = internString("uint");
116 	builtinTypeNames[2] = internString("double");
117 	builtinTypeNames[3] = internString("idouble");
118 	builtinTypeNames[4] = internString("float");
119 	builtinTypeNames[5] = internString("ifloat");
120 	builtinTypeNames[6] = internString("short");
121 	builtinTypeNames[7] = internString("ushort");
122 	builtinTypeNames[8] = internString("long");
123 	builtinTypeNames[9] = internString("ulong");
124 	builtinTypeNames[10] = internString("char");
125 	builtinTypeNames[11] = internString("wchar");
126 	builtinTypeNames[12] = internString("dchar");
127 	builtinTypeNames[13] = internString("bool");
128 	builtinTypeNames[14] = internString("void");
129 	builtinTypeNames[15] = internString("cent");
130 	builtinTypeNames[16] = internString("ucent");
131 	builtinTypeNames[17] = internString("real");
132 	builtinTypeNames[18] = internString("ireal");
133 	builtinTypeNames[19] = internString("byte");
134 	builtinTypeNames[20] = internString("ubyte");
135 	builtinTypeNames[21] = internString("cdouble");
136 	builtinTypeNames[22] = internString("cfloat");
137 	builtinTypeNames[23] = internString("creal");
138 
139 	FUNCTION_SYMBOL_NAME = internString("function");
140 	FUNCTION_LITERAL_SYMBOL_NAME = internString("*function-literal*");
141 	IMPORT_SYMBOL_NAME = internString("import");
142 	ARRAY_SYMBOL_NAME = internString("*arr*");
143 	ARRAY_LITERAL_SYMBOL_NAME = internString("*arr-literal*");
144 	ASSOC_ARRAY_SYMBOL_NAME = internString("*aa*");
145 	POINTER_SYMBOL_NAME = internString("*");
146 	PARAMETERS_SYMBOL_NAME = internString("*parameters*");
147 	WITH_SYMBOL_NAME = internString("with");
148 	CONSTRUCTOR_SYMBOL_NAME = internString("*constructor*");
149 	DESTRUCTOR_SYMBOL_NAME = internString("~this");
150 	ARGPTR_SYMBOL_NAME = internString("_argptr");
151 	ARGUMENTS_SYMBOL_NAME = internString("_arguments");
152 	THIS_SYMBOL_NAME = internString("this");
153 	SUPER_SYMBOL_NAME = internString("super");
154 	UNITTEST_SYMBOL_NAME = internString("*unittest*");
155 	DOUBLE_LITERAL_SYMBOL_NAME = internString("*double");
156 	FLOAT_LITERAL_SYMBOL_NAME = internString("*float");
157 	IDOUBLE_LITERAL_SYMBOL_NAME = internString("*idouble");
158 	IFLOAT_LITERAL_SYMBOL_NAME = internString("*ifloat");
159 	INT_LITERAL_SYMBOL_NAME = internString("*int");
160 	LONG_LITERAL_SYMBOL_NAME = internString("*long");
161 	REAL_LITERAL_SYMBOL_NAME = internString("*real");
162 	IREAL_LITERAL_SYMBOL_NAME = internString("*ireal");
163 	UINT_LITERAL_SYMBOL_NAME = internString("*uint");
164 	ULONG_LITERAL_SYMBOL_NAME = internString("*ulong");
165 	CHAR_LITERAL_SYMBOL_NAME = internString("*char");
166 	DSTRING_LITERAL_SYMBOL_NAME = internString("*dstring");
167 	STRING_LITERAL_SYMBOL_NAME = internString("*string");
168 	WSTRING_LITERAL_SYMBOL_NAME = internString("*wstring");
169 	BOOL_VALUE_SYMBOL_NAME = internString("*bool");
170 	VOID_SYMBOL_NAME = internString("*void");
171 }
172 
173 istring symbolNameToTypeName(istring name)
174 {
175 	if (name == DOUBLE_LITERAL_SYMBOL_NAME)
176 		return builtinTypeNames[2];
177 	if (name == FLOAT_LITERAL_SYMBOL_NAME)
178 		return builtinTypeNames[4];
179 	if (name == IDOUBLE_LITERAL_SYMBOL_NAME)
180 		return builtinTypeNames[3];
181 	if (name == IFLOAT_LITERAL_SYMBOL_NAME)
182 		return builtinTypeNames[5];
183 	if (name == INT_LITERAL_SYMBOL_NAME)
184 		return builtinTypeNames[0];
185 	if (name == LONG_LITERAL_SYMBOL_NAME)
186 		return builtinTypeNames[8];
187 	if (name == REAL_LITERAL_SYMBOL_NAME)
188 		return builtinTypeNames[17];
189 	if (name == IREAL_LITERAL_SYMBOL_NAME)
190 		return builtinTypeNames[18];
191 	if (name == UINT_LITERAL_SYMBOL_NAME)
192 		return builtinTypeNames[1];
193 	if (name == ULONG_LITERAL_SYMBOL_NAME)
194 		return builtinTypeNames[9];
195 	if (name == CHAR_LITERAL_SYMBOL_NAME)
196 		return builtinTypeNames[10];
197 	if (name == DSTRING_LITERAL_SYMBOL_NAME)
198 		return istring("dstring");
199 	if (name == STRING_LITERAL_SYMBOL_NAME)
200 		return istring("string");
201 	if (name == WSTRING_LITERAL_SYMBOL_NAME)
202 		return istring("wstring");
203 	if (name == BOOL_VALUE_SYMBOL_NAME)
204 		return istring("bool");
205 	if (name == VOID_SYMBOL_NAME)
206 		return istring("void");
207 	return name;
208 }