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:
parent
8894430f98
commit
a20519ee04
8 changed files with 92 additions and 21 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue