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 }