From 55c0a748b4b7db093c50e0599dd104bee71fca85 Mon Sep 17 00:00:00 2001 From: Jeff Hutchinson Date: Tue, 7 Sep 2021 19:43:39 -0400 Subject: [PATCH] Don't generate op_inc whenever its used as an expression. --- Engine/source/console/astNodes.cpp | 2 +- Engine/source/console/test/ScriptTest.cpp | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Engine/source/console/astNodes.cpp b/Engine/source/console/astNodes.cpp index 1ee165272..091f6cf1c 100644 --- a/Engine/source/console/astNodes.cpp +++ b/Engine/source/console/astNodes.cpp @@ -1083,7 +1083,7 @@ U32 AssignOpExprNode::compile(CodeStream& codeStream, U32 ip, TypeReq type) bool oldVariables = arrayIndex || varName[0] == '$'; - if (op == opPLUSPLUS && !oldVariables) + if (op == opPLUSPLUS && !oldVariables && type == TypeReqNone) { const S32 varIdx = getFuncVars(dbgLineNumber)->assign(varName, TypeReqFloat, dbgLineNumber); diff --git a/Engine/source/console/test/ScriptTest.cpp b/Engine/source/console/test/ScriptTest.cpp index a2295f774..24905aba3 100644 --- a/Engine/source/console/test/ScriptTest.cpp +++ b/Engine/source/console/test/ScriptTest.cpp @@ -968,6 +968,20 @@ TEST(Script, MiscRegressions) )"); ASSERT_EQ(regression4.getFloat(), 0.5); + + Con::setBoolVariable("$Debug::DumpByteCode", true); + + ConsoleValue regression5 = RunScript(R"( + function noOpInc() + { + %count = 0; + %var[%count++] = 2; + return %var[1]; + } + return noOpInc(); + )"); + + ASSERT_EQ(regression5.getInt(), 2); } #endif