mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Added field and instantiation restrictions to extended opaques
This commit is contained in:
parent
5000a8a824
commit
765906dd70
3 changed files with 19 additions and 10 deletions
|
@ -3488,6 +3488,7 @@ void BfCompiler::UpdateRevisedTypes()
|
||||||
compositeTypeDef->mTypeCode = rootTypeDef->mTypeCode;
|
compositeTypeDef->mTypeCode = rootTypeDef->mTypeCode;
|
||||||
compositeTypeDef->mFullName = rootTypeDef->mFullName;
|
compositeTypeDef->mFullName = rootTypeDef->mFullName;
|
||||||
compositeTypeDef->mFullNameEx = rootTypeDef->mFullNameEx;
|
compositeTypeDef->mFullNameEx = rootTypeDef->mFullNameEx;
|
||||||
|
compositeTypeDef->mIsOpaque = rootTypeDef->mIsOpaque;
|
||||||
compositeTypeDef->mIsFunction = rootTypeDef->mIsFunction;
|
compositeTypeDef->mIsFunction = rootTypeDef->mIsFunction;
|
||||||
compositeTypeDef->mIsDelegate = rootTypeDef->mIsDelegate;
|
compositeTypeDef->mIsDelegate = rootTypeDef->mIsDelegate;
|
||||||
compositeTypeDef->mIsCombinedPartial = true;
|
compositeTypeDef->mIsCombinedPartial = true;
|
||||||
|
|
|
@ -5595,6 +5595,21 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
||||||
|
|
||||||
if ((!fieldDef->mIsConst) && (!fieldDef->mIsStatic))
|
if ((!fieldDef->mIsConst) && (!fieldDef->mIsStatic))
|
||||||
{
|
{
|
||||||
|
BfAstNode* nameRefNode = NULL;
|
||||||
|
if (auto fieldDecl = fieldDef->GetFieldDeclaration())
|
||||||
|
nameRefNode = fieldDecl->mNameNode;
|
||||||
|
else if (auto paramDecl = fieldDef->GetParamDeclaration())
|
||||||
|
nameRefNode = paramDecl->mNameNode;
|
||||||
|
if (nameRefNode == NULL)
|
||||||
|
nameRefNode = fieldDef->mTypeRef;
|
||||||
|
|
||||||
|
if ((!resolvedFieldType->IsValuelessType()) && (typeDef->mIsOpaque))
|
||||||
|
{
|
||||||
|
Fail(StrFormat("Opaque type '%s' attempted to declare non-static field '%s'", TypeToString(typeInstance).c_str(), fieldDef->mName.c_str()), nameRefNode, true);
|
||||||
|
resolvedFieldType = GetPrimitiveType(BfTypeCode_None);
|
||||||
|
fieldInstance->mResolvedType = resolvedFieldType;
|
||||||
|
}
|
||||||
|
|
||||||
PopulateType(resolvedFieldType, resolvedFieldType->IsValueType() ? BfPopulateType_Data : BfPopulateType_Declaration);
|
PopulateType(resolvedFieldType, resolvedFieldType->IsValueType() ? BfPopulateType_Data : BfPopulateType_Declaration);
|
||||||
if (resolvedFieldType->WantsGCMarking())
|
if (resolvedFieldType->WantsGCMarking())
|
||||||
typeInstance->mWantsGCMarking = true;
|
typeInstance->mWantsGCMarking = true;
|
||||||
|
@ -5611,15 +5626,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
||||||
if (fieldDef->mIsExtern)
|
if (fieldDef->mIsExtern)
|
||||||
{
|
{
|
||||||
Fail("Cannot declare instance member as 'extern'", fieldDef->GetFieldDeclaration()->mExternSpecifier, true);
|
Fail("Cannot declare instance member as 'extern'", fieldDef->GetFieldDeclaration()->mExternSpecifier, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
BfAstNode* nameRefNode = NULL;
|
|
||||||
if (auto fieldDecl = fieldDef->GetFieldDeclaration())
|
|
||||||
nameRefNode = fieldDecl->mNameNode;
|
|
||||||
else if (auto paramDecl = fieldDef->GetParamDeclaration())
|
|
||||||
nameRefNode = paramDecl->mNameNode;
|
|
||||||
if (nameRefNode == NULL)
|
|
||||||
nameRefNode = fieldDef->mTypeRef;
|
|
||||||
|
|
||||||
if (!allowInstanceFields)
|
if (!allowInstanceFields)
|
||||||
{
|
{
|
||||||
|
@ -5677,7 +5684,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
|
||||||
}
|
}
|
||||||
else if (!resolvedFieldType->IsObject())
|
else if (!resolvedFieldType->IsObject())
|
||||||
Fail("Append fields must be classes", nameRefNode, true);
|
Fail("Append fields must be classes", nameRefNode, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
BF_ASSERT(dataSize >= 0);
|
BF_ASSERT(dataSize >= 0);
|
||||||
fieldInstance->mDataSize = dataSize;
|
fieldInstance->mDataSize = dataSize;
|
||||||
|
|
|
@ -3207,6 +3207,7 @@ void BfSystem::AddToCompositePartial(BfPassInstance* passInstance, BfTypeDef* co
|
||||||
typeDef->mSystem = partialTypeDef->mSystem;
|
typeDef->mSystem = partialTypeDef->mSystem;
|
||||||
typeDef->mTypeCode = partialTypeDef->mTypeCode;
|
typeDef->mTypeCode = partialTypeDef->mTypeCode;
|
||||||
typeDef->mShow = partialTypeDef->mShow;
|
typeDef->mShow = partialTypeDef->mShow;
|
||||||
|
typeDef->mIsOpaque = partialTypeDef->mIsOpaque;
|
||||||
typeDef->mIsFunction = partialTypeDef->mIsFunction;
|
typeDef->mIsFunction = partialTypeDef->mIsFunction;
|
||||||
typeDef->mIsDelegate = partialTypeDef->mIsDelegate;
|
typeDef->mIsDelegate = partialTypeDef->mIsDelegate;
|
||||||
typeDef->mNestDepth = partialTypeDef->mNestDepth;
|
typeDef->mNestDepth = partialTypeDef->mNestDepth;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue