summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cs/Gen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/slice2cs/Gen.cpp')
-rw-r--r--cpp/src/slice2cs/Gen.cpp37
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;
}