In eval mode, we need to write the result of statements
into the return value. But most statements don't return
a value, so the statement shouldn't write a return value.
Change-Id: I9ce24fe6689bd2bb2aee6241ca84a25f9a266f5c
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
{
if (! ast) {
return;
- } else if (_mode == EvalCode) {
- Result e = expression(ast);
- if (*e)
- move(_block->TEMP(_returnAddress), *e);
} else {
Result r(nx);
qSwap(_expr, r);
bool Codegen::visit(ExpressionStatement *ast)
{
- statement(ast->expression);
+ if (_mode == EvalCode) {
+ Result e = expression(ast->expression);
+ if (*e)
+ move(_block->TEMP(_returnAddress), *e);
+ } else {
+ statement(ast->expression);
+ }
return false;
}