From b0d4e6363a8640c814d8d32ecf397e17fd13b4ed Mon Sep 17 00:00:00 2001 From: Michi Henning Date: Tue, 24 Feb 2009 10:02:55 +1000 Subject: Bug 3751 - CsGenerator::MetaDataVisitor::visitParamDecl not called - Added code to call parameter metadata validator. - Fixed typo in warning message. - Fixed incorect history update for global metadata. - Got rid of a few magic numbers in the metadata validation. --- cpp/src/Slice/CsUtil.cpp | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'cpp/src/Slice/CsUtil.cpp') diff --git a/cpp/src/Slice/CsUtil.cpp b/cpp/src/Slice/CsUtil.cpp index 8a4cfa0307c..34af1de3790 100644 --- a/cpp/src/Slice/CsUtil.cpp +++ b/cpp/src/Slice/CsUtil.cpp @@ -1547,18 +1547,19 @@ Slice::CsGenerator::MetaDataVisitor::visitUnitStart(const UnitPtr& p) { if(s.find(csPrefix) == 0) { - static const string csAttributePrefix = "cs:attribute:"; + static const string csAttributePrefix = csPrefix + "attribute:"; if(s.find(csAttributePrefix) == 0 && s.size() > csAttributePrefix.size()) { continue; } emitWarning(file, -1, "ignoring invalid global metadata `" + s + "'"); + _history.insert(s); } else if(s.find(clrPrefix) == 0) { emitWarning(file, -1, "ignoring invalid global metadata `" + s + "'"); + _history.insert(s); } - _history.insert(s); } } } @@ -1628,13 +1629,19 @@ Slice::CsGenerator::MetaDataVisitor::visitOperation(const OperationPtr& p) if(!cl->isLocal()) { ostringstream os; - os << "metdata directive `UserException' applies only to local operations " + os << "metadata directive `UserException' applies only to local operations " << "but enclosing " << (cl->isInterface() ? "interface" : "class") << "`" << cl->name() << "' is not local"; emitWarning(p->file(), p->line(), os.str()); } } validate(p); + + ParamDeclList params = p->parameters(); + for(ParamDeclList::const_iterator i = params.begin(); i != params.end(); ++i) + { + visitParamDecl(*i); + } } void @@ -1696,9 +1703,10 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { continue; } - if(s.substr(prefix.size(), 8) == "generic:") + static const string clrGenericPrefix = prefix + "generic:"; + if(s.find(clrGenericPrefix) == 0) { - string type = s.substr(prefix.size() + 8); + string type = s.substr(clrGenericPrefix.size()); if(type == "LinkedList" || type == "Queue" || type == "Stack") { ClassDeclPtr cd = ClassDeclPtr::dynamicCast(seq->type()); @@ -1713,7 +1721,8 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) continue; // Custom type or List } } - if(s.substr(prefix.size(), 13) == "serializable:") + static const string clrSerializablePrefix = prefix + "serializable:"; + if(s.find(clrSerializablePrefix) == 0) { string meta; if(cont->findMetaData(prefix + "collection", meta) @@ -1722,7 +1731,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) emitWarning(cont->file(), cont->line(), msg + " `" + meta + "':\n" + "serialization can only be used with the array mapping for byte sequences"); } - string type = s.substr(prefix.size() + 13); + string type = s.substr(clrSerializablePrefix.size()); BuiltinPtr builtin = BuiltinPtr::dynamicCast(seq->type()); if(!type.empty() && builtin && builtin->kind() == Builtin::KindByte) { @@ -1754,9 +1763,10 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { continue; } - if(s.substr(prefix.size(), 8) == "generic:") + static const string clrGenericPrefix = prefix + "generic:"; + if(s.find(clrGenericPrefix) == 0) { - string type = s.substr(prefix.size() + 8); + string type = s.substr(clrGenericPrefix.size()); if(type == "SortedDictionary" || type == "SortedList") { continue; @@ -1773,7 +1783,7 @@ Slice::CsGenerator::MetaDataVisitor::validate(const ContainedPtr& cont) { if(s.find(prefix) == 0) { - static const string csAttributePrefix = "cs:attribute:"; + static const string csAttributePrefix = prefix + "attribute:"; if(s.find(csAttributePrefix) == 0 && s.size() > csAttributePrefix.size()) { continue; -- cgit v1.2.3