diff options
author | Jarek Kobus <jaroslaw.kobus@theqtcompany.com> | 2016-07-26 17:37:37 +0200 |
---|---|---|
committer | Jarek Kobus <jaroslaw.kobus@qt.io> | 2016-07-28 08:02:20 +0000 |
commit | f2106487b72a0b1b14d3bce4ebec3a7dd548b400 (patch) | |
tree | 4a067c930dfd29cb74ff21ec3e299902aa573900 /tools | |
parent | 1b002a4aa4ef2eaf863e6d036ca92da2305a8bfd (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.cpp | 25 | ||||
-rw-r--r-- | tools/qscxmlc/scxmlcppdumper.cpp | 9 | ||||
-rw-r--r-- | tools/qscxmlc/scxmlcppdumper.h | 8 |
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 |