1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Splat fixes, added debugging info for 'using' fields

This commit is contained in:
Brian Fiete 2022-07-30 09:08:49 -04:00
parent ab4719422a
commit 8eda627e2f
5 changed files with 1687 additions and 1656 deletions

View file

@ -1056,10 +1056,15 @@ void COFF::CvParseMembers(DbgType* parentType, int tagIdx, bool ipi)
parentType->mTypeCode = DbgType_Enum;
break;
}
if (strncmp(fieldName, "$using$", 7) == 0)
{
fieldName = NULL;
}
}
int64 constVal = 0;
if ((parentType->mLanguage == DbgLanguage_Beef) && (isStatic))
if ((fieldName != NULL) && (parentType->mLanguage == DbgLanguage_Beef) && (isStatic))
{
for (char* cPtr = fieldName; true; cPtr++)
{

View file

@ -3334,6 +3334,13 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
constDIType, flags, useIntConstant ? intConstant : BfIRValue());
diFieldTypes.push_back(memberType);
if (fieldDef->mUsingProtection != BfProtection_Hidden)
{
auto memberType = DbgCreateStaticMemberType(diForwardDecl, "$using$" + fieldName, fileDIScope, 0,
constDIType, flags, useIntConstant ? intConstant : BfIRValue());
diFieldTypes.push_back(memberType);
}
if (staticValue)
{
String qualifiedName = DbgGetStaticFieldName(fieldInstance);
@ -3384,6 +3391,13 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
resolvedFieldDIType, flags, BfIRValue());
diFieldTypes.push_back(memberType);
if (fieldDef->mUsingProtection != BfProtection_Hidden)
{
auto memberType = DbgCreateStaticMemberType(diForwardDecl, "$using$" + fieldDef->mName, fileDIScope, 0,
resolvedFieldDIType, flags, BfIRValue());
diFieldTypes.push_back(memberType);
}
StringT<128> staticVarName;
BfMangler::Mangle(staticVarName, mModule->mCompiler->GetMangleKind(), fieldInstance);
if (!staticVarName.StartsWith('#'))
@ -3416,6 +3430,14 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
fieldInstance->mDataSize * 8, resolvedFieldType->mAlign * 8, fieldInstance->mDataOffset * 8,
flags, resolvedFieldDIType);
diFieldTypes.push_back(memberType);
if (fieldDef->mUsingProtection != BfProtection_Hidden)
{
auto memberType = DbgCreateMemberType(diForwardDecl, "$using$" + fieldName, fileDIScope, lineNum,
fieldInstance->mDataSize * 8, resolvedFieldType->mAlign * 8, fieldInstance->mDataOffset * 8,
flags, resolvedFieldDIType);
diFieldTypes.push_back(memberType);
}
}
}
}

View file

@ -4488,7 +4488,11 @@ void BfIRCodeGen::HandleNextCmd()
os << "\n";
os.flush();*/
auto member = mDIBuilder->createMemberType((llvm::DIScope*)scope, name.c_str(), (llvm::DIFile*)file, lineNumber, sizeInBits, (uint32)alignInBits, offsetInBits, diFlags, (llvm::DIType*)type);
const char* namePtr = name.c_str();
if (name.IsEmpty())
namePtr = NULL;
auto member = mDIBuilder->createMemberType((llvm::DIScope*)scope, namePtr, (llvm::DIFile*)file, lineNumber, sizeInBits, (uint32)alignInBits, offsetInBits, diFlags, (llvm::DIType*)type);
SetResult(curId, member);
//OutputDebugStrF("BfIRCmd_DbgCreateMemberType = %p\n", member);
}

View file

@ -1173,7 +1173,7 @@ DbgExtType DbgType::CalcExtType()
{
for (auto member : mMemberList)
{
if (strcmp(member->mName, "__bftag") == 0)
if ((member->mName != NULL) && (strcmp(member->mName, "__bftag") == 0))
return DbgExtType_BfPayloadEnum;
}
return DbgExtType_Normal;
@ -1182,7 +1182,7 @@ DbgExtType DbgType::CalcExtType()
{
for (auto member : mMemberList)
{
if (strcmp(member->mName, "$bfunion") == 0)
if ((member->mName != NULL) && (strcmp(member->mName, "$bfunion") == 0))
return DbgExtType_BfUnion;
}
}