1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Fixed sized array size inference, primitive type handling in ir

This commit is contained in:
Brian Fiete 2020-12-24 06:58:38 -08:00
parent 8894430f98
commit a20519ee04
8 changed files with 92 additions and 21 deletions

View file

@ -2901,7 +2901,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
continue;
SetAndRestoreValue<BfFieldDef*> prevTypeRef(mContext->mCurTypeState->mCurFieldDef, field);
BfType* resolvedFieldType = NULL;
if (field->IsEnumCaseEntry())
@ -2938,7 +2938,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
// For 'let', make read-only
}
else
{
{
resolvedFieldType = ResolveTypeRef(field->mTypeRef, BfPopulateType_Declaration, BfResolveTypeRefFlag_NoResolveGenericParam);
if (resolvedFieldType == NULL)
{
@ -2948,6 +2948,29 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
}
}
if (resolvedFieldType->IsUndefSizedArray())
{
if (auto arrayTypeRef = BfNodeDynCast<BfArrayTypeRef>(field->mTypeRef))
{
if (arrayTypeRef->IsInferredSize())
{
if (field->mInitializer != NULL)
{
DeferredResolveEntry resolveEntry;
resolveEntry.mFieldDef = field;
resolveEntry.mTypeArrayIdx = (int)llvmFieldTypes.size();
deferredVarResolves.push_back(resolveEntry);
fieldInstance->mIsInferredType = true;
}
else
{
AssertErrorState();
}
}
}
}
if (resolvedFieldType->IsMethodRef())
{
auto methodRefType = (BfMethodRefType*)resolvedFieldType;