1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-14 14:24:10 +02:00

More robust handling of missing system types

This commit is contained in:
Brian Fiete 2021-02-26 06:27:01 -08:00
parent 75e075b8d9
commit 06a073d0e7
4 changed files with 23 additions and 15 deletions

View file

@ -3001,7 +3001,8 @@ void BfCompiler::UpdateRevisedTypes()
// //
{ {
BfAtomComposite objectName; BfAtomComposite objectName;
mSystem->ParseAtomComposite("System.Object", objectName); if (mSystem->ParseAtomComposite("System.Object", objectName))
{
for (auto itr = mSystem->mTypeDefs.TryGet(objectName); itr != mSystem->mTypeDefs.end(); ++itr) for (auto itr = mSystem->mTypeDefs.TryGet(objectName); itr != mSystem->mTypeDefs.end(); ++itr)
{ {
BfTypeDef* typeDef = *itr; BfTypeDef* typeDef = *itr;
@ -3009,6 +3010,7 @@ void BfCompiler::UpdateRevisedTypes()
corlibProjects.Add(typeDef->mProject); corlibProjects.Add(typeDef->mProject);
} }
} }
}
// Process the typedefs one bucket at a time. When we are combining extensions or partials (globals) into a single definition then // Process the typedefs one bucket at a time. When we are combining extensions or partials (globals) into a single definition then
// we will be making multiple passes over the bucket that contains that name // we will be making multiple passes over the bucket that contains that name
@ -6742,6 +6744,7 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory)
mSystem->CheckLockYield(); mSystem->CheckLockYield();
if (mBfObjectTypeDef != NULL)
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef); mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef);
VisitSourceExteriorNodes(); VisitSourceExteriorNodes();
@ -6827,6 +6830,7 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory)
// //
{ {
if (mBfObjectTypeDef != NULL)
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef, BfPopulateType_Full); mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef, BfPopulateType_Full);
mContext->RemapObject(); mContext->RemapObject();

View file

@ -2724,6 +2724,8 @@ void BfContext::RemoveInvalidWorkItems()
void BfContext::RemapObject() void BfContext::RemapObject()
{ {
if (mCompiler->mBfObjectTypeDef == NULL)
return;
// There are several types that get their LLVM type mapped to Object, so make sure to remap that // There are several types that get their LLVM type mapped to Object, so make sure to remap that
// for when Object itself gets recreated // for when Object itself gets recreated

View file

@ -2567,6 +2567,7 @@ void BfModule::UpdateExprSrcPos(BfAstNode* astNode, BfSrcPosFlags flags)
void BfModule::UseDefaultSrcPos(BfSrcPosFlags flags, int debugLocOffset) void BfModule::UseDefaultSrcPos(BfSrcPosFlags flags, int debugLocOffset)
{ {
if (mCompiler->mBfObjectTypeDef != NULL)
UpdateSrcPos(mCompiler->mBfObjectTypeDef->mTypeDeclaration, flags, debugLocOffset); UpdateSrcPos(mCompiler->mBfObjectTypeDef->mTypeDeclaration, flags, debugLocOffset);
SetIllegalSrcPos(); SetIllegalSrcPos();
} }
@ -19524,7 +19525,9 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup)
mBfIRBuilder->ClearDebugLocation(); mBfIRBuilder->ClearDebugLocation();
PopulateType(mCurTypeInstance, BfPopulateType_Data); PopulateType(mCurTypeInstance, BfPopulateType_Data);
auto thisVal = GetThis(); auto thisVal = GetThis();
int prevSize = mContext->mBfObjectType->mInstSize; int prevSize = 0;
if (mContext->mBfObjectType != NULL)
prevSize = mContext->mBfObjectType->mInstSize;
int curSize = mCurTypeInstance->mInstSize; int curSize = mCurTypeInstance->mInstSize;
if (curSize > prevSize) if (curSize > prevSize)
{ {

View file

@ -1312,9 +1312,8 @@ void BfModule::PopulateType(BfType* resolvedTypeRef, BfPopulateType populateType
case BfTypeCode_Var: case BfTypeCode_Var:
case BfTypeCode_Let: case BfTypeCode_Let:
{ {
auto objType = mContext->mBfObjectType; primitiveType->mSize = mSystem->mPtrSize;
primitiveType->mSize = objType->mSize; primitiveType->mAlign = mSystem->mPtrSize;
primitiveType->mAlign = objType->mAlign;
resolvedTypeRef->mDefineState = BfTypeDefineState_Defined; resolvedTypeRef->mDefineState = BfTypeDefineState_Defined;
} }
return; return;
@ -1415,7 +1414,7 @@ void BfModule::PopulateType(BfType* resolvedTypeRef, BfPopulateType populateType
{ {
if (typeInstance->mTypeDef == mCompiler->mBfObjectTypeDef) if (typeInstance->mTypeDef == mCompiler->mBfObjectTypeDef)
mContext->mBfObjectType = typeInstance; mContext->mBfObjectType = typeInstance;
else else if (mCompiler->mBfObjectTypeDef != NULL)
ResolveTypeDef(mCompiler->mBfObjectTypeDef); ResolveTypeDef(mCompiler->mBfObjectTypeDef);
} }