mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 04:22:20 +02:00
Improved @this
This commit is contained in:
parent
22a3b47de2
commit
9dcafb7db8
2 changed files with 9 additions and 2 deletions
|
@ -4326,8 +4326,11 @@ BfTypedValue BfExprEvaluator::LookupIdentifier(BfAstNode* refNode, const StringI
|
||||||
{
|
{
|
||||||
if (mModule->mCurMethodState->mClosureState->mCapturing)
|
if (mModule->mCurMethodState->mClosureState->mCapturing)
|
||||||
{
|
{
|
||||||
mModule->mCurMethodState->mClosureState->mCapturedDelegateSelf = true;
|
if (mModule->mCurMethodState->mClosureState->mDelegateType != NULL)
|
||||||
return mModule->GetDefaultTypedValue(mModule->ResolveTypeDef(mModule->mCompiler->mDelegateTypeDef));
|
{
|
||||||
|
mModule->mCurMethodState->mClosureState->mCapturedDelegateSelf = true;
|
||||||
|
return mModule->GetDefaultTypedValue(mModule->mCurMethodState->mClosureState->mDelegateType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -13112,6 +13115,8 @@ BfLambdaInstance* BfExprEvaluator::GetLambdaInstance(BfLambdaBindExpression* lam
|
||||||
else
|
else
|
||||||
closureState.mReturnType = mModule->mContext->mBfObjectType;
|
closureState.mReturnType = mModule->mContext->mBfObjectType;
|
||||||
closureState.mCapturing = true;
|
closureState.mCapturing = true;
|
||||||
|
if (delegateTypeInstance->IsDelegate())
|
||||||
|
closureState.mDelegateType = delegateTypeInstance;
|
||||||
closureState.mDeclaringMethodIsMutating = mModule->mCurMethodInstance->mMethodDef->mIsMutating;
|
closureState.mDeclaringMethodIsMutating = mModule->mCurMethodInstance->mMethodDef->mIsMutating;
|
||||||
methodState.mClosureState = &closureState;
|
methodState.mClosureState = &closureState;
|
||||||
closureState.mClosureType = outerClosure;
|
closureState.mClosureType = outerClosure;
|
||||||
|
|
|
@ -696,6 +696,7 @@ public:
|
||||||
BfClosureInstanceInfo* mClosureInstanceInfo;
|
BfClosureInstanceInfo* mClosureInstanceInfo;
|
||||||
BfMethodDef* mClosureMethodDef;
|
BfMethodDef* mClosureMethodDef;
|
||||||
BfType* mReturnType;
|
BfType* mReturnType;
|
||||||
|
BfTypeInstance* mDelegateType;
|
||||||
BfTypeInstance* mClosureType;
|
BfTypeInstance* mClosureType;
|
||||||
BfDeferredLocalMethod* mActiveDeferredLocalMethod;
|
BfDeferredLocalMethod* mActiveDeferredLocalMethod;
|
||||||
Array<BfLocalVariable> mConstLocals; // Locals not inserted into the captured 'this'
|
Array<BfLocalVariable> mConstLocals; // Locals not inserted into the captured 'this'
|
||||||
|
@ -719,6 +720,7 @@ public:
|
||||||
mReturnTypeInferState = BfReturnTypeInferState_None;
|
mReturnTypeInferState = BfReturnTypeInferState_None;
|
||||||
mActiveDeferredLocalMethod = NULL;
|
mActiveDeferredLocalMethod = NULL;
|
||||||
mReturnType = NULL;
|
mReturnType = NULL;
|
||||||
|
mDelegateType = NULL;
|
||||||
mClosureType = NULL;
|
mClosureType = NULL;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue