mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-15 08:34:40 +00:00
Fix omissions in astNodes.cpp.
This commit is contained in:
parent
81a385094f
commit
a4f7182de5
1 changed files with 46 additions and 6 deletions
|
|
@ -214,8 +214,22 @@ U32 ReturnStmtNode::compileStmt(CodeStream &codeStream, U32 ip)
|
||||||
codeStream.emit(OP_RETURN_VOID);
|
codeStream.emit(OP_RETURN_VOID);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ip = expr->compile(codeStream, ip, TypeReqString);
|
TypeReq walkType = expr->getPreferredType();
|
||||||
codeStream.emit(OP_RETURN);
|
if (walkType == TypeReqNone) walkType = TypeReqString;
|
||||||
|
ip = expr->compile(codeStream, ip, walkType);
|
||||||
|
|
||||||
|
// Return the correct type
|
||||||
|
switch (walkType) {
|
||||||
|
case TypeReqUInt:
|
||||||
|
codeStream.emit(OP_RETURN_UINT);
|
||||||
|
break;
|
||||||
|
case TypeReqFloat:
|
||||||
|
codeStream.emit(OP_RETURN_FLT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
codeStream.emit(OP_RETURN);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return codeStream.tell();
|
return codeStream.tell();
|
||||||
}
|
}
|
||||||
|
|
@ -1146,8 +1160,21 @@ U32 FuncCallExprNode::compile(CodeStream &codeStream, U32 ip, TypeReq type)
|
||||||
codeStream.emit(OP_PUSH_FRAME);
|
codeStream.emit(OP_PUSH_FRAME);
|
||||||
for(ExprNode *walk = args; walk; walk = (ExprNode *) walk->getNext())
|
for(ExprNode *walk = args; walk; walk = (ExprNode *) walk->getNext())
|
||||||
{
|
{
|
||||||
ip = walk->compile(codeStream, ip, TypeReqString);
|
TypeReq walkType = walk->getPreferredType();
|
||||||
codeStream.emit(OP_PUSH);
|
if (walkType == TypeReqNone) walkType = TypeReqString;
|
||||||
|
ip = walk->compile(codeStream, ip, walkType);
|
||||||
|
switch (walk->getPreferredType())
|
||||||
|
{
|
||||||
|
case TypeReqFloat:
|
||||||
|
codeStream.emit(OP_PUSH_FLT);
|
||||||
|
break;
|
||||||
|
case TypeReqUInt:
|
||||||
|
codeStream.emit(OP_PUSH_UINT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
codeStream.emit(OP_PUSH);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(callType == MethodCall || callType == ParentCall)
|
if(callType == MethodCall || callType == ParentCall)
|
||||||
codeStream.emit(OP_CALLFUNC);
|
codeStream.emit(OP_CALLFUNC);
|
||||||
|
|
@ -1444,8 +1471,21 @@ U32 ObjectDeclNode::compileSubObject(CodeStream &codeStream, U32 ip, bool root)
|
||||||
codeStream.emit(OP_PUSH);
|
codeStream.emit(OP_PUSH);
|
||||||
for(ExprNode *exprWalk = argList; exprWalk; exprWalk = (ExprNode *) exprWalk->getNext())
|
for(ExprNode *exprWalk = argList; exprWalk; exprWalk = (ExprNode *) exprWalk->getNext())
|
||||||
{
|
{
|
||||||
ip = exprWalk->compile(codeStream, ip, TypeReqString);
|
TypeReq walkType = exprWalk->getPreferredType();
|
||||||
codeStream.emit(OP_PUSH);
|
if (walkType == TypeReqNone) walkType = TypeReqString;
|
||||||
|
ip = exprWalk->compile(codeStream, ip, walkType);
|
||||||
|
switch (exprWalk->getPreferredType())
|
||||||
|
{
|
||||||
|
case TypeReqFloat:
|
||||||
|
codeStream.emit(OP_PUSH_FLT);
|
||||||
|
break;
|
||||||
|
case TypeReqUInt:
|
||||||
|
codeStream.emit(OP_PUSH_UINT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
codeStream.emit(OP_PUSH);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
codeStream.emit(OP_CREATE_OBJECT);
|
codeStream.emit(OP_CREATE_OBJECT);
|
||||||
codeStream.emitSTE(parentObject);
|
codeStream.emitSTE(parentObject);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue