summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorJarek Kobus <jaroslaw.kobus@theqtcompany.com>2016-07-26 17:37:37 +0200
committerJarek Kobus <jaroslaw.kobus@qt.io>2016-07-28 08:02:20 +0000
commitf2106487b72a0b1b14d3bce4ebec3a7dd548b400 (patch)
tree4a067c930dfd29cb74ff21ec3e299902aa573900 /tools
parent1b002a4aa4ef2eaf863e6d036ca92da2305a8bfd (diff)
Ensure sub machines are generated always in the same order
Change-Id: I116af61b6843d4e6e6877d77be662cd9828ef8ba Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'tools')
-rw-r--r--tools/qscxmlc/qscxmlc.cpp25
-rw-r--r--tools/qscxmlc/scxmlcppdumper.cpp9
-rw-r--r--tools/qscxmlc/scxmlcppdumper.h8
3 files changed, 20 insertions, 22 deletions
diff --git a/tools/qscxmlc/qscxmlc.cpp b/tools/qscxmlc/qscxmlc.cpp
index d362b25..2198592 100644
--- a/tools/qscxmlc/qscxmlc.cpp
+++ b/tools/qscxmlc/qscxmlc.cpp
@@ -89,12 +89,12 @@ int write(TranslationUnit *tu)
return NoError;
}
-static void collectAllDocuments(DocumentModel::ScxmlDocument *doc, QMap<DocumentModel::ScxmlDocument *, QString> *docs)
+static void collectAllDocuments(DocumentModel::ScxmlDocument *doc,
+ QList<DocumentModel::ScxmlDocument *> *docs)
{
- docs->insert(doc, doc->root->name);
- foreach (DocumentModel::ScxmlDocument *subDoc, doc->allSubDocuments) {
+ docs->append(doc);
+ foreach (DocumentModel::ScxmlDocument *subDoc, doc->allSubDocuments)
collectAllDocuments(subDoc, docs);
- }
}
int run(const QStringList &arguments)
@@ -217,8 +217,6 @@ int run(const QStringList &arguments)
return ScxmlVerificationError;
}
- QMap<DocumentModel::ScxmlDocument *, QString> docs;
- collectAllDocuments(mainDoc, &docs);
if (mainClassName.isEmpty())
mainClassName = mainDoc->root->name;
if (mainClassName.isEmpty()) {
@@ -227,15 +225,22 @@ int run(const QStringList &arguments)
if (dot != -1)
mainClassName = mainClassName.left(dot);
}
- docs.insert(mainDoc, mainClassName);
+
+ QList<DocumentModel::ScxmlDocument *> docs;
+ collectAllDocuments(mainDoc, &docs);
TranslationUnit tu = options;
+ tu.allDocuments = docs;
tu.scxmlFileName = QFileInfo(file).fileName();
tu.mainDocument = mainDoc;
tu.outHFileName = outHFileName;
tu.outCppFileName = outCppFileName;
- for (QMap<DocumentModel::ScxmlDocument *, QString>::const_iterator i = docs.begin(), ei = docs.end(); i != ei; ++i) {
- auto name = i.value();
+ tu.classnameForDocument.insert(mainDoc, mainClassName);
+
+ docs.pop_front();
+
+ foreach (DocumentModel::ScxmlDocument *doc, docs) {
+ auto name = doc->root->name;
auto prefix = name;
if (name.isEmpty()) {
prefix = QStringLiteral("%1_StateMachine").arg(mainClassName);
@@ -246,7 +251,7 @@ int run(const QStringList &arguments)
while (tu.classnameForDocument.key(name) != nullptr)
name = QStringLiteral("%1_%2").arg(prefix).arg(++counter);
- tu.classnameForDocument.insert(i.key(), name);
+ tu.classnameForDocument.insert(doc, name);
}
return write(&tu);
diff --git a/tools/qscxmlc/scxmlcppdumper.cpp b/tools/qscxmlc/scxmlcppdumper.cpp
index 3446e4d..a22089e 100644
--- a/tools/qscxmlc/scxmlcppdumper.cpp
+++ b/tools/qscxmlc/scxmlcppdumper.cpp
@@ -439,13 +439,12 @@ void CppDumper::dump(TranslationUnit *unit)
QVector<GeneratedTableData::MetaDataInfo> metaDataInfos;
QVector<GeneratedTableData::DataModelInfo> dataModelInfos;
QVector<QStringList> factories;
- auto docs = m_translationUnit->otherDocuments();
- docs.prepend(unit->mainDocument);
+ auto docs = m_translationUnit->allDocuments;
tables.resize(docs.size());
metaDataInfos.resize(tables.size());
dataModelInfos.resize(tables.size());
factories.resize(tables.size());
- auto classnameForDocument = unit->classnameForDocument;
+ auto classnameForDocument = m_translationUnit->classnameForDocument;
for (int i = 0, ei = docs.size(); i != ei; ++i) {
auto doc = docs.at(i);
@@ -474,7 +473,7 @@ void CppDumper::dump(TranslationUnit *unit)
std::sort(metaDataInfo->outgoingEvents.begin(), metaDataInfo->outgoingEvents.end());
}
- const QString headerName = QFileInfo(unit->outHFileName).fileName();
+ const QString headerName = QFileInfo(m_translationUnit->outHFileName).fileName();
const QString headerGuard = headerName.toUpper()
.replace(QLatin1Char('.'), QLatin1Char('_'))
.replace(QLatin1Char('-'), QLatin1Char('_'));
@@ -560,7 +559,7 @@ void CppDumper::writeImplStart()
<< endl;
QStringList includes;
- foreach (DocumentModel::ScxmlDocument *doc, m_translationUnit->classnameForDocument.keys()) {
+ foreach (DocumentModel::ScxmlDocument *doc, m_translationUnit->allDocuments) {
switch (doc->root->dataModel) {
case DocumentModel::Scxml::NullDataModel:
includes += l("QScxmlNullDataModel");
diff --git a/tools/qscxmlc/scxmlcppdumper.h b/tools/qscxmlc/scxmlcppdumper.h
index 5391fa7..981499f 100644
--- a/tools/qscxmlc/scxmlcppdumper.h
+++ b/tools/qscxmlc/scxmlcppdumper.h
@@ -50,15 +50,9 @@ struct TranslationUnit
QString namespaceName;
bool useCxx11;
DocumentModel::ScxmlDocument *mainDocument;
+ QList<DocumentModel::ScxmlDocument *> allDocuments;
QHash<DocumentModel::ScxmlDocument *, QString> classnameForDocument;
QList<TranslationUnit *> dependencies;
-
- QList<DocumentModel::ScxmlDocument *> otherDocuments() const
- {
- auto docs = classnameForDocument.keys();
- docs.removeOne(mainDocument);
- return docs;
- }
};
class CppDumper