Don't crash on e.g.
var x = new (function() { return this; })
Change-Id: I120410b40ecda7fdc41e1dcc2c17251397143bc1
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
bool Codegen::visit(NewExpression *ast)
{
Result base = expression(ast->expression);
- _expr.code = _block->NEW(*base, 0);
+ IR::Expr *expr = *base;
+ if (expr && !expr->asTemp() && !expr->asName() && !expr->asMember()) {
+ const unsigned t = _block->newTemp();
+ move(_block->TEMP(t), expr);
+ expr = _block->TEMP(t);
+ }
+ _expr.code = _block->NEW(expr, 0);
return false;
}