From cd51b72a7d0f48248eb3c510619e869fe31b66ab Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Thu, 21 May 2020 15:01:56 -0700 Subject: [PATCH] Made better error for class &this attempt --- IDEHelper/Compiler/BfExprEvaluator.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 9549825d..47a7e43e 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -14609,11 +14609,16 @@ bool BfExprEvaluator::CheckModifyResult(BfTypedValue typedVal, BfAstNode* refNod else error = mModule->Fail(StrFormat("Cannot %s 'this' within struct lambda. Consider adding by-reference capture specifier [&] to lambda.", modifyType), refNode); } - else + else if (localVar->mResolvedType->IsValueType()) { error = mModule->Fail(StrFormat("Cannot %s 'this' within struct method '%s'. Consider adding 'mut' specifier to this method.", modifyType, mModule->MethodToString(mModule->mCurMethodInstance).c_str()), refNode); } + else + { + error = mModule->Fail(StrFormat("Cannot %s 'this' because '%s' is a reference type.", modifyType, + mModule->TypeToString(localVar->mResolvedType).c_str()), refNode); + } return false; } else if (mResultFieldInstance != NULL) @@ -17171,8 +17176,10 @@ void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr, mModule->Fail(StrFormat("Invalid usage of '%s' expression", BfGetOpName(unaryOp)), opToken); return; } - + ResolveGenericType(); + if (mResult.mType->IsVar()) + break; mResult = BfTypedValue(mResult.mValue, mModule->CreateRefType(mResult.mType, (unaryOp == BfUnaryOp_Ref) ? BfRefType::RefKind_Ref : BfRefType::RefKind_Mut)); } break; @@ -17199,6 +17206,8 @@ void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr, MarkResultUsed(); ResolveGenericType(); + if (mResult.mType->IsVar()) + break; mResult = BfTypedValue(mResult.mValue, mModule->CreateRefType(mResult.mType, BfRefType::RefKind_Out)); } break;