Browse Source

fix %obj.field op assign.

Jeff Hutchinson 4 years ago
parent
commit
085af8e762
2 changed files with 17 additions and 1 deletions
  1. 1 1
      Engine/source/console/astNodes.cpp
  2. 16 0
      Engine/source/console/test/ScriptTest.cpp

+ 1 - 1
Engine/source/console/astNodes.cpp

@@ -1432,7 +1432,7 @@ U32 SlotAssignOpNode::compile(CodeStream& codeStream, U32 ip, TypeReq type)
    codeStream.emit((subType == TypeReqFloat) ? OP_LOADFIELD_FLT : OP_LOADFIELD_UINT);
    codeStream.emit(operand);
    codeStream.emit((subType == TypeReqFloat) ? OP_SAVEFIELD_FLT : OP_SAVEFIELD_UINT);
-   if (subType == TypeReqNone)
+   if (type == TypeReqNone)
       codeStream.emit(OP_POP_STK);
    return codeStream.tell();
 }

+ 16 - 0
Engine/source/console/test/ScriptTest.cpp

@@ -512,6 +512,22 @@ TEST(Script, Basic_SimObject)
    )");
 
    ASSERT_STREQ(fieldTest.getString(), "B");
+
+   ConsoleValue fieldOpTest = RunScript(R"(
+         function a()
+         {
+            %obj = new SimObject();
+            %obj.field = 1;
+            %obj.field += 2;
+
+            %value = %obj.field;
+            %obj.delete();
+            return %value;
+         }
+         return a();
+   )");
+
+   ASSERT_EQ(fieldOpTest.getInt(), 3);
 }
 
 TEST(Script, Internal_Name)