diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-10-11 14:56:15 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-10-11 19:39:35 +0200 |
commit | 74a02a83809f6942732ec18125403e8ee32c574f (patch) | |
tree | a8fbfd235ea7dbf3674e8e59fcfb762b8b7a9944 /src/qml/compiler/qv4codegen.cpp | |
parent | 6adb0693a2e408c388a0939e0a3d711da7b651df (diff) |
Fix failing assertion (index != -1) when trying to re-declare a function parameter
Testcase: (covered in parserstress)
function foo(x) {
var x = 42;
}
In variableDeclaration, the lookup for "x" with findMember will return -1, and
instead code for checking against arguments using indexOfArgument is needed.
The easiest fix is to simply use identifier(), which handles this accordingly.
Change-Id: I6a738d6196d4bff1fc987f111aebbaa83ed8f88f
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/qml/compiler/qv4codegen.cpp')
-rw-r--r-- | src/qml/compiler/qv4codegen.cpp | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp index 1f1ed42530..c5f841b52f 100644 --- a/src/qml/compiler/qv4codegen.cpp +++ b/src/qml/compiler/qv4codegen.cpp @@ -804,14 +804,9 @@ void Codegen::variableDeclaration(VariableDeclaration *ast) assert(expr.code); initializer = *expr; - if (! _env->parent || _function->insideWithOrCatch || _env->compilationMode == QmlBinding) { - // it's global code. - move(_block->NAME(ast->name.toString(), ast->identifierToken.startLine, ast->identifierToken.startColumn), initializer); - } else { - const int index = _env->findMember(ast->name.toString()); - assert(index != -1); - move(_block->LOCAL(index, 0), initializer); - } + int initialized = _block->newTemp(); + move(_block->TEMP(initialized), initializer); + move(identifier(ast->name.toString(), ast->identifierToken.startLine, ast->identifierToken.startColumn), _block->TEMP(initialized)); } void Codegen::variableDeclarationList(VariableDeclarationList *ast) |