mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 19:48:20 +02:00
Error for invalid use of inferred-sized arrays
This commit is contained in:
parent
5929dbb6cb
commit
f4b2d58273
5 changed files with 13 additions and 5 deletions
|
@ -4355,7 +4355,10 @@ void BfCompiler::ProcessAutocompleteTempType()
|
|||
|
||||
if (fieldDef->mTypeRef != NULL)
|
||||
{
|
||||
module->ResolveTypeRef(fieldDef->mTypeRef);
|
||||
BfResolveTypeRefFlags flags = BfResolveTypeRefFlag_None;
|
||||
if (fieldDecl->mInitializer != NULL)
|
||||
flags = (BfResolveTypeRefFlags)(flags | BfResolveTypeRefFlag_AllowUnknownSizedArray);
|
||||
module->ResolveTypeRef(fieldDef->mTypeRef, {}, BfPopulateType_Identity, flags);
|
||||
}
|
||||
mResolvePassData->mAutoComplete->CheckTypeRef(fieldDef->mTypeRef, true);
|
||||
|
||||
|
|
|
@ -15723,7 +15723,7 @@ void BfModule::CreateStaticCtor()
|
|||
BfType* wantType = NULL;
|
||||
if ((!BfNodeIsA<BfVarTypeReference>(fieldDef->mTypeRef)) && (!BfNodeIsA<BfLetTypeReference>(fieldDef->mTypeRef)))
|
||||
{
|
||||
wantType = ResolveTypeRef(fieldDef->mTypeRef);
|
||||
wantType = ResolveTypeRef(fieldDef->mTypeRef, {}, BfPopulateType_Identity, BfResolveTypeRefFlag_AllowUnknownSizedArray);
|
||||
}
|
||||
CreateValueFromExpression(fieldDef->mInitializer, wantType, BfEvalExprFlags_FieldInitializer);
|
||||
}
|
||||
|
|
|
@ -9735,7 +9735,7 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula
|
|||
}
|
||||
|
||||
BfResolvedTypeSet::LookupContext lookupCtx;
|
||||
lookupCtx.mResolveFlags = (BfResolveTypeRefFlags)(resolveFlags & (BfResolveTypeRefFlag_NoCreate | BfResolveTypeRefFlag_IgnoreLookupError | BfResolveTypeRefFlag_DisallowComptime));
|
||||
lookupCtx.mResolveFlags = (BfResolveTypeRefFlags)(resolveFlags & (BfResolveTypeRefFlag_NoCreate | BfResolveTypeRefFlag_IgnoreLookupError | BfResolveTypeRefFlag_DisallowComptime | BfResolveTypeRefFlag_AllowUnknownSizedArray));
|
||||
lookupCtx.mRootTypeRef = typeRef;
|
||||
lookupCtx.mRootTypeDef = typeDef;
|
||||
lookupCtx.mModule = this;
|
||||
|
|
|
@ -3259,6 +3259,10 @@ int BfResolvedTypeSet::DoHash(BfTypeReference* typeRef, LookupContext* ctx, BfHa
|
|||
else if (constant->mConstType == BfConstType_Undef)
|
||||
{
|
||||
elementCount = -1; // Marker for undef
|
||||
if ((ctx->mResolveFlags & BfResolveTypeRefFlag_AllowUnknownSizedArray) == 0)
|
||||
{
|
||||
ctx->mModule->Fail("Invalid use of inferred-sized array", sizeExpr);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -34,7 +34,8 @@ enum BfResolveTypeRefFlags
|
|||
BfResolveTypeRefFlag_NoWarnOnMut = 0x800,
|
||||
BfResolveTypeRefFlag_DisallowComptime = 0x1000,
|
||||
BfResolveTypeRefFlag_AllowDotDotDot = 0x2000,
|
||||
BfResolveTypeRefFlag_AllowGlobalContainer = 0x4000
|
||||
BfResolveTypeRefFlag_AllowGlobalContainer = 0x4000,
|
||||
BfResolveTypeRefFlag_AllowUnknownSizedArray = 0x8000
|
||||
};
|
||||
|
||||
enum BfTypeNameFlags : uint16
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue