mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +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)
|
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);
|
mResolvePassData->mAutoComplete->CheckTypeRef(fieldDef->mTypeRef, true);
|
||||||
|
|
||||||
|
|
|
@ -15723,7 +15723,7 @@ void BfModule::CreateStaticCtor()
|
||||||
BfType* wantType = NULL;
|
BfType* wantType = NULL;
|
||||||
if ((!BfNodeIsA<BfVarTypeReference>(fieldDef->mTypeRef)) && (!BfNodeIsA<BfLetTypeReference>(fieldDef->mTypeRef)))
|
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);
|
CreateValueFromExpression(fieldDef->mInitializer, wantType, BfEvalExprFlags_FieldInitializer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9735,7 +9735,7 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula
|
||||||
}
|
}
|
||||||
|
|
||||||
BfResolvedTypeSet::LookupContext lookupCtx;
|
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.mRootTypeRef = typeRef;
|
||||||
lookupCtx.mRootTypeDef = typeDef;
|
lookupCtx.mRootTypeDef = typeDef;
|
||||||
lookupCtx.mModule = this;
|
lookupCtx.mModule = this;
|
||||||
|
@ -9923,7 +9923,7 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula
|
||||||
typedVal = constResolver.Resolve(sizeExpr, NULL, BfConstResolveFlag_ArrayInitSize);
|
typedVal = constResolver.Resolve(sizeExpr, NULL, BfConstResolveFlag_ArrayInitSize);
|
||||||
}
|
}
|
||||||
if (typedVal.mKind == BfTypedValueKind_GenericConstValue)
|
if (typedVal.mKind == BfTypedValueKind_GenericConstValue)
|
||||||
{
|
{
|
||||||
BfUnknownSizedArrayType* arrayType = new BfUnknownSizedArrayType();
|
BfUnknownSizedArrayType* arrayType = new BfUnknownSizedArrayType();
|
||||||
arrayType->mContext = mContext;
|
arrayType->mContext = mContext;
|
||||||
arrayType->mElementType = elementType;
|
arrayType->mElementType = elementType;
|
||||||
|
|
|
@ -3259,6 +3259,10 @@ int BfResolvedTypeSet::DoHash(BfTypeReference* typeRef, LookupContext* ctx, BfHa
|
||||||
else if (constant->mConstType == BfConstType_Undef)
|
else if (constant->mConstType == BfConstType_Undef)
|
||||||
{
|
{
|
||||||
elementCount = -1; // Marker for undef
|
elementCount = -1; // Marker for undef
|
||||||
|
if ((ctx->mResolveFlags & BfResolveTypeRefFlag_AllowUnknownSizedArray) == 0)
|
||||||
|
{
|
||||||
|
ctx->mModule->Fail("Invalid use of inferred-sized array", sizeExpr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,8 @@ enum BfResolveTypeRefFlags
|
||||||
BfResolveTypeRefFlag_NoWarnOnMut = 0x800,
|
BfResolveTypeRefFlag_NoWarnOnMut = 0x800,
|
||||||
BfResolveTypeRefFlag_DisallowComptime = 0x1000,
|
BfResolveTypeRefFlag_DisallowComptime = 0x1000,
|
||||||
BfResolveTypeRefFlag_AllowDotDotDot = 0x2000,
|
BfResolveTypeRefFlag_AllowDotDotDot = 0x2000,
|
||||||
BfResolveTypeRefFlag_AllowGlobalContainer = 0x4000
|
BfResolveTypeRefFlag_AllowGlobalContainer = 0x4000,
|
||||||
|
BfResolveTypeRefFlag_AllowUnknownSizedArray = 0x8000
|
||||||
};
|
};
|
||||||
|
|
||||||
enum BfTypeNameFlags : uint16
|
enum BfTypeNameFlags : uint16
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue