From: Lars Knoll Date: Sat, 8 Dec 2012 15:01:23 +0000 (-0800) Subject: Create a temp when a new expression is called with e.g. a closure X-Git-Tag: upstream/5.2.1~669^2~659^2~732 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5b870e94e855b0f3acdecf08b5467de5f683cf1e;p=platform%2Fupstream%2Fqtdeclarative.git Create a temp when a new expression is called with e.g. a closure Don't crash on e.g. var x = new (function() { return this; }) Change-Id: I120410b40ecda7fdc41e1dcc2c17251397143bc1 Reviewed-by: Simon Hausmann --- diff --git a/qv4codegen.cpp b/qv4codegen.cpp index 9555523..eefd3a3 100644 --- a/qv4codegen.cpp +++ b/qv4codegen.cpp @@ -1239,7 +1239,13 @@ bool Codegen::visit(NestedExpression *ast) 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; }