Fix bugs with internalName accessor

This commit is contained in:
Jeff Hutchinson 2021-08-17 20:52:59 -04:00
parent 838395840d
commit 98a2fa0f33
3 changed files with 47 additions and 4 deletions

View file

@ -1304,12 +1304,13 @@ U32 InternalSlotAccessNode::compile(CodeStream& codeStream, U32 ip, TypeReq type
ip = objectExpr->compile(codeStream, ip, TypeReqString);
codeStream.emit(OP_SETCUROBJECT);
// we pop the stack as we will override the current object with the internal object
codeStream.emit(OP_POP_STK);
ip = slotExpr->compile(codeStream, ip, TypeReqString);
codeStream.emit(OP_SETCUROBJECT_INTERNAL);
codeStream.emit(recurse);
codeStream.emit(OP_POP_STK);
return codeStream.tell();
}

View file

@ -1614,6 +1614,11 @@ ConsoleValue CodeBlock::exec(U32 ip, const char* functionName, Namespace* thisNa
stack[_STK].setInt(0);
}
}
else
{
Con::errorf(ConsoleLogEntry::Script, "%s: Attempt to use ->, but the group object wasn't found.", getFileLine(ip - 2));
stack[_STK].setInt(0);
}
break;
case OP_SETCUROBJECT_NEW:

View file

@ -544,7 +544,7 @@ TEST(Script, Basic_SimObject)
TEST(Script, Internal_Name)
{
ConsoleValue value = RunScript(R"(
function SimObject::_internalCall(%this)
function TheFirstInner::_internalCall(%this)
{
return 5;
}
@ -552,7 +552,7 @@ TEST(Script, Internal_Name)
function a()
{
%grp = new SimGroup();
%obj = new SimObject()
%obj = new SimObject(TheFirstInner)
{
internalName = "Yay";
};
@ -568,6 +568,43 @@ TEST(Script, Internal_Name)
)");
ASSERT_EQ(value.getInt(), 5);
ConsoleValue recursiveValue = RunScript(R"(
function SimGroup::doTheInternalCall(%this)
{
return %this-->Yeah._internalCall2();
}
function TheAnotherObject::_internalCall2(%this)
{
return %this.property;
}
function a()
{
%grp = new SimGroup();
%obj = new SimGroup()
{
internalName = "Yay2";
new SimObject(TheAnotherObject)
{
internalName = "Yeah";
property = 12;
};
};
%grp.add(%obj);
%val = %grp.doTheInternalCall();
%grp.delete();
return %val;
}
return a();
)");
ASSERT_EQ(recursiveValue.getInt(), 12);
}
TEST(Script, Basic_Package)