From 5b8d7b465c6d823a9d664356bc6cbcd6940133e1 Mon Sep 17 00:00:00 2001 From: Christian Kamm <christian.d.kamm@nokia.com> Date: Tue, 6 Sep 2011 13:59:50 +0200 Subject: [PATCH] QmlJS checks: Fix collection of use-before-declaration warnings. Previously they would not be collected if the var had a duplicate-declaration warning. Change-Id: I82244e911fcdfc3d11cc391288da263ee288a3ca Reviewed-on: http://codereview.qt-project.org/4330 Reviewed-by: Fawzi Mohamed <fawzi.mohamed@nokia.com> --- src/libs/qmljs/qmljscheck.cpp | 38 ++++++++++++----------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index c4eeefa5836..dec32a42345 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -243,7 +243,7 @@ public: ExpressionNode *_ast; }; -class FunctionBodyCheck : protected Visitor +class DeclarationsCheck : protected Visitor { public: QList<DiagnosticMessage> operator()(FunctionExpression *function, Check::Options options) @@ -310,20 +310,14 @@ protected: return true; const QString name = ast->name->asString(); - if (_formalParameterNames.contains(name)) { - if (_options & Check::WarnDuplicateDeclaration) + if (_options & Check::WarnDuplicateDeclaration) { + if (_formalParameterNames.contains(name)) { warning(ast->identifierToken, Check::tr("already a formal parameter")); - return true; - } - if (_declaredFunctions.contains(name)) { - if (_options & Check::WarnDuplicateDeclaration) + } else if (_declaredFunctions.contains(name)) { warning(ast->identifierToken, Check::tr("already declared as function")); - return true; - } - if (_declaredVariables.contains(name)) { - if (_options & Check::WarnDuplicateDeclaration) + } else if (_declaredVariables.contains(name)) { warning(ast->identifierToken, Check::tr("duplicate declaration")); - return true; + } } if (_possiblyUndeclaredUses.contains(name)) { @@ -354,20 +348,14 @@ protected: return false; const QString name = ast->name->asString(); - if (_formalParameterNames.contains(name)) { - if (_options & Check::WarnDuplicateDeclaration) + if (_options & Check::WarnDuplicateDeclaration) { + if (_formalParameterNames.contains(name)) { warning(ast->identifierToken, Check::tr("already a formal parameter")); - return false; - } - if (_declaredVariables.contains(name)) { - if (_options & Check::WarnDuplicateDeclaration) + } else if (_declaredVariables.contains(name)) { warning(ast->identifierToken, Check::tr("already declared as var")); - return false; - } - if (_declaredFunctions.contains(name)) { - if (_options & Check::WarnDuplicateDeclaration) + } else if (_declaredFunctions.contains(name)) { warning(ast->identifierToken, Check::tr("duplicate declaration")); - return false; + } } if (FunctionDeclaration *decl = cast<FunctionDeclaration *>(ast)) { @@ -614,7 +602,7 @@ bool Check::visit(UiScriptBinding *ast) } if (Block *block = cast<Block *>(ast->statement)) { - FunctionBodyCheck bodyCheck; + DeclarationsCheck bodyCheck; _messages.append(bodyCheck(block->statements, _options)); Node::accept(ast->qualifiedId, this); _scopeBuilder.push(ast); @@ -697,7 +685,7 @@ bool Check::visit(FunctionDeclaration *ast) bool Check::visit(FunctionExpression *ast) { - FunctionBodyCheck bodyCheck; + DeclarationsCheck bodyCheck; _messages.append(bodyCheck(ast, _options)); Node::accept(ast->formals, this); -- GitLab