From 64af84f0de31ce3186fa95f5a3e3e07fdff1efeb Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Tue, 29 Sep 2020 12:24:34 -0700 Subject: [PATCH] Failed on attempted deferring of a mixin --- IDEHelper/Compiler/BfExprEvaluator.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 51250fa0..0419a738 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -13521,6 +13521,11 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo if (mModule->mCurMethodState == NULL) return; + if (mDeferCallRef != NULL) + { + mModule->Fail("Mixins cannot be directly deferred. Consider wrapping in a block.", targetSrc); + } + BfAstNode* origTargetSrc = targetSrc; BfScopedInvocationTarget* scopedInvocationTarget = NULL; @@ -14230,7 +14235,7 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo endLocalIdx++; ++argExprEvaluatorItr; } - } + } if (auto blockBody = BfNodeDynCast(methodDef->mBody)) mModule->VisitCodeBlock(blockBody); @@ -14239,7 +14244,6 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo { if (auto exprNode = BfNodeDynCast(mixinState->mResultExpr)) { - //if ((exprNode->mTrailingSemicolon == NULL) && (!exprNode->IsA())) if (!exprNode->IsA()) { // Mixin expression result @@ -14252,7 +14256,8 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo } } - GetResult(); + GetResult(); + if (!mResult) { // If we didn't have an expression body then just make the result "void"