summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-10-08 14:55:44 +0200
committerLiang Qi <liang.qi@theqtcompany.com>2015-10-08 14:55:44 +0200
commit688b29fc5aeab0eafbb457a0fa6953856eeac928 (patch)
tree8093e8a4229b89193297ada0ebfc8ab80d8ab2e0 /src
parent32d682e86a6fff968bc08d4303e31c7a8610ee60 (diff)
parent3338de7bbe76bac44652c525003bc66b14ef16d4 (diff)
downloadqtxmlpatterns-688b29fc5aeab0eafbb457a0fa6953856eeac928.tar.gz
Merge remote-tracking branch 'origin/5.5' into 5.6
Change-Id: I9a379d34bf80344de9b6e9465e6f35fca7fd1a12
Diffstat (limited to 'src')
-rw-r--r--src/xmlpatterns/expr/qexpression_p.h7
-rw-r--r--src/xmlpatterns/expr/qexpressionsequence.cpp9
-rw-r--r--src/xmlpatterns/expr/qliteralsequence.cpp2
3 files changed, 16 insertions, 2 deletions
diff --git a/src/xmlpatterns/expr/qexpression_p.h b/src/xmlpatterns/expr/qexpression_p.h
index c799725..7a7899f 100644
--- a/src/xmlpatterns/expr/qexpression_p.h
+++ b/src/xmlpatterns/expr/qexpression_p.h
@@ -375,11 +375,16 @@ namespace QPatternist
IDExistsFN,
/**
- * Identifies ExpressionSequence and LiteralSequence.
+ * Identifies ExpressionSequence.
*/
IDExpressionSequence,
/**
+ * Identifies LiteralSequence.
+ */
+ IDLiteralSequence,
+
+ /**
* Identifies GeneralComparison.
*/
IDGeneralComparison,
diff --git a/src/xmlpatterns/expr/qexpressionsequence.cpp b/src/xmlpatterns/expr/qexpressionsequence.cpp
index 4ff8082..c71beb9 100644
--- a/src/xmlpatterns/expr/qexpressionsequence.cpp
+++ b/src/xmlpatterns/expr/qexpressionsequence.cpp
@@ -34,6 +34,8 @@
#include "qcardinalityverifier_p.h"
#include "qcommonsequencetypes_p.h"
#include "qemptysequence_p.h"
+#include "qabstractxmlforwarditerator_p.h"
+#include "qliteral_p.h"
#include "qsequencemappingiterator_p.h"
#include "qexpressionsequence_p.h"
@@ -106,6 +108,13 @@ Expression::Ptr ExpressionSequence::compress(const StaticContext::Ptr &context)
for(; seqIt != seqEnd; ++seqIt)
result.append(*seqIt);
+ } else if (Id == IDLiteralSequence) {
+ /* Rewrite "(1, (2, 3), 4)" into "(1, 2, 3, 4)" */
+ // Note: LiteralSequence does not use the dynamic context, so we pass in a nullptr.
+ Item::Iterator::Ptr seqIt = (*it)->evaluateSequence(DynamicContext::Ptr(Q_NULLPTR));
+
+ while (!seqIt->next().isNull())
+ result.append(Literal::Ptr(new Literal(seqIt->current())));
}
else
result.append(*it);
diff --git a/src/xmlpatterns/expr/qliteralsequence.cpp b/src/xmlpatterns/expr/qliteralsequence.cpp
index e0b610d..8c920d3 100644
--- a/src/xmlpatterns/expr/qliteralsequence.cpp
+++ b/src/xmlpatterns/expr/qliteralsequence.cpp
@@ -73,7 +73,7 @@ ExpressionVisitorResult::Ptr LiteralSequence::accept(const ExpressionVisitor::Pt
Expression::ID LiteralSequence::id() const
{
- return IDExpressionSequence;
+ return IDLiteralSequence;
}
Expression::Properties LiteralSequence::properties() const