diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index dcc736d1..d1de412b 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -4326,8 +4326,11 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI { if (mModule->mCurMethodState->mClosureState->mCapturing) { - mModule->mCurMethodState->mClosureState->mCapturedDelegateSelf = true; - return mModule->GetDefaultTypedValue(mModule->ResolveTypeDef(mModule->mCompiler->mDelegateTypeDef)); + if (mModule->mCurMethodState->mClosureState->mDelegateType != NULL) + { + mModule->mCurMethodState->mClosureState->mCapturedDelegateSelf = true; + return mModule->GetDefaultTypedValue(mModule->mCurMethodState->mClosureState->mDelegateType); + } } else { @@ -13112,6 +13115,8 @@ BfLambdaInstance* BfExprEvaluator::GetLambdaInstance(BfLambdaBindExpression* lam else closureState.mReturnType = mModule->mContext->mBfObjectType; closureState.mCapturing = true; + if (delegateTypeInstance->IsDelegate()) + closureState.mDelegateType = delegateTypeInstance; closureState.mDeclaringMethodIsMutating = mModule->mCurMethodInstance->mMethodDef->mIsMutating; methodState.mClosureState = &closureState; closureState.mClosureType = outerClosure; diff --git a/IDEHelper/Compiler/BfModule.h b/IDEHelper/Compiler/BfModule.h index 53f6a2e1..3c35175b 100644 --- a/IDEHelper/Compiler/BfModule.h +++ b/IDEHelper/Compiler/BfModule.h @@ -696,6 +696,7 @@ public: BfClosureInstanceInfo* mClosureInstanceInfo; BfMethodDef* mClosureMethodDef; BfType* mReturnType; + BfTypeInstance* mDelegateType; BfTypeInstance* mClosureType; BfDeferredLocalMethod* mActiveDeferredLocalMethod; Array mConstLocals; // Locals not inserted into the captured 'this' @@ -719,6 +720,7 @@ public: mReturnTypeInferState = BfReturnTypeInferState_None; mActiveDeferredLocalMethod = NULL; mReturnType = NULL; + mDelegateType = NULL; mClosureType = NULL; } };