1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +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,12 +3001,14 @@ 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)
{ {
BfTypeDef* typeDef = *itr; for (auto itr = mSystem->mTypeDefs.TryGet(objectName); itr != mSystem->mTypeDefs.end(); ++itr)
if ((typeDef->mFullName == objectName) && (typeDef->mTypeCode == BfTypeCode_Object)) {
corlibProjects.Add(typeDef->mProject); BfTypeDef* typeDef = *itr;
if ((typeDef->mFullName == objectName) && (typeDef->mTypeCode == BfTypeCode_Object))
corlibProjects.Add(typeDef->mProject);
}
} }
} }
@ -6742,7 +6744,8 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory)
mSystem->CheckLockYield(); mSystem->CheckLockYield();
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef); if (mBfObjectTypeDef != NULL)
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef);
VisitSourceExteriorNodes(); VisitSourceExteriorNodes();
if (!mIsResolveOnly) if (!mIsResolveOnly)
@ -6827,7 +6830,8 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory)
// //
{ {
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef, BfPopulateType_Full); if (mBfObjectTypeDef != NULL)
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef, BfPopulateType_Full);
mContext->RemapObject(); mContext->RemapObject();

View file

@ -2723,8 +2723,10 @@ 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,7 +2567,8 @@ void BfModule::UpdateExprSrcPos(BfAstNode* astNode, BfSrcPosFlags flags)
void BfModule::UseDefaultSrcPos(BfSrcPosFlags flags, int debugLocOffset) void BfModule::UseDefaultSrcPos(BfSrcPosFlags flags, int debugLocOffset)
{ {
UpdateSrcPos(mCompiler->mBfObjectTypeDef->mTypeDeclaration, flags, debugLocOffset); if (mCompiler->mBfObjectTypeDef != NULL)
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);
} }