diff options
Diffstat (limited to 'cpp/src/slice2cs/Gen.cpp')
-rw-r--r-- | cpp/src/slice2cs/Gen.cpp | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/cpp/src/slice2cs/Gen.cpp b/cpp/src/slice2cs/Gen.cpp index e6e7748513b..0fe57340a13 100644 --- a/cpp/src/slice2cs/Gen.cpp +++ b/cpp/src/slice2cs/Gen.cpp @@ -1143,7 +1143,7 @@ Slice::Gen::generate(const UnitPtr& p) { CsGenerator::validateMetaData(p); - UnitVisitor unitVisitor(_out, _stream); + UnitVisitor unitVisitor(_out); p->visit(&unitVisitor, false); TypesVisitor typesVisitor(_out, _stream); @@ -1263,35 +1263,34 @@ Slice::Gen::printHeader() _out << "\n// Ice version " << ICE_STRING_VERSION; } -Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out, bool stream) - : CsVisitor(out), _stream(stream), _globalMetaDataDone(false) +Slice::Gen::UnitVisitor::UnitVisitor(IceUtilInternal::Output& out) + : CsVisitor(out) { } bool -Slice::Gen::UnitVisitor::visitModuleStart(const ModulePtr& p) +Slice::Gen::UnitVisitor::visitUnitStart(const UnitPtr& p) { - if(!_globalMetaDataDone) - { - DefinitionContextPtr dc = p->definitionContext(); - StringList globalMetaData = dc->getMetaData(); + DefinitionContextPtr dc = p->findDefinitionContext(p->topLevelFile()); + assert(dc); + StringList globalMetaData = dc->getMetaData(); - static const string attributePrefix = "cs:attribute:"; + static const string attributePrefix = "cs:attribute:"; - if(!globalMetaData.empty()) - { - _out << sp; - } - for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q) + bool sep = false; + for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q) + { + string::size_type pos = q->find(attributePrefix); + if(pos == 0 && q->size() > attributePrefix.size()) { - string::size_type pos = q->find(attributePrefix); - if(pos == 0) + if(!sep) { - string attrib = q->substr(pos + attributePrefix.size()); - _out << nl << '[' << attrib << ']'; + _out << sp; + sep = true; } + string attrib = q->substr(pos + attributePrefix.size()); + _out << nl << '[' << attrib << ']'; } - _globalMetaDataDone = true; // Do this only once per source file. } return false; } |