summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp/Gen.cpp
diff options
context:
space:
mode:
authorZeroC Staff <git@zeroc.com>2014-06-04 23:03:57 +0000
committerZeroC Staff <git@zeroc.com>2014-06-04 23:03:57 +0000
commit7aaf53c7ecb429a8e3b6abab3f7b9dbdc387b171 (patch)
tree78bde514408b4d02488e5efffd325faaa1c9a287 /cpp/src/slice2cpp/Gen.cpp
parentfix for Java metrics test (diff)
downloadice-7aaf53c7ecb429a8e3b6abab3f7b9dbdc387b171.tar.bz2
ice-7aaf53c7ecb429a8e3b6abab3f7b9dbdc387b171.tar.xz
ice-7aaf53c7ecb429a8e3b6abab3f7b9dbdc387b171.zip
New cpp:view-type metadata for strings, sequences and dictionaries, plus updates
to throughput demo. Fixes ICE-5382.
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index ac6939b836e..534c5fea292 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -6413,7 +6413,8 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p)
{
for(StringList::const_iterator q = metaData.begin(); q != metaData.end(); ++q)
{
- if(q->find("cpp:type:", 0) == 0 || q->find("cpp:array", 0) == 0 || q->find("cpp:range", 0) == 0)
+ if(q->find("cpp:type:", 0) == 0 || q->find("cpp:view-type:", 0) == 0
+ || (*q) == "cpp:array" || q->find("cpp:range", 0) == 0)
{
emitWarning(p->file(), p->line(), "ignoring invalid metadata `" + *q +
"' for operation with void return type");
@@ -6477,7 +6478,7 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
if(s.find(prefix) == 0)
{
string ss = s.substr(prefix.size());
- if(ss.find("type:wstring") == 0 || ss.find("type:string") == 0)
+ if(ss == "type:wstring" || ss == "type:string")
{
BuiltinPtr builtin = BuiltinPtr::dynamicCast(cont);
ModulePtr module = ModulePtr::dynamicCast(cont);
@@ -6489,22 +6490,29 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
continue;
}
}
+ if(BuiltinPtr::dynamicCast(cont) && (ss.find("type:") == 0 || ss.find("view-type:") == 0))
+ {
+ if(BuiltinPtr::dynamicCast(cont)->kind() == Builtin::KindString)
+ {
+ continue;
+ }
+ }
if(SequencePtr::dynamicCast(cont))
{
- if(ss.find("type:") == 0 || ss == "array" || ss.find("range") == 0)
+ if(ss.find("type:") == 0 || ss.find("view-type:") == 0 || ss == "array" || ss.find("range") == 0)
{
continue;
}
}
- if(DictionaryPtr::dynamicCast(cont) && ss.find("type:") == 0)
+ if(DictionaryPtr::dynamicCast(cont) && (ss.find("type:") == 0 || ss.find("view-type:") == 0))
{
continue;
}
- if(StructPtr::dynamicCast(cont) && (ss.find("class") == 0 || ss.find("comparable") == 0))
+ if(StructPtr::dynamicCast(cont) && (ss == "class" || ss == "comparable"))
{
continue;
}
- if(ClassDefPtr::dynamicCast(cont) && ss.find("virtual") == 0)
+ if(ClassDefPtr::dynamicCast(cont) && ss == "virtual")
{
continue;
}