summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2006-01-30 17:41:11 +0000
committerDwayne Boone <dwayne@zeroc.com>2006-01-30 17:41:11 +0000
commit961edb4ce6d80632f2ffe1c50fe6834d54a38c6a (patch)
tree1a9e112eff7fddca93f13b9e281aebaac5cc4416 /cpp
parentUpdate depends (diff)
downloadice-961edb4ce6d80632f2ffe1c50fe6834d54a38c6a.tar.bz2
ice-961edb4ce6d80632f2ffe1c50fe6834d54a38c6a.tar.xz
ice-961edb4ce6d80632f2ffe1c50fe6834d54a38c6a.zip
Fixed to ignore array except on in params
Diffstat (limited to 'cpp')
-rw-r--r--cpp/include/Slice/CPlusPlusUtil.h13
-rw-r--r--cpp/src/Slice/CPlusPlusUtil.cpp48
-rw-r--r--cpp/src/slice2cppe/Gen.cpp17
-rw-r--r--cpp/src/slice2cppe/Gen.h3
4 files changed, 50 insertions, 31 deletions
diff --git a/cpp/include/Slice/CPlusPlusUtil.h b/cpp/include/Slice/CPlusPlusUtil.h
index b2eda46edb6..ad13ac41c07 100644
--- a/cpp/include/Slice/CPlusPlusUtil.h
+++ b/cpp/include/Slice/CPlusPlusUtil.h
@@ -27,7 +27,7 @@ SLICE_API void printHeader(::IceUtil::Output&);
SLICE_API void printVersionCheck(::IceUtil::Output&);
SLICE_API void printDllExportStuff(::IceUtil::Output&, const std::string&);
-SLICE_API std::string typeToString(const TypePtr&, const StringList& = StringList());
+SLICE_API std::string typeToString(const TypePtr&, const StringList& = StringList(), bool = true);
SLICE_API std::string returnTypeToString(const TypePtr&, const StringList& = StringList());
SLICE_API std::string inputTypeToString(const TypePtr&, const StringList& = StringList());
SLICE_API std::string outputTypeToString(const TypePtr&, const StringList& = StringList());
@@ -36,13 +36,14 @@ SLICE_API std::string operationModeToString(Operation::Mode);
SLICE_API std::string fixKwd(const std::string&);
SLICE_API void writeMarshalUnmarshalCode(::IceUtil::Output&, const TypePtr&, const std::string&, bool,
- const std::string& = "", bool = true, const StringList& = StringList());
+ const std::string& = "", bool = true, const StringList& = StringList(),
+ bool = false);
SLICE_API void writeMarshalCode(::IceUtil::Output&, const ParamDeclList&, const TypePtr&,
- const StringList& = StringList());
+ const StringList& = StringList(), bool = false);
SLICE_API void writeUnmarshalCode(::IceUtil::Output&, const ParamDeclList&, const TypePtr&,
- const StringList& = StringList());
-SLICE_API void writeAllocateCode(::IceUtil::Output&, const ParamDeclList&, const TypePtr&,
- const StringList& = StringList());
+ const StringList& = StringList(), bool = false);
+SLICE_API void writeAllocateCode(::IceUtil::Output&, const ParamDeclList&, const TypePtr&,
+ const StringList& = StringList(), bool = false);
SLICE_API void writeStreamMarshalUnmarshalCode(::IceUtil::Output&, const TypePtr&, const std::string&, bool,
const std::string& = "");
SLICE_API void writeStreamMarshalCode(::IceUtil::Output&, const std::list<std::pair<TypePtr, std::string> >&,
diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp
index b7880b4ac46..0ede4f80e7a 100644
--- a/cpp/src/Slice/CPlusPlusUtil.cpp
+++ b/cpp/src/Slice/CPlusPlusUtil.cpp
@@ -120,7 +120,7 @@ Slice::printDllExportStuff(Output& out, const string& dllExport)
}
string
-Slice::typeToString(const TypePtr& type, const StringList& metaData)
+Slice::typeToString(const TypePtr& type, const StringList& metaData, bool allowArray)
{
static const char* builtinTable[] =
{
@@ -163,9 +163,16 @@ Slice::typeToString(const TypePtr& type, const StringList& metaData)
{
if(seqType == "array")
{
- TypePtr elemType = seq->type();
- string s = typeToString(elemType);
- return "::std::pair<const " + s + "*, const " + s + "*>";
+ if(allowArray)
+ {
+ TypePtr elemType = seq->type();
+ string s = typeToString(elemType);
+ return "::std::pair<const " + s + "*, const " + s + "*>";
+ }
+ else
+ {
+ return fixKwd(seq->scoped());
+ }
}
else
{
@@ -201,7 +208,7 @@ Slice::returnTypeToString(const TypePtr& type, const StringList& metaData)
return "void";
}
- return typeToString(type, metaData);
+ return typeToString(type, metaData, false);
}
string
@@ -454,7 +461,7 @@ Slice::fixKwd(const string& name)
void
Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, const string& param, bool marshal,
- const string& str, bool pointer, const StringList& metaData)
+ const string& str, bool pointer, const StringList& metaData, bool allowArray)
{
string fixedParam = fixKwd(param);
@@ -530,11 +537,15 @@ Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, const string&
if(seq)
{
string seqType = findMetaData(metaData);
- if(seqType.empty())
+ if(seqType.empty() || !allowArray && seqType == "array")
{
StringList l = seq->getMetaData();
seqType = findMetaData(l);
}
+ if(!allowArray && seqType == "array")
+ {
+ seqType = "";
+ }
builtin = BuiltinPtr::dynamicCast(seq->type());
if(marshal)
{
@@ -731,41 +742,46 @@ Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, const string&
}
void
-Slice::writeMarshalCode(Output& out, const ParamDeclList& params, const TypePtr& ret, const StringList& metaData)
+Slice::writeMarshalCode(Output& out, const ParamDeclList& params, const TypePtr& ret, const StringList& metaData,
+ bool allowArray)
{
for(ParamDeclList::const_iterator p = params.begin(); p != params.end(); ++p)
{
- writeMarshalUnmarshalCode(out, (*p)->type(), fixKwd((*p)->name()), true, "", true, (*p)->getMetaData());
+ writeMarshalUnmarshalCode(out, (*p)->type(), fixKwd((*p)->name()), true, "", true, (*p)->getMetaData(),
+ allowArray);
}
if(ret)
{
- writeMarshalUnmarshalCode(out, ret, "__ret", true, "", true, metaData);
+ writeMarshalUnmarshalCode(out, ret, "__ret", true, "", true, metaData, false);
}
}
void
-Slice::writeUnmarshalCode(Output& out, const ParamDeclList& params, const TypePtr& ret, const StringList& metaData)
+Slice::writeUnmarshalCode(Output& out, const ParamDeclList& params, const TypePtr& ret, const StringList& metaData,
+ bool allowArray)
{
for(ParamDeclList::const_iterator p = params.begin(); p != params.end(); ++p)
{
- writeMarshalUnmarshalCode(out, (*p)->type(), fixKwd((*p)->name()), false, "", true, (*p)->getMetaData());
+ writeMarshalUnmarshalCode(out, (*p)->type(), fixKwd((*p)->name()), false, "", true, (*p)->getMetaData(),
+ allowArray);
}
if(ret)
{
- writeMarshalUnmarshalCode(out, ret, "__ret", false, "", true, metaData);
+ writeMarshalUnmarshalCode(out, ret, "__ret", false, "", true, metaData, false);
}
}
void
-Slice::writeAllocateCode(Output& out, const ParamDeclList& params, const TypePtr& ret, const StringList& metaData)
+Slice::writeAllocateCode(Output& out, const ParamDeclList& params, const TypePtr& ret, const StringList& metaData,
+ bool allowArray)
{
for(ParamDeclList::const_iterator p = params.begin(); p != params.end(); ++p)
{
- out << nl << typeToString((*p)->type(), (*p)->getMetaData()) << ' ' << fixKwd((*p)->name()) << ';';
+ out << nl << typeToString((*p)->type(), (*p)->getMetaData(), allowArray) << ' ' << fixKwd((*p)->name()) << ';';
}
if(ret)
{
- out << nl << typeToString(ret, metaData) << " __ret;";
+ out << nl << typeToString(ret, metaData, allowArray) << " __ret;";
}
}
diff --git a/cpp/src/slice2cppe/Gen.cpp b/cpp/src/slice2cppe/Gen.cpp
index 761f3dce990..396e104e55d 100644
--- a/cpp/src/slice2cppe/Gen.cpp
+++ b/cpp/src/slice2cppe/Gen.cpp
@@ -1518,7 +1518,7 @@ Slice::Gen::DelegateVisitor::visitOperation(const OperationPtr& p)
C << nl << "try";
C << sb;
C << nl << "::IceInternal::BasicStream* __os = __out.os();";
- writeMarshalCode(C, inParams, 0);
+ writeMarshalCode(C, inParams, 0, StringList(), true);
C << eb;
C << nl << "catch(const ::Ice::LocalException& __ex)";
C << sb;
@@ -2269,8 +2269,8 @@ Slice::Gen::ObjectVisitor::visitOperation(const OperationPtr& p)
C << nl << "::IceInternal::BasicStream* __os = __in.os();";
}
- writeAllocateCode(C, inParams, 0);
- writeUnmarshalCode(C, inParams, 0);
+ writeAllocateCode(C, inParams, 0, StringList(), true);
+ writeUnmarshalCode(C, inParams, 0, StringList(), true);
writeAllocateCode(C, outParams, 0);
if(!throws.empty())
{
@@ -2930,7 +2930,7 @@ 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)
+ if(q->find("cpp:type:", 0) == 0 || q->find("cpp:array", 0))
{
cout << p->definitionContext()->filename() << ":" << p->line()
<< ": warning: invalid metadata for operation" << endl;
@@ -2940,14 +2940,15 @@ Slice::Gen::MetaDataVisitor::visitOperation(const OperationPtr& p)
}
else
{
- validate(returnType, metaData, p->definitionContext()->filename(), p->line());
+ validate(returnType, metaData, p->definitionContext()->filename(), p->line(), false);
}
}
ParamDeclList params = p->parameters();
for(ParamDeclList::iterator q = params.begin(); q != params.end(); ++q)
{
- validate((*q)->type(), (*q)->getMetaData(), p->definitionContext()->filename(), (*q)->line());
+ validate((*q)->type(), (*q)->getMetaData(), p->definitionContext()->filename(), (*q)->line(),
+ !(*q)->isOutParam());
}
}
@@ -2989,7 +2990,7 @@ Slice::Gen::MetaDataVisitor::visitConst(const ConstPtr& p)
void
Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const StringList& metaData,
- const string& file, const string& line)
+ const string& file, const string& line, bool allowArray)
{
static const string prefix = "cpp:";
@@ -3003,7 +3004,7 @@ Slice::Gen::MetaDataVisitor::validate(const SyntaxTreeBasePtr& cont, const Strin
if(SequencePtr::dynamicCast(cont))
{
string ss = s.substr(prefix.size());
- if(ss.find("type:") == 0)
+ if(ss.find("type:") == 0 || (allowArray && ss == "array"))
{
continue;
}
diff --git a/cpp/src/slice2cppe/Gen.h b/cpp/src/slice2cppe/Gen.h
index 0fb3c5b1d94..77a29656ed9 100644
--- a/cpp/src/slice2cppe/Gen.h
+++ b/cpp/src/slice2cppe/Gen.h
@@ -288,7 +288,8 @@ private:
private:
- void validate(const SyntaxTreeBasePtr&, const StringList&, const std::string&, const std::string&);
+ void validate(const SyntaxTreeBasePtr&, const StringList&, const std::string&, const std::string&,
+ bool = false);
StringSet _history;
};