diff options
author | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2012-11-09 11:23:32 +0100 |
---|---|---|
committer | Thomas Hartmann <Thomas.Hartmann@digia.com> | 2012-11-21 13:58:58 +0100 |
commit | 6cf321a31681cfd4e8bf99958c444eb7e647510d (patch) | |
tree | cd77cb75adc28e92b04e9d37cc8731b0a7d9ada6 /src/libs/qmljs | |
parent | cb02dd812ac61e1890202f5118aa6bf5db40c659 (diff) | |
download | qt-creator-6cf321a31681cfd4e8bf99958c444eb7e647510d.tar.gz |
QmlJS:SimpleReader: adding support for arrays
Also adding test.
Change-Id: Idaf0aeacbb6f78e5c8404db740c2a8b7b297dad2
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
Diffstat (limited to 'src/libs/qmljs')
-rw-r--r-- | src/libs/qmljs/qmljssimplereader.cpp | 30 | ||||
-rw-r--r-- | src/libs/qmljs/qmljssimplereader.h | 3 |
2 files changed, 25 insertions, 8 deletions
diff --git a/src/libs/qmljs/qmljssimplereader.cpp b/src/libs/qmljs/qmljssimplereader.cpp index c7e2d5b677..c4d60673e9 100644 --- a/src/libs/qmljs/qmljssimplereader.cpp +++ b/src/libs/qmljs/qmljssimplereader.cpp @@ -232,12 +232,12 @@ void SimpleAbstractStreamReader::readProperty(AST::UiScriptBinding *uiScriptBind setSourceLocation(uiScriptBinding->firstSourceLocation()); const QString name = toString(uiScriptBinding->qualifiedId); - const QVariant value = parseProperty(uiScriptBinding); + const QVariant value = parsePropertyScriptBinding(uiScriptBinding); propertyDefinition(name, value); } -QVariant SimpleAbstractStreamReader::parseProperty(AST::UiScriptBinding *uiScriptBinding) +QVariant SimpleAbstractStreamReader::parsePropertyScriptBinding(AST::UiScriptBinding *uiScriptBinding) { Q_ASSERT(uiScriptBinding); @@ -247,23 +247,39 @@ QVariant SimpleAbstractStreamReader::parseProperty(AST::UiScriptBinding *uiScrip return QVariant(); } - AST::StringLiteral *stringLiteral = AST::cast<AST::StringLiteral *>(expStmt->expression); + return parsePropertyExpression(expStmt->expression); +} + +QVariant SimpleAbstractStreamReader::parsePropertyExpression(AST::ExpressionNode *expressionNode) +{ + Q_ASSERT(expressionNode); + + AST::ArrayLiteral *arrayLiteral = AST::cast<AST::ArrayLiteral *>(expressionNode); + + if (arrayLiteral) { + QList<QVariant> variantList; + for (AST::ElementList *it = arrayLiteral->elements; it; it = it->next) + variantList << parsePropertyExpression(it->expression); + return variantList; + } + + AST::StringLiteral *stringLiteral = AST::cast<AST::StringLiteral *>(expressionNode); if (stringLiteral) return stringLiteral->value.toString(); - AST::TrueLiteral *trueLiteral = AST::cast<AST::TrueLiteral *>(expStmt->expression); + AST::TrueLiteral *trueLiteral = AST::cast<AST::TrueLiteral *>(expressionNode); if (trueLiteral) return true; - AST::FalseLiteral *falseLiteral = AST::cast<AST::FalseLiteral *>(expStmt->expression); + AST::FalseLiteral *falseLiteral = AST::cast<AST::FalseLiteral *>(expressionNode); if (falseLiteral) return false; - AST::NumericLiteral *numericLiteral = AST::cast<AST::NumericLiteral *>(expStmt->expression); + AST::NumericLiteral *numericLiteral = AST::cast<AST::NumericLiteral *>(expressionNode); if (numericLiteral) return numericLiteral->value; - addError(tr("Expected expression statement to be a literal"), uiScriptBinding->statement->firstSourceLocation()); + addError(tr("Expected expression statement to be a literal"), expressionNode->firstSourceLocation()); return QVariant(); } diff --git a/src/libs/qmljs/qmljssimplereader.h b/src/libs/qmljs/qmljssimplereader.h index dd54335481..351b590326 100644 --- a/src/libs/qmljs/qmljssimplereader.h +++ b/src/libs/qmljs/qmljssimplereader.h @@ -102,7 +102,8 @@ private: void readChild(AST::UiObjectDefinition *uiObjectDefinition); void readProperties(AST::UiObjectDefinition *ast); void readProperty(AST::UiScriptBinding *uiScriptBinding); - QVariant parseProperty(AST::UiScriptBinding *ast); + QVariant parsePropertyScriptBinding(AST::UiScriptBinding *ExpressionNode); + QVariant parsePropertyExpression(AST::ExpressionNode *expressionNode); void setSourceLocation(const AST::SourceLocation &sourceLocation); QStringList m_errors; |