mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-01-19 20:24:49 +00:00
Fix bugs with internalName accessor
This commit is contained in:
parent
838395840d
commit
98a2fa0f33
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue