OSDN Git Service

JS checks: Check code block script bindings for common errors.
authorChristian Kamm <christian.d.kamm@nokia.com>
Mon, 6 Dec 2010 09:03:53 +0000 (10:03 +0100)
committerChristian Kamm <christian.d.kamm@nokia.com>
Mon, 6 Dec 2010 09:58:58 +0000 (10:58 +0100)
Reviewed-by: Erik Verbruggen
src/libs/qmljs/qmljscheck.cpp

index ce75d41..a144597 100644 (file)
@@ -191,14 +191,8 @@ class FunctionBodyCheck : protected Visitor
 public:
     QList<DiagnosticMessage> operator()(FunctionExpression *function, Check::Options options)
     {
+        clear();
         _options = options;
-        _messages.clear();
-        _declaredFunctions.clear();
-        _declaredVariables.clear();
-        _possiblyUndeclaredUses.clear();
-        _seenNonDeclarationStatement = false;
-
-        _formalParameterNames.clear();
         for (FormalParameterList *plist = function->formals; plist; plist = plist->next) {
             if (plist->name)
                 _formalParameterNames += plist->name->asString();
@@ -208,7 +202,25 @@ public:
         return _messages;
     }
 
+    QList<DiagnosticMessage> operator()(StatementList *statements, Check::Options options)
+    {
+        clear();
+        _options = options;
+        Node::accept(statements, this);
+        return _messages;
+    }
+
 protected:
+    void clear()
+    {
+        _messages.clear();
+        _declaredFunctions.clear();
+        _declaredVariables.clear();
+        _possiblyUndeclaredUses.clear();
+        _seenNonDeclarationStatement = false;
+        _formalParameterNames.clear();
+    }
+
     void postVisit(Node *ast)
     {
         if (!_seenNonDeclarationStatement && ast->statementCast()
@@ -470,6 +482,11 @@ bool Check::visit(UiScriptBinding *ast)
 
     }
 
+    if (Block *block = cast<Block *>(ast->statement)) {
+        FunctionBodyCheck bodyCheck;
+        _messages.append(bodyCheck(block->statements, _options));
+    }
+
     return true;
 }