summaryrefslogtreecommitdiff
path: root/src/libs/qmljs
diff options
context:
space:
mode:
authorThomas Hartmann <Thomas.Hartmann@digia.com>2012-11-09 11:23:32 +0100
committerThomas Hartmann <Thomas.Hartmann@digia.com>2012-11-21 13:58:58 +0100
commit6cf321a31681cfd4e8bf99958c444eb7e647510d (patch)
treecd77cb75adc28e92b04e9d37cc8731b0a7d9ada6 /src/libs/qmljs
parentcb02dd812ac61e1890202f5118aa6bf5db40c659 (diff)
downloadqt-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.cpp30
-rw-r--r--src/libs/qmljs/qmljssimplereader.h3
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;