diff options
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 37d0a42a8b8..eab9a81b8cb 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -978,6 +978,7 @@ Slice::Gen::generate(const UnitPtr& p) { string md = *q++; static const string includePrefix = "cpp:include:"; + static const string sourceIncludePrefix = "cpp:source-include:"; if(md.find(includePrefix) == 0) { if(md.size() > includePrefix.size()) @@ -992,6 +993,20 @@ Slice::Gen::generate(const UnitPtr& p) globalMetaData.remove(md); } } + else if(md.find(sourceIncludePrefix) == 0) + { + if(md.size() > sourceIncludePrefix.size()) + { + C << nl << "#include <" << md.substr(sourceIncludePrefix.size()) << ">"; + } + else + { + ostringstream ostr; + ostr << "ignoring invalid global metadata `" << md << "'"; + dc->warning(InvalidMetaData, file, -1, ostr.str()); + globalMetaData.remove(md); + } + } } dc->setMetaData(globalMetaData); } @@ -5371,6 +5386,7 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) if(s.find(prefix) == 0) { static const string cppIncludePrefix = "cpp:include:"; + static const string cppSourceIncludePrefix = "cpp:source-include"; static const string cppHeaderExtPrefix = "cpp:header-ext:"; static const string cppSourceExtPrefix = "cpp:source-ext:"; static const string cppDllExportPrefix = "cpp:dll-export:"; @@ -5380,6 +5396,10 @@ Slice::Gen::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { continue; } + else if(s.find(cppSourceIncludePrefix) == 0 && s.size() > cppSourceIncludePrefix.size()) + { + continue; + } else if(s.find(cppHeaderExtPrefix) == 0 && s.size() > cppHeaderExtPrefix.size()) { headerExtension++; |