1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +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; parentType->mTypeCode = DbgType_Enum;
break; break;
} }
if (strncmp(fieldName, "$using$", 7) == 0)
{
fieldName = NULL;
}
} }
int64 constVal = 0; int64 constVal = 0;
if ((parentType->mLanguage == DbgLanguage_Beef) && (isStatic)) if ((fieldName != NULL) && (parentType->mLanguage == DbgLanguage_Beef) && (isStatic))
{ {
for (char* cPtr = fieldName; true; cPtr++) for (char* cPtr = fieldName; true; cPtr++)
{ {

View file

@ -3334,6 +3334,13 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
constDIType, flags, useIntConstant ? intConstant : BfIRValue()); constDIType, flags, useIntConstant ? intConstant : BfIRValue());
diFieldTypes.push_back(memberType); 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) if (staticValue)
{ {
String qualifiedName = DbgGetStaticFieldName(fieldInstance); String qualifiedName = DbgGetStaticFieldName(fieldInstance);
@ -3384,6 +3391,13 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
resolvedFieldDIType, flags, BfIRValue()); resolvedFieldDIType, flags, BfIRValue());
diFieldTypes.push_back(memberType); 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; StringT<128> staticVarName;
BfMangler::Mangle(staticVarName, mModule->mCompiler->GetMangleKind(), fieldInstance); BfMangler::Mangle(staticVarName, mModule->mCompiler->GetMangleKind(), fieldInstance);
if (!staticVarName.StartsWith('#')) if (!staticVarName.StartsWith('#'))
@ -3416,6 +3430,14 @@ void BfIRBuilder::CreateDbgTypeDefinition(BfType* type)
fieldInstance->mDataSize * 8, resolvedFieldType->mAlign * 8, fieldInstance->mDataOffset * 8, fieldInstance->mDataSize * 8, resolvedFieldType->mAlign * 8, fieldInstance->mDataOffset * 8,
flags, resolvedFieldDIType); flags, resolvedFieldDIType);
diFieldTypes.push_back(memberType); 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 << "\n";
os.flush();*/ 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); SetResult(curId, member);
//OutputDebugStrF("BfIRCmd_DbgCreateMemberType = %p\n", member); //OutputDebugStrF("BfIRCmd_DbgCreateMemberType = %p\n", member);
} }

View file

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