MCPcopy Create free account
hub / github.com/beefytech/Beef / CvGetTypeOrNamespace

Method CvGetTypeOrNamespace

IDEHelper/COFF.cpp:4174–4250  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4172}
4173
4174DbgType* COFF::CvGetTypeOrNamespace(char* name, DbgLanguage language)
4175{
4176 if (language == DbgLanguage_Unknown)
4177 {
4178 if (strncmp(name, "_bf::", 5) == 0)
4179 {
4180 language = DbgLanguage_Beef;
4181 name += 5;
4182 }
4183 else if ((name[0] == 'G') && (name[1] == '$'))
4184 {
4185 language = DbgLanguage_Beef;
4186 }
4187 else
4188 {
4189 language = DbgLanguage_C;
4190
4191 // Check for a primitive array type like 'double[]'
4192 for (int i = 0; i < 10; i++)
4193 {
4194 char c = name[i];
4195 if (c == 0)
4196 break;
4197 if (c == '[')
4198 language = DbgLanguage_Beef;
4199 }
4200 }
4201 }
4202
4203 auto linkedModule = GetLinkedModule();
4204
4205 auto dbgTypeEntry = linkedModule->mTypeMap.Find(name, language);
4206 if (dbgTypeEntry != NULL)
4207 {
4208 auto dbgType = dbgTypeEntry->mValue;
4209 if (dbgType->mHotNewType != NULL)
4210 return dbgType->mHotNewType;
4211 return dbgType;
4212 }
4213
4214 // It's possible that we get a reference to a template name that isn't actually in our type database
4215 // These may indicate VS compiler bugs or anonymous namespaces
4216 bool isValidName = true;
4217 for (const char* cPtr = name; *cPtr != '\0'; cPtr++)
4218 if ((*cPtr == '<') || (*cPtr == '`') || (*cPtr == '$'))
4219 isValidName = false;
4220 if (!isValidName)
4221 return NULL;
4222
4223 //OutputDebugStrF("CvGetTypeOrNamespace Creating: %s\n", name);
4224
4225 char* lastDblColon = (char*)GetLastDoubleColon(name);
4226
4227 DbgType* dbgType = CvCreateType();
4228
4229 DbgType* parentType = mMasterCompileUnit->mGlobalType;
4230 if (lastDblColon != NULL)
4231 {

Callers

nothing calls this directly

Calls 4

GetLastDoubleColonFunction · 0.85
FindMethod · 0.45
PushBackMethod · 0.45
InsertMethod · 0.45

Tested by

no test coverage detected