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"