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>
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)