diff options
-rw-r--r-- | slicer/slicer/parser.cpp | 17 | ||||
-rw-r--r-- | slicer/slicer/parser.h | 1 |
2 files changed, 14 insertions, 4 deletions
diff --git a/slicer/slicer/parser.cpp b/slicer/slicer/parser.cpp index b8f3f89..7cd45f1 100644 --- a/slicer/slicer/parser.cpp +++ b/slicer/slicer/parser.cpp @@ -123,6 +123,15 @@ namespace Slicer { return true; } + + void + Slicer::defineRootName(const std::string & type, const std::string & name) const + { + fprintf(cpp, "template<>\n"); + fprintf(cpp, "std::string ModelPartForRoot< %s >::rootName(\"%s\");\n\n", + type.c_str(), name.c_str()); + } + bool Slicer::visitClassDefStart(const Slice::ClassDefPtr & c) { @@ -143,11 +152,8 @@ namespace Slicer { typeToString(decl).c_str(), typeId ? typeId->c_str() : "slicer-typeid"); - fprintf(cpp, "template<>\n"); auto name = metaDataValue("slicer:root:", c->getMetaData()); - fprintf(cpp, "std::string ModelPartForRoot< %s >::rootName(\"%s\");\n\n", - typeToString(decl).c_str(), - name ? name->c_str() : c->name().c_str()); + defineRootName(typeToString(decl), name ? *name : c->name()); auto typeName = metaDataValue("slicer:typename:", c->getMetaData()); fprintf(cpp, "static void registerClass_%u() __attribute__ ((constructor(210)));\n", classNo); @@ -314,6 +320,9 @@ namespace Slicer { s->scoped().c_str(), ename ? ename->c_str() : "element"); + auto name = metaDataValue("slicer:root:", s->getMetaData()); + defineRootName(s->scoped(), name ? *name : s->name()); + fprintf(cpp, "template<>\nMetadata ModelPartForSequence< %s >::metadata ", s->scoped().c_str()); copyMetadata(s->getMetaData()); diff --git a/slicer/slicer/parser.h b/slicer/slicer/parser.h index 7965b4b..6253cf5 100644 --- a/slicer/slicer/parser.h +++ b/slicer/slicer/parser.h @@ -47,6 +47,7 @@ namespace Slicer { void visitComplexDataMembers(Slice::ConstructedPtr t, const Slice::DataMemberList &) const; void defineConversions(Slice::DataMemberPtr dm) const; + void defineRootName(const std::string & type, const std::string & name) const; void copyMetadata(const std::list<std::string> & metadata) const; static Conversions getAllConversions(Slice::DataMemberPtr dm); |