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

Method CvParseType

IDEHelper/COFF.cpp:1419–1861  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1417}
1418
1419DbgType* COFF::CvParseType(int tagIdx, bool ipi)
1420{
1421 auto& reader = ipi ? mCvIPIReader : mCvTypeSectionReader;
1422 int offset = ipi ? mCvIPITagStartMap[tagIdx - mCvIPIMinTag] : mCvTagStartMap[tagIdx - mCvMinTag];
1423
1424 uint8* data = reader.GetTempPtr(offset, 4);
1425 uint16 trLength = *(uint16*)data;
1426 offset += 2;
1427 data = reader.GetTempPtr(offset, trLength, true);
1428 CvAutoReleaseTempData releaseTempData(this, data);
1429
1430 uint8* dataStart = data;
1431 uint8* dataEnd = data + trLength;
1432 int16 trLeafType = GET(int16);
1433 bool strMadeCopy;
1434
1435 auto _ParseString = [&]()
1436 {
1437 strMadeCopy = false;
1438 int nameLen = strlen((const char*)data);
1439 int nameOfs = data - dataStart;
1440 const char* name = (const char*)reader.GetPermanentPtr(offset + nameOfs, nameLen + 1, &strMadeCopy);
1441 data += nameLen + 1;
1442 return name;
1443 };
1444
1445 DbgType* dbgType = NULL;
1446
1447 switch (trLeafType)
1448 {
1449 case LF_ENUM:
1450 {
1451 int elemCount = (int)GET(uint16);
1452 int prop = (int)GET(uint16);
1453 int underlyingType = GET(int32);
1454 int typeIndex = GET(int32);
1455 const char* name = _ParseString();
1456
1457 dbgType = CvCreateType();
1458 dbgType->mCompileUnit = mMasterCompileUnit;
1459 dbgType->mName = name;
1460 dbgType->mTypeName = name;
1461 //SplitName(dbgType->mName, dbgType->mTypeName, dbgType->mTemplateParams);
1462 dbgType->mTypeCode = DbgType_Enum;
1463 dbgType->mTypeParam = CvGetTypeSafe(underlyingType);
1464 dbgType->mIsIncomplete = true;
1465
1466 if (dbgType->mTypeParam->GetByteCount() == 0)
1467 dbgType->mIsDeclaration = true;
1468
1469 dbgType->mSize = dbgType->mTypeParam->mSize;
1470 dbgType->mAlign = dbgType->mTypeParam->mAlign;
1471
1472 /*if (dbgType->mTypeParam->GetByteCount() == 0)
1473 {
1474 // Appears to be a bug where byte-sized enums come out as void (sometimes?)
1475 dbgType->mTypeParam = mBfPrimitiveTypes[DbgType_u8];
1476 }*/

Callers

nothing calls this directly

Calls 5

GetTempPtrMethod · 0.80
GetPermanentPtrMethod · 0.80
GetByteCountMethod · 0.80
PushBackMethod · 0.45
GetAlignMethod · 0.45

Tested by

no test coverage detected