diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index b623d8f4..c18c1435 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -21544,7 +21544,8 @@ BfTypedValue BfExprEvaluator::PerformUnaryOperation_TryOperator(const BfTypedVal void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr, BfUnaryOp unaryOp, BfTokenNode* opToken, BfUnaryOpFlags opFlags) { BfAstNode* propSrc = mPropSrc; - BfTypedValue propTarget = mOrigPropTarget; + BfTypedValue origPropTarget = mOrigPropTarget; + BfTypedValue propTarget = mPropTarget; BfPropertyDef* propDef = mPropDef; SizedArray indexerVals = mIndexerValues; BfTypedValue writeToProp; @@ -22056,8 +22057,14 @@ void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr, SizedArray args; if (!setMethod->mIsStatic) - PushThis(propSrc, propTarget, methodInstance.mMethodInstance, args); - //args.push_back(propTarget.mValue); + { + auto usePropTarget = propTarget; + if (origPropTarget.mType == methodInstance.mMethodInstance->GetOwner()) + usePropTarget = origPropTarget; + else + BF_ASSERT(propTarget.mType == methodInstance.mMethodInstance->GetOwner()); + PushThis(propSrc, usePropTarget, methodInstance.mMethodInstance, args); + } for (int paramIdx = 0; paramIdx < (int)indexerVals.size(); paramIdx++) { diff --git a/IDEHelper/Tests/src/Strings.bf b/IDEHelper/Tests/src/Strings.bf index 7cb111be..ce189508 100644 --- a/IDEHelper/Tests/src/Strings.bf +++ b/IDEHelper/Tests/src/Strings.bf @@ -28,6 +28,10 @@ namespace Tests Test.Assert(wStr[2] == 's'); Test.Assert(wStr[3] == 't'); Test.Assert(wStr[4] == '\0'); + + StringView sv = "Abcd"; + sv.Length--; + Test.Assert(sv == "Abc"); } } }