Use a new temp for return values from call and new operations
Change-Id: Ic95ab3b2f866b68cbdc04299d1c983beb0e46387 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
This commit is contained in:
parent
cd770a6b59
commit
241ccd8fe3
|
@ -1635,6 +1635,10 @@ bool Codegen::visit(CallExpression *ast)
|
|||
if (hasError)
|
||||
return false;
|
||||
|
||||
Reference r = Reference::fromTemp(this, bytecodeGenerator->newTemp());
|
||||
|
||||
TempScope scope(_function);
|
||||
|
||||
Reference base = expression(ast->base);
|
||||
if (hasError)
|
||||
return false;
|
||||
|
@ -1647,8 +1651,9 @@ bool Codegen::visit(CallExpression *ast)
|
|||
call.dest = base.asRValue();
|
||||
call.argc = argc;
|
||||
call.callData = 0;
|
||||
call.result = Moth::Param::createTemp(0); bytecodeGenerator->addInstruction(call);
|
||||
_expr.result = Reference::fromTemp(this, 0);
|
||||
call.result = r.asLValue();
|
||||
bytecodeGenerator->addInstruction(call);
|
||||
_expr.result = r;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1880,6 +1885,8 @@ bool Codegen::visit(NewExpression *ast)
|
|||
{
|
||||
if (hasError)
|
||||
return false;
|
||||
|
||||
Reference r = Reference::fromTemp(this, bytecodeGenerator->newTemp());
|
||||
TempScope scope(_function);
|
||||
|
||||
Reference base = expression(ast->expression);
|
||||
|
@ -1890,9 +1897,9 @@ bool Codegen::visit(NewExpression *ast)
|
|||
create.func = base.asRValue();
|
||||
create.argc = 0;
|
||||
create.callData = 0;
|
||||
create.result = Moth::Param::createTemp(0);
|
||||
create.result = r.asLValue();
|
||||
bytecodeGenerator->addInstruction(create);
|
||||
_expr.result = Reference::fromTemp(this, 0);
|
||||
_expr.result = r;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1901,6 +1908,7 @@ bool Codegen::visit(NewMemberExpression *ast)
|
|||
if (hasError)
|
||||
return false;
|
||||
|
||||
Reference r = Reference::fromTemp(this, bytecodeGenerator->newTemp());
|
||||
TempScope scope(_function);
|
||||
|
||||
Reference base = expression(ast->base);
|
||||
|
@ -1915,9 +1923,9 @@ bool Codegen::visit(NewMemberExpression *ast)
|
|||
create.func = base.asRValue();
|
||||
create.argc = argc;
|
||||
create.callData = 0;
|
||||
create.result = Moth::Param::createTemp(0);
|
||||
create.result = r.asRValue();
|
||||
bytecodeGenerator->addInstruction(create);
|
||||
_expr.result = Reference::fromTemp(this, 0);
|
||||
_expr.result = r;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue