mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 19:48:20 +02:00
Splat fixes, added debugging info for 'using' fields
This commit is contained in:
parent
ab4719422a
commit
8eda627e2f
5 changed files with 1687 additions and 1656 deletions
|
@ -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++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue