aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2013-10-11 14:56:15 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-10-11 19:39:35 +0200
commit74a02a83809f6942732ec18125403e8ee32c574f (patch)
treea8fbfd235ea7dbf3674e8e59fcfb762b8b7a9944 /src/qml
parent6adb0693a2e408c388a0939e0a3d711da7b651df (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')
-rw-r--r--src/qml/compiler/qv4codegen.cpp11
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)