summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp/Gen.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2006-02-09 13:46:29 +0000
committerDwayne Boone <dwayne@zeroc.com>2006-02-09 13:46:29 +0000
commit70a31bfd6d76baf43d2927c9b8e1962545624a86 (patch)
treecddd24c7ab8c9dcb7ae1e6eb95678dfcaaba38ad /cpp/src/slice2cpp/Gen.cpp
parentWorkaround for Sun compiler issues (diff)
downloadice-70a31bfd6d76baf43d2927c9b8e1962545624a86.tar.bz2
ice-70a31bfd6d76baf43d2927c9b8e1962545624a86.tar.xz
ice-70a31bfd6d76baf43d2927c9b8e1962545624a86.zip
Use metadata to specify includes
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index 97718dd9328..94c99dc646c 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -250,6 +250,9 @@ Slice::Gen::generate(const UnitPtr& p)
H << "\n#include <Ice/UndefSysMacros.h>";
+ GlobalIncludeVisitor globalIncludeVisitor(H);
+ p->visit(&globalIncludeVisitor, false);
+
printVersionCheck(H);
printVersionCheck(C);
@@ -374,6 +377,36 @@ Slice::Gen::writeExtraHeaders(IceUtil::Output& out)
}
}
+Slice::Gen::GlobalIncludeVisitor::GlobalIncludeVisitor(Output& h) :
+ H(h), _finished(false)
+{
+}
+
+bool
+Slice::Gen::GlobalIncludeVisitor::visitModuleStart(const ModulePtr& p)
+{
+ if(!_finished)
+ {
+ DefinitionContextPtr dc = p->definitionContext();
+ assert(dc);
+ StringList globalMetaData = dc->getMetaData();
+
+ static const string includePrefix = "cpp:include:";
+
+ for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q)
+ {
+ string s = *q;
+ if(s.find(includePrefix) == 0)
+ {
+ H << nl << "#include <" << s.substr(includePrefix.size()) << ">";
+ }
+ }
+ _finished = true;
+ }
+
+ return false;
+}
+
Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport, bool stream) :
H(h), C(c), _dllExport(dllExport), _stream(stream), _doneStaticSymbol(false)
{
@@ -4702,6 +4735,11 @@ Slice::Gen::MetaDataVisitor::visitModuleStart(const ModulePtr& p)
{
if(s.find(prefix) == 0)
{
+ string ss = s.substr(prefix.size());
+ if(ss.find("include:") == 0)
+ {
+ continue;
+ }
cout << file << ": warning: ignoring invalid global metadata `" << s << "'" << endl;
}
_history.insert(s);