diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index fba3451e..c9983c3d 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -4386,6 +4386,10 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy // handle embedded methodRefs hadNonSplattable = true; } + else if (checkType->IsOpaque()) + { + hadNonSplattable = true; + } else if (checkType->IsStruct()) { auto checkTypeInstance = checkType->ToTypeInstance(); @@ -4418,6 +4422,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy { if (checkType->IsSizedArray()) hadNonSplattable = true; + dataCount += checkType->GetSplatCount(); } }; @@ -4438,6 +4443,8 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy } if (typeInstance->IsTypedPrimitive()) typeInstance->mIsSplattable = true; + if (typeInstance->mTypeDef->mIsOpaque) + typeInstance->mIsSplattable = false; BF_ASSERT(mContext->mCurTypeState == &typeState); @@ -8651,7 +8658,8 @@ void BfModule::TypeRefNotFound(BfTypeReference* typeRef, const char* appendName) if (typeRef->IsTemporary()) return; - Fail("Type could not be found (are you missing a using directive or library reference?)", typeRef); + if (PreFail()) + Fail("Type could not be found (are you missing a using directive or library reference?)", typeRef); if (!mIgnoreErrors) { diff --git a/IDEHelper/Compiler/BfResolvedTypeUtils.h b/IDEHelper/Compiler/BfResolvedTypeUtils.h index 4e8172bc..4b296aa5 100644 --- a/IDEHelper/Compiler/BfResolvedTypeUtils.h +++ b/IDEHelper/Compiler/BfResolvedTypeUtils.h @@ -554,6 +554,7 @@ public: virtual bool IsFunctionFromTypeRef() { return false; } virtual BfDelegateInfo* GetDelegateInfo() { return NULL; } virtual bool IsValueType() { return false; } + virtual bool IsOpaque() { return false; } virtual bool IsValueTypeOrValueTypePtr() { return false; } virtual bool IsWrappableType() { return false; } virtual bool IsPrimitiveType() { return false; } @@ -1960,6 +1961,7 @@ public: virtual bool IsTypeInstance() override { return true; } virtual bool IsInterface() override { return mTypeDef->mTypeCode == BfTypeCode_Interface; } virtual bool IsValueType() override { return (mTypeDef->mTypeCode == BfTypeCode_Struct) || (mTypeDef->mTypeCode == BfTypeCode_Enum); } + virtual bool IsOpaque() override { return mTypeDef->mIsOpaque; } virtual bool IsStruct() override { return ((mTypeDef->mTypeCode == BfTypeCode_Struct) || (mTypeDef->mTypeCode == BfTypeCode_Enum)) && (!mIsTypedPrimitive); } virtual bool IsUnion() override { return mIsUnion; } virtual bool IsDelegate() override { return mTypeDef->mIsDelegate; }