diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index b9a2ed5f..2a87705d 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -21479,7 +21479,7 @@ BfTypedValue BfExprEvaluator::PerformUnaryOperation_TryOperator(const BfTypedVal void BfExprEvaluator::PerformUnaryOperation_OnResult(BfExpression* unaryOpExpr, BfUnaryOp unaryOp, BfTokenNode* opToken, BfUnaryOpFlags opFlags) { BfAstNode* propSrc = mPropSrc; - BfTypedValue propTarget = mPropTarget; + BfTypedValue propTarget = mOrigPropTarget; BfPropertyDef* propDef = mPropDef; SizedArray indexerVals = mIndexerValues; BfTypedValue writeToProp; diff --git a/IDEHelper/Tests/src/Generics2.bf b/IDEHelper/Tests/src/Generics2.bf index 6f20b875..cfd394bf 100644 --- a/IDEHelper/Tests/src/Generics2.bf +++ b/IDEHelper/Tests/src/Generics2.bf @@ -143,6 +143,12 @@ namespace Tests d(); } + class GenClass { public int test { get; set; }; } // Using a field instead of a property wouldn't cause the error + + public static int GenClassMethodA(A a) where A : GenClass { return a.test++; } + public static int GenClassMethodB(GenClass a) { return a.test++; } + public static int GenClassMethodC(A a) where A : GenClass { return a.test += 1; } + [Test] public static void TestBasics() { @@ -161,6 +167,14 @@ namespace Tests Test.Assert(StrTest("ABCDE") == 5); Test.Assert(TestEmitMixin(123, 456, .. scope .()) == "123456"); + + GenClass gci = scope .(); + Test.Assert(GenClassMethodA(gci) == 0); + Test.Assert(gci.test == 1); + Test.Assert(GenClassMethodB(gci) == 1); + Test.Assert(gci.test == 2); + Test.Assert(GenClassMethodC(gci) == 3); + Test.Assert(gci.test == 3); } } }