From 052edbcb8d4bdd775f729d1a0cb4b98447f5355b Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 3 Aug 2022 08:16:41 -0700 Subject: [PATCH] Fixed assignment operator RHS conversion issue --- IDEHelper/Compiler/BfExprEvaluator.cpp | 3 +++ IDEHelper/Tests/src/Operators.bf | 15 +++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index c11889a0..5c5e5ea0 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -20046,6 +20046,9 @@ BfTypedValue BfExprEvaluator::PerformAssignment_CheckOp(BfAssignmentExpression* { if (!mModule->CanCast(rightValue, paramType)) continue; + + rightValue = mModule->Cast(assignExpr->mLeft, rightValue, paramType); + BF_ASSERT(rightValue); } mModule->SetElementType(assignExpr->mOpToken, BfSourceElementType_Method); diff --git a/IDEHelper/Tests/src/Operators.bf b/IDEHelper/Tests/src/Operators.bf index dc0627d6..f2b60715 100644 --- a/IDEHelper/Tests/src/Operators.bf +++ b/IDEHelper/Tests/src/Operators.bf @@ -483,6 +483,16 @@ namespace Tests } } + class ClassA + { + public String value = new .() ~ delete _; + + public void operator+=(StringView value) + { + this.value.Append(value); + } + } + public struct Vector2 : this(float x, float y); public static Event sEvent ~ _.Dispose(); // Workaround for the lack of auto-destructor in properties @@ -728,6 +738,11 @@ namespace Tests rcStr.Release(); //RefCounted rcB = .Create(); + + ClassA ca = scope .(); + ca += "ab"; + ca += "cd"; + Test.Assert(ca.value == "abcd"); } struct IntStruct