void Slice::ObjCGenerator::MetaDataVisitor::modulePrefixError(const ModulePtr& m, const string& metadata) { string file = m->definitionContext()->filename(); string line = m->line(); ModulePrefix mp = modulePrefix(m); string old_file = mp.m->definitionContext()->filename(); string old_line = mp.m->line(); ostringstream os; if(!metadata.empty()) { os << _msg << " `" << metadata << "': "; } os << "inconsistent module prefix previously defined "; if(old_file != file) { os << "in " << old_file << ":"; } else { os << "at line "; } os << line; os << " as `" << mp.name << "'" << endl; m->definitionContext()->warning(All, file, line, os.str()); }
void Slice::ObjCGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { ModulePtr m = ModulePtr::dynamicCast(cont); if(m) { bool error = false; bool foundPrefix = false; StringList meta = getMetaData(m); StringList::const_iterator p; for(p = meta.begin(); p != meta.end(); ++p) { const string prefix = "prefix:"; string name; if(p->substr(_objcPrefix.size(), prefix.size()) == prefix) { foundPrefix = true; name = trim(p->substr(_objcPrefix.size() + prefix.size())); if(name.empty()) { if(_history.count(*p) == 0) { string file = m->definitionContext()->filename(); ostringstream os; os << _msg << " `" << *p << "'" << endl; emitWarning(file, m->line(), os.str()); _history.insert(*p); } error = true; } else { if(!addModule(m, name)) { modulePrefixError(m, *p); } } } else { if(_history.count(*p) == 0) { string file = m->definitionContext()->filename(); ostringstream os; os << _msg << " `" << *p << "'" << endl; emitWarning(file, m->line(), os.str()); _history.insert(*p); } error = true; } } if(!error && !foundPrefix) { StringList names = splitScopedName(m->scoped()); string name; for(StringList::const_iterator i = names.begin(); i != names.end(); ++i) { name += *i; } if(!addModule(m, name)) { modulePrefixError(m, ""); } } } }
void Slice::ObjCGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { ModulePtr m = ModulePtr::dynamicCast(cont); if(m) { bool error = false; bool foundPrefix = false; StringList meta = getMetaData(m); for(StringList::iterator p = meta.begin(); p != meta.end();) { string s = *p++; const string prefix = "objc:prefix:"; string name; if(s.find(prefix) == 0) { foundPrefix = true; name = trim(s.substr(prefix.size())); if(name.empty()) { m->definitionContext()->warning(InvalidMetaData, m->definitionContext()->filename(), m->line(), _msg + " `" + s + "'"); meta.remove(s); error = true; } else { if(!addModule(m, name)) { modulePrefixError(m, s); } } } else { m->definitionContext()->warning(InvalidMetaData, m->definitionContext()->filename(), m->line(), _msg + " `" + s + "'"); meta.remove(s); error = true; } } setMetaData(m, meta); if(!error && !foundPrefix) { StringList names = splitScopedName(m->scoped()); string name; for(StringList::const_iterator i = names.begin(); i != names.end(); ++i) { name += *i; } if(!addModule(m, name)) { modulePrefixError(m, ""); } } } EnumPtr en = EnumPtr::dynamicCast(cont); if(en) { StringList meta = getMetaData(en); for(StringList::iterator p = meta.begin(); p != meta.end();) { string s = *p; if(s != "objc:scoped") { en->definitionContext()->warning(InvalidMetaData, en->definitionContext()->filename(), en->line(), _msg + " `" + s + "'"); meta.erase(p++); } else { ++p; } } setMetaData(en, meta); } }