diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-01-30 17:41:11 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-01-30 17:41:11 +0000 |
commit | 961edb4ce6d80632f2ffe1c50fe6834d54a38c6a (patch) | |
tree | 1a9e112eff7fddca93f13b9e281aebaac5cc4416 /cpp | |
parent | Update depends (diff) | |
download | ice-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.h | 13 | ||||
-rw-r--r-- | cpp/src/Slice/CPlusPlusUtil.cpp | 48 | ||||
-rw-r--r-- | cpp/src/slice2cppe/Gen.cpp | 17 | ||||
-rw-r--r-- | cpp/src/slice2cppe/Gen.h | 3 |
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; }; |