1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 03:28: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;
mSystem->ParseAtomComposite("System.Object", objectName);
for (auto itr = mSystem->mTypeDefs.TryGet(objectName); itr != mSystem->mTypeDefs.end(); ++itr)
if (mSystem->ParseAtomComposite("System.Object", objectName))
{
BfTypeDef* typeDef = *itr;
if ((typeDef->mFullName == objectName) && (typeDef->mTypeCode == BfTypeCode_Object))
corlibProjects.Add(typeDef->mProject);
for (auto itr = mSystem->mTypeDefs.TryGet(objectName); itr != mSystem->mTypeDefs.end(); ++itr)
{
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();
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef);
if (mBfObjectTypeDef != NULL)
mContext->mScratchModule->ResolveTypeDef(mBfObjectTypeDef);
VisitSourceExteriorNodes();
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();

View file

@ -2723,8 +2723,10 @@ void BfContext::RemoveInvalidWorkItems()
}
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
// 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)
{
UpdateSrcPos(mCompiler->mBfObjectTypeDef->mTypeDeclaration, flags, debugLocOffset);
if (mCompiler->mBfObjectTypeDef != NULL)
UpdateSrcPos(mCompiler->mBfObjectTypeDef->mTypeDeclaration, flags, debugLocOffset);
SetIllegalSrcPos();
}
@ -19524,7 +19525,9 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup)
mBfIRBuilder->ClearDebugLocation();
PopulateType(mCurTypeInstance, BfPopulateType_Data);
auto thisVal = GetThis();
int prevSize = mContext->mBfObjectType->mInstSize;
int prevSize = 0;
if (mContext->mBfObjectType != NULL)
prevSize = mContext->mBfObjectType->mInstSize;
int curSize = mCurTypeInstance->mInstSize;
if (curSize > prevSize)
{

View file

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