diff options
Diffstat (limited to 'src/qml/compiler')
-rw-r--r-- | src/qml/compiler/qv4compilerscanfunctions.cpp | 14 | ||||
-rw-r--r-- | src/qml/compiler/qv4compilerscanfunctions_p.h | 2 |
2 files changed, 10 insertions, 6 deletions
diff --git a/src/qml/compiler/qv4compilerscanfunctions.cpp b/src/qml/compiler/qv4compilerscanfunctions.cpp index 6a9b064bd8..808e79959d 100644 --- a/src/qml/compiler/qv4compilerscanfunctions.cpp +++ b/src/qml/compiler/qv4compilerscanfunctions.cpp @@ -130,13 +130,15 @@ void ScanFunctions::checkName(const QStringRef &name, const SourceLocation &loc) } } } -void ScanFunctions::checkForArguments(AST::FormalParameterList *parameters) + +bool ScanFunctions::formalsContainName(AST::FormalParameterList *parameters, const QString &name) { while (parameters) { - if (parameters->name == QLatin1String("arguments")) - _context->usesArgumentsObject = Context::ArgumentsObjectNotUsed; + if (parameters->name == name) + return true; parameters = parameters->next; } + return false; } bool ScanFunctions::visit(Program *ast) @@ -398,9 +400,11 @@ void ScanFunctions::enterFunction(Node *ast, const QString &name, FormalParamete } enterEnvironment(ast, FunctionCode); - checkForArguments(formals); + if (formalsContainName(formals, QStringLiteral("arguments"))) + _context->usesArgumentsObject = Context::ArgumentsObjectNotUsed; + - if (!name.isEmpty()) + if (!name.isEmpty() && !formalsContainName(formals, name)) _context->addLocalVar(name, Context::ThisFunctionName, QQmlJS::AST::VariableDeclaration::FunctionScope); _context->formals = formals; diff --git a/src/qml/compiler/qv4compilerscanfunctions_p.h b/src/qml/compiler/qv4compilerscanfunctions_p.h index 0b898e587d..526278fdd8 100644 --- a/src/qml/compiler/qv4compilerscanfunctions_p.h +++ b/src/qml/compiler/qv4compilerscanfunctions_p.h @@ -100,7 +100,7 @@ protected: void checkDirectivePrologue(AST::SourceElements *ast); void checkName(const QStringRef &name, const AST::SourceLocation &loc); - void checkForArguments(AST::FormalParameterList *parameters); + bool formalsContainName(AST::FormalParameterList *parameters, const QString &name); bool visit(AST::Program *ast) override; void endVisit(AST::Program *) override; |