diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index bc86422c..ab74b2f4 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -15966,25 +15966,31 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo } if (auto blockBody = BfNodeDynCast(methodDef->mBody)) + { mModule->VisitCodeBlock(blockBody); - if (mixinState->mResultExpr != NULL) - { - if (auto exprNode = BfNodeDynCast(mixinState->mResultExpr)) + if (mixinState->mResultExpr != NULL) { - if (!exprNode->IsA()) + if (auto exprNode = BfNodeDynCast(mixinState->mResultExpr)) { - // Mixin expression result - mModule->UpdateSrcPos(exprNode); - VisitChild(exprNode); - FinishExpressionResult(); - ResolveGenericType(); - //mResult = mModule->LoadValue(mResult); + if (!exprNode->IsA()) + { + // Mixin expression result + mModule->UpdateSrcPos(exprNode); + VisitChild(exprNode); + FinishExpressionResult(); + ResolveGenericType(); + } } } - } - GetResult(); + GetResult(); + } + else if (auto expr = BfNodeDynCast(methodDef->mBody)) + { + mModule->UpdateSrcPos(expr); + mResult = mModule->CreateValueFromExpression(expr); + } if (!mResult) { @@ -16013,8 +16019,15 @@ void BfExprEvaluator::InjectMixin(BfAstNode* targetSrc, BfTypedValue target, boo } if (auto blockBody = BfNodeDynCast(methodDef->mBody)) + { if (blockBody->mCloseBrace != NULL) mModule->UpdateSrcPos(blockBody->mCloseBrace); + } + else if (auto methodDeclaration = BfNodeDynCast(methodDef->mMethodDeclaration)) + { + if (methodDeclaration->mFatArrowToken != NULL) + mModule->UpdateSrcPos(methodDeclaration->mFatArrowToken); + } mModule->RestoreScopeState();