diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 601a373ae34980cc848ed6eeab42fdf7c6d41b38..71257250e2ac392033ac140e41b335fc6d0b47a9 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -139,12 +139,15 @@ public: const SourceLocation &location, const Value *lhsValue, const Value *rhsValue, - ExpressionNode *ast) + Node *ast) { _doc = document; _message = DiagnosticMessage(DiagnosticMessage::Error, location, QString()); _rhsValue = rhsValue; - _ast = ast; + if (ExpressionStatement *expStmt = cast<ExpressionStatement *>(ast)) + _ast = expStmt->expression; + else + _ast = ast->expressionCast(); if (lhsValue) lhsValue->accept(this); @@ -166,9 +169,8 @@ public: _message.message = Check::tr("enum value is not a string or number"); } } else { - if (/*cast<StringLiteral *>(_ast) - ||*/ _ast->kind == Node::Kind_TrueLiteral - || _ast->kind == Node::Kind_FalseLiteral) { + if (cast<TrueLiteral *>(_ast) + || cast<FalseLiteral *>(_ast)) { _message.message = Check::tr("numerical value expected"); } } @@ -191,8 +193,8 @@ public: if (cast<NumericLiteral *>(_ast) || (unaryMinus && cast<NumericLiteral *>(unaryMinus->expression)) - || _ast->kind == Node::Kind_TrueLiteral - || _ast->kind == Node::Kind_FalseLiteral) { + || cast<TrueLiteral *>(_ast) + || cast<FalseLiteral *>(_ast)) { _message.message = Check::tr("string value expected"); } @@ -593,23 +595,20 @@ bool Check::visit(UiScriptBinding *ast) checkProperty(ast->qualifiedId); + if (!ast->statement) + return false; + const Value *lhsValue = checkScopeObjectMember(ast->qualifiedId); if (lhsValue) { - // ### Fix the evaluator to accept statements! - if (ExpressionStatement *expStmt = cast<ExpressionStatement *>(ast->statement)) { - ExpressionNode *expr = expStmt->expression; - - Evaluate evaluator(&_scopeChain); - const Value *rhsValue = evaluator(expr); - - const SourceLocation loc = locationFromRange(expStmt->firstSourceLocation(), - expStmt->lastSourceLocation()); - AssignmentCheck assignmentCheck; - DiagnosticMessage message = assignmentCheck(_doc, loc, lhsValue, rhsValue, expr); - if (! message.message.isEmpty()) - _messages += message; - } + Evaluate evaluator(&_scopeChain); + const Value *rhsValue = evaluator(ast->statement); + const SourceLocation loc = locationFromRange(ast->statement->firstSourceLocation(), + ast->statement->lastSourceLocation()); + AssignmentCheck assignmentCheck; + DiagnosticMessage message = assignmentCheck(_doc, loc, lhsValue, rhsValue, ast->statement); + if (! message.message.isEmpty()) + _messages += message; } if (Block *block = cast<Block *>(ast->statement)) {