diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index b819317f..4451676b 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -13833,6 +13833,9 @@ void BfExprEvaluator::CreateObject(BfObjectCreateExpression* objCreateExpr, BfAs mModule->Fail("Too many array dimensions, consider using a jagged array.", objCreateExpr); } + if (arrayType == NULL) + return; + if (isAppendAlloc) arrayValue = BfTypedValue(mModule->AppendAllocFromType(resultType, BfIRValue(), 0, arraySize, (int)dimLengthVals.size(), isRawArrayAlloc, zeroMemory), arrayType); else diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 300df1aa..3b6a7b4e 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -10339,7 +10339,11 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula if ((mCurTypeInstance == NULL) || (!mCurTypeInstance->IsGenericTypeInstance())) wantGeneric = false; - auto baseDelegateType = ResolveTypeDef(mCompiler->mDelegateTypeDef)->ToTypeInstance(); + BfTypeInstance* baseDelegateType = NULL; + if (mCompiler->mDelegateTypeDef != NULL) + baseDelegateType = ResolveTypeDef(mCompiler->mDelegateTypeDef)->ToTypeInstance(); + else + failed = true; BfDelegateInfo* delegateInfo = NULL; BfTypeInstance* delegateType = NULL; @@ -10386,7 +10390,8 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula Val128 hashContext; BfTypeDef* typeDef = new BfTypeDef(); - typeDef->mProject = baseDelegateType->mTypeDef->mProject; + if (baseDelegateType != NULL) + typeDef->mProject = baseDelegateType->mTypeDef->mProject; typeDef->mSystem = mCompiler->mSystem; typeDef->mName = mSystem->mEmptyAtom; if (delegateTypeRef->mTypeToken->GetToken() == BfToken_Delegate) @@ -10418,9 +10423,12 @@ BfType* BfModule::ResolveTypeRef(BfTypeReference* typeRef, BfPopulateType popula delegateInfo->mDirectAllocNodes.push_back(directTypeRef); if (typeDef->mIsDelegate) directTypeRef->Init(delegateType); + else if (mCompiler->mFunctionTypeDef == NULL) + failed = true; else directTypeRef->Init(ResolveTypeDef(mCompiler->mFunctionTypeDef)); - typeDef->mBaseTypes.push_back(directTypeRef); + if (!failed) + typeDef->mBaseTypes.push_back(directTypeRef); directTypeRef = BfAstNode::ZeroedAlloc(); delegateInfo->mDirectAllocNodes.push_back(directTypeRef);