diff options
author | Michi Henning <michi@zeroc.com> | 2005-09-14 05:53:59 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2005-09-14 05:53:59 +0000 |
commit | dc121bb2cb79a3c72f51d8ac965a9a789e4f6f06 (patch) | |
tree | 94b8b02cea437b976d9bd242408d35b561319015 /cpp/src/Slice/CsUtil.cpp | |
parent | http://bugzilla.zeroc.com/bugzilla/show_bug.cgi?id=459 (diff) | |
download | ice-dc121bb2cb79a3c72f51d8ac965a9a789e4f6f06.tar.bz2 ice-dc121bb2cb79a3c72f51d8ac965a9a789e4f6f06.tar.xz ice-dc121bb2cb79a3c72f51d8ac965a9a789e4f6f06.zip |
Bug 454.
Diffstat (limited to 'cpp/src/Slice/CsUtil.cpp')
-rwxr-xr-x | cpp/src/Slice/CsUtil.cpp | 75 |
1 files changed, 57 insertions, 18 deletions
diff --git a/cpp/src/Slice/CsUtil.cpp b/cpp/src/Slice/CsUtil.cpp index 8edd505d628..2aa48cb64b9 100755 --- a/cpp/src/Slice/CsUtil.cpp +++ b/cpp/src/Slice/CsUtil.cpp @@ -963,13 +963,46 @@ void Slice::CsGenerator::validateMetaData(const UnitPtr& unit) { MetaDataVisitor visitor; - unit->visit(&visitor, false); + unit->visit(&visitor, true); +} + +Slice::CsGenerator::MetaDataVisitor::MetaDataVisitor() + : _globalMetaDataDone(false) +{ } bool Slice::CsGenerator::MetaDataVisitor::visitModuleStart(const ModulePtr& p) { - validate(p); + if(!_globalMetaDataDone) + { + // + // Validate global metadata. + // + DefinitionContextPtr dc = p->definitionContext(); + assert(dc); + StringList globalMetaData = dc->getMetaData(); + string file = dc->filename(); + static const string prefix = "cs:"; + for(StringList::const_iterator q = globalMetaData.begin(); q != globalMetaData.end(); ++q) + { + string s = *q; + if(_history.count(s) == 0) + { + if(s.find(prefix) == 0) + { + static const string attributePrefix = "cs:attribute:"; + if(s.find(attributePrefix) != 0 || s.size() == attributePrefix.size()) + { + cout << file << ": warning: ignoring invalid global metadata `" << s << "'" << endl; + } + } + _history.insert(s); + } + } + _globalMetaDataDone = true; + validate(p); + } return true; } @@ -1067,30 +1100,16 @@ Slice::CsGenerator::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 = "clr:"; - - 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(s.find("cs:") == 0) // TODO: remove this statement once "cs:" is a hard error. { if(SequencePtr::dynamicCast(cont)) @@ -1108,14 +1127,20 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { cout << file << ":" << cont->line() << ": warning: `cs:' metadata prefix is deprecated; " << "use `clr:' instead" << endl; + cont->addMetaData("clr:class"); } - cont->addMetaData("clr:class"); + } + else if(s.find("cs:attribute:") == 0) + { + ; // Do nothing, "cs:attribute:" is OK } else { cout << file << ":" << cont->line() << ": warning: ignoring invalid metadata `" << s << "'" << endl; } } // End TODO + + string prefix = "clr:"; if(_history.count(s) == 0) { if(s.find(prefix) == 0) @@ -1138,5 +1163,19 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) } _history.insert(s); } + + prefix = "cs:"; + if(_history.count(s) == 0) + { + if(s.find(prefix) == 0) + { + if(s.substr(prefix.size()) == "attribute:") + { + continue; + } + cout << file << ":" << cont->line() << ": warning: ignoring invalid metadata `" << s << "'" << endl; + } + _history.insert(s); + } } } |