mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
Fixes to inferred-sized array error
This commit is contained in:
parent
f4b2d58273
commit
ce1dbd88ed
6 changed files with 12 additions and 8 deletions
|
@ -4357,8 +4357,8 @@ void BfCompiler::ProcessAutocompleteTempType()
|
|||
{
|
||||
BfResolveTypeRefFlags flags = BfResolveTypeRefFlag_None;
|
||||
if (fieldDecl->mInitializer != NULL)
|
||||
flags = (BfResolveTypeRefFlags)(flags | BfResolveTypeRefFlag_AllowUnknownSizedArray);
|
||||
module->ResolveTypeRef(fieldDef->mTypeRef, {}, BfPopulateType_Identity, flags);
|
||||
flags = (BfResolveTypeRefFlags)(flags | BfResolveTypeRefFlag_AllowInferredSizedArray);
|
||||
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, {}, BfPopulateType_Identity, BfResolveTypeRefFlag_AllowUnknownSizedArray);
|
||||
wantType = ResolveTypeRef(fieldDef->mTypeRef, BfPopulateType_Identity, BfResolveTypeRefFlag_AllowInferredSizedArray);
|
||||
}
|
||||
CreateValueFromExpression(fieldDef->mInitializer, wantType, BfEvalExprFlags_FieldInitializer);
|
||||
}
|
||||
|
|
|
@ -3686,7 +3686,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
|||
}
|
||||
else
|
||||
{
|
||||
resolvedFieldType = ResolveTypeRef(field->mTypeRef, BfPopulateType_Declaration, BfResolveTypeRefFlag_NoResolveGenericParam);
|
||||
resolvedFieldType = ResolveTypeRef(field->mTypeRef, BfPopulateType_Declaration, (BfResolveTypeRefFlags)(BfResolveTypeRefFlag_NoResolveGenericParam | BfResolveTypeRefFlag_AllowInferredSizedArray));
|
||||
if (resolvedFieldType == NULL)
|
||||
{
|
||||
// Failed, just put in placeholder 'var'
|
||||
|
@ -9735,7 +9735,7 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula
|
|||
}
|
||||
|
||||
BfResolvedTypeSet::LookupContext lookupCtx;
|
||||
lookupCtx.mResolveFlags = (BfResolveTypeRefFlags)(resolveFlags & (BfResolveTypeRefFlag_NoCreate | BfResolveTypeRefFlag_IgnoreLookupError | BfResolveTypeRefFlag_DisallowComptime | BfResolveTypeRefFlag_AllowUnknownSizedArray));
|
||||
lookupCtx.mResolveFlags = (BfResolveTypeRefFlags)(resolveFlags & (BfResolveTypeRefFlag_NoCreate | BfResolveTypeRefFlag_IgnoreLookupError | BfResolveTypeRefFlag_DisallowComptime | BfResolveTypeRefFlag_AllowInferredSizedArray));
|
||||
lookupCtx.mRootTypeRef = typeRef;
|
||||
lookupCtx.mRootTypeDef = typeDef;
|
||||
lookupCtx.mModule = this;
|
||||
|
|
|
@ -3259,7 +3259,7 @@ 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)
|
||||
if ((ctx->mResolveFlags & BfResolveTypeRefFlag_AllowInferredSizedArray) == 0)
|
||||
{
|
||||
ctx->mModule->Fail("Invalid use of inferred-sized array", sizeExpr);
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ enum BfResolveTypeRefFlags
|
|||
BfResolveTypeRefFlag_DisallowComptime = 0x1000,
|
||||
BfResolveTypeRefFlag_AllowDotDotDot = 0x2000,
|
||||
BfResolveTypeRefFlag_AllowGlobalContainer = 0x4000,
|
||||
BfResolveTypeRefFlag_AllowUnknownSizedArray = 0x8000
|
||||
BfResolveTypeRefFlag_AllowInferredSizedArray = 0x8000
|
||||
};
|
||||
|
||||
enum BfTypeNameFlags : uint16
|
||||
|
|
|
@ -1581,7 +1581,11 @@ BfLocalVariable* BfModule::HandleVariableDeclaration(BfVariableDeclaration* varD
|
|||
typeState.mCurVarInitializer = varDecl->mInitializer;
|
||||
SetAndRestoreValue<BfTypeState*> prevTypeState(mContext->mCurTypeState, &typeState);
|
||||
|
||||
unresolvedType = ResolveTypeRef(varDecl->mTypeRef, BfPopulateType_Data, (BfResolveTypeRefFlags)(BfResolveTypeRefFlag_NoResolveGenericParam | BfResolveTypeRefFlag_AllowRef));
|
||||
BfResolveTypeRefFlags flags = (BfResolveTypeRefFlags)(BfResolveTypeRefFlag_NoResolveGenericParam | BfResolveTypeRefFlag_AllowRef);
|
||||
if (varDecl->mInitializer != NULL)
|
||||
flags = (BfResolveTypeRefFlags)(flags | BfResolveTypeRefFlag_AllowInferredSizedArray);
|
||||
|
||||
unresolvedType = ResolveTypeRef(varDecl->mTypeRef, BfPopulateType_Data, flags);
|
||||
if (unresolvedType == NULL)
|
||||
unresolvedType = GetPrimitiveType(BfTypeCode_Var);
|
||||
resolvedType = unresolvedType;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue