diff options
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/Slice/CsUtil.cpp | 22 | ||||
-rw-r--r-- | cpp/src/Slice/JavaUtil.cpp | 26 | ||||
-rwxr-xr-x | cpp/src/Slice/VbUtil.cpp | 21 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 160 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.h | 32 |
5 files changed, 252 insertions, 9 deletions
diff --git a/cpp/src/Slice/CsUtil.cpp b/cpp/src/Slice/CsUtil.cpp index f49af7c03ae..6951b96dfec 100755 --- a/cpp/src/Slice/CsUtil.cpp +++ b/cpp/src/Slice/CsUtil.cpp @@ -945,21 +945,36 @@ bool Slice::CsGenerator::MetaDataVisitor::visitClassDefStart(const ClassDefPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::CsGenerator::MetaDataVisitor::visitClassDefEnd(const ClassDefPtr&) +{ } bool Slice::CsGenerator::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::CsGenerator::MetaDataVisitor::visitExceptionEnd(const ExceptionPtr&) +{ } bool Slice::CsGenerator::MetaDataVisitor::visitStructStart(const StructPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::CsGenerator::MetaDataVisitor::visitStructEnd(const StructPtr&) +{ } void @@ -977,6 +992,7 @@ Slice::CsGenerator::MetaDataVisitor::visitParamDecl(const ParamDeclPtr& p) void Slice::CsGenerator::MetaDataVisitor::visitDataMember(const DataMemberPtr& p) { + cerr << "validating " << p->name() << endl; validate(p); } diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp index 5212e7784be..c11e889d3b1 100644 --- a/cpp/src/Slice/JavaUtil.cpp +++ b/cpp/src/Slice/JavaUtil.cpp @@ -2266,21 +2266,36 @@ bool Slice::JavaGenerator::MetaDataVisitor::visitClassDefStart(const ClassDefPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::JavaGenerator::MetaDataVisitor::visitClassDefEnd(const ClassDefPtr&) +{ } bool Slice::JavaGenerator::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::JavaGenerator::MetaDataVisitor::visitExceptionEnd(const ExceptionPtr&) +{ } bool Slice::JavaGenerator::MetaDataVisitor::visitStructStart(const StructPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::JavaGenerator::MetaDataVisitor::visitStructEnd(const StructPtr&) +{ } void @@ -2365,6 +2380,11 @@ Slice::JavaGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { cout << file << ": warning: ignoring invalid metadata `" << s << "'" << endl; } + if(SequencePtr::dynamicCast(cont)) + { + continue; + } + cout << file << ": warning: ignoring invalid metadata `" << s << "'" << endl; } _history.insert(s); } diff --git a/cpp/src/Slice/VbUtil.cpp b/cpp/src/Slice/VbUtil.cpp index dd9a688a35f..5e17fb464e3 100755 --- a/cpp/src/Slice/VbUtil.cpp +++ b/cpp/src/Slice/VbUtil.cpp @@ -994,21 +994,36 @@ bool Slice::VbGenerator::MetaDataVisitor::visitClassDefStart(const ClassDefPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::VbGenerator::MetaDataVisitor::visitClassDefEnd(const ClassDefPtr&) +{ } bool Slice::VbGenerator::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::VbGenerator::MetaDataVisitor::visitExceptionEnd(const ExceptionPtr&) +{ } bool Slice::VbGenerator::MetaDataVisitor::visitStructStart(const StructPtr& p) { validate(p); - return false; + return true; +} + +void +Slice::VbGenerator::MetaDataVisitor::visitStructEnd(const StructPtr&) +{ } void diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index eef081540e7..0e16a6e03be 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -161,6 +161,8 @@ Slice::Gen::operator!() const void Slice::Gen::generate(const UnitPtr& p) { + validateMetaData(p); + C << "\n#include <"; if(_include.size()) { @@ -4187,3 +4189,161 @@ Slice::Gen::AsyncImplVisitor::visitOperation(const OperationPtr& p) C << nl << "__exception();"; C << eb; } + +void +Slice::Gen::validateMetaData(const UnitPtr& unit) +{ + MetaDataVisitor visitor; + unit->visit(&visitor, false); +} + +bool +Slice::Gen::MetaDataVisitor::visitModuleStart(const ModulePtr& p) +{ + validate(p); + return true; +} + +void +Slice::Gen::MetaDataVisitor::visitModuleEnd(const ModulePtr&) +{ +} + +void +Slice::Gen::MetaDataVisitor::visitClassDecl(const ClassDeclPtr& p) +{ + validate(p); +} + +bool +Slice::Gen::MetaDataVisitor::visitClassDefStart(const ClassDefPtr& p) +{ + validate(p); + return true; +} + +void +Slice::Gen::MetaDataVisitor::visitClassDefEnd(const ClassDefPtr&) +{ +} + +bool +Slice::Gen::MetaDataVisitor::visitExceptionStart(const ExceptionPtr& p) +{ + validate(p); + return true; +} + +void +Slice::Gen::MetaDataVisitor::visitExceptionEnd(const ExceptionPtr&) +{ +} + +bool +Slice::Gen::MetaDataVisitor::visitStructStart(const StructPtr& p) +{ + validate(p); + return true; +} + +void +Slice::Gen::MetaDataVisitor::visitStructEnd(const StructPtr&) +{ +} + +void +Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p) +{ + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::visitParamDecl(const ParamDeclPtr& p) +{ + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::visitDataMember(const DataMemberPtr& p) +{ + cerr << "validating " << p->name() << endl; + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::visitSequence(const SequencePtr& p) +{ + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::visitDictionary(const DictionaryPtr& p) +{ + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::visitEnum(const EnumPtr& p) +{ + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::visitConst(const ConstPtr& p) +{ + validate(p); +} + +void +Slice::Gen::MetaDataVisitor::validate(const ContainedPtr& cont) +{ + DefinitionContextPtr dc = cont->definitionContext(); + assert(dc); + StringList globalMetaData = dc->getMetaData(); + string file = dc->filename(); + + StringList localMetaData = cont->getMetaData(); + + StringList::const_iterator p; + static const string prefix = "cpp:"; + + for(p = globalMetaData.begin(); p != globalMetaData.end(); ++p) + { + string s = *p; + if(_history.count(s) == 0) + { + if(s.find(prefix) == 0) + { + cout << file << ": warning: ignoring invalid global metadata `" << s << "'" << endl; + } + _history.insert(s); + } + } + + for(p = localMetaData.begin(); p != localMetaData.end(); ++p) + { + string s = *p; + if(_history.count(s) == 0) + { + if(s.find(prefix) == 0) + { + if(SequencePtr::dynamicCast(cont)) + { + if(s.substr(prefix.size()) == "collection") + { + continue; + } + } + if(StructPtr::dynamicCast(cont)) + { + if(s.substr(prefix.size()) == "class") + { + continue; + } + } + cout << file << ": warning: ignoring invalid metadata `" << s << "'" << endl; + } + _history.insert(s); + } + } +} diff --git a/cpp/src/slice2cpp/Gen.h b/cpp/src/slice2cpp/Gen.h index ae94d0fa835..6997df5313b 100644 --- a/cpp/src/slice2cpp/Gen.h +++ b/cpp/src/slice2cpp/Gen.h @@ -344,6 +344,38 @@ private: std::string _dllExport; }; + +private: + + class MetaDataVisitor : public ParserVisitor + { + public: + + virtual bool visitModuleStart(const ModulePtr&); + virtual void visitModuleEnd(const ModulePtr&); + virtual void visitClassDecl(const ClassDeclPtr&); + virtual bool visitClassDefStart(const ClassDefPtr&); + virtual void visitClassDefEnd(const ClassDefPtr&); + virtual bool visitExceptionStart(const ExceptionPtr&); + virtual void visitExceptionEnd(const ExceptionPtr&); + virtual bool visitStructStart(const StructPtr&); + virtual void visitStructEnd(const StructPtr&); + virtual void visitOperation(const OperationPtr&); + virtual void visitParamDecl(const ParamDeclPtr&); + virtual void visitDataMember(const DataMemberPtr&); + virtual void visitSequence(const SequencePtr&); + virtual void visitDictionary(const DictionaryPtr&); + virtual void visitEnum(const EnumPtr&); + virtual void visitConst(const ConstPtr&); + + private: + + void validate(const ContainedPtr&); + + StringSet _history; + }; + + static void validateMetaData(const UnitPtr&); }; } |