diff options
author | Mark Spruiell <mes@zeroc.com> | 2012-05-10 16:45:22 -0700 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2012-05-10 16:45:22 -0700 |
commit | 485691562a75595eda00af35f5235f6fc22fa36c (patch) | |
tree | 4eaf48ac7512239a47d97e533cd3da1a75084f29 /cpp/src | |
parent | * C++ implementation for compact/sliced formats (diff) | |
download | ice-485691562a75595eda00af35f5235f6fc22fa36c.tar.bz2 ice-485691562a75595eda00af35f5235f6fc22fa36c.tar.xz ice-485691562a75595eda00af35f5235f6fc22fa36c.zip |
C++ bug fixes; adding more Python tests
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/Slice/Parser.cpp | 25 | ||||
-rwxr-xr-x | cpp/src/Slice/PythonUtil.cpp | 7 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 20 |
3 files changed, 39 insertions, 13 deletions
diff --git a/cpp/src/Slice/Parser.cpp b/cpp/src/Slice/Parser.cpp index 93cbb799fc6..96260809ef8 100755 --- a/cpp/src/Slice/Parser.cpp +++ b/cpp/src/Slice/Parser.cpp @@ -3433,6 +3433,20 @@ Slice::ClassDef::hasDefaultValues() const return false; } +bool +Slice::ClassDef::inheritsMetaData(const string& meta) const +{ + for(ClassList::const_iterator p = _bases.begin(); p != _bases.end(); ++p) + { + if((*p)->hasMetaData(meta) || (*p)->inheritsMetaData(meta)) + { + return true; + } + } + + return false; +} + Contained::ContainedType Slice::ClassDef::containedType() const { @@ -3862,6 +3876,17 @@ Slice::Exception::hasDefaultValues() const return false; } +bool +Slice::Exception::inheritsMetaData(const string& meta) const +{ + if(_base && (_base->hasMetaData(meta) || _base->inheritsMetaData(meta))) + { + return true; + } + + return false; +} + string Slice::Exception::kindOf() const { diff --git a/cpp/src/Slice/PythonUtil.cpp b/cpp/src/Slice/PythonUtil.cpp index fada4154502..4e363c17d18 100755 --- a/cpp/src/Slice/PythonUtil.cpp +++ b/cpp/src/Slice/PythonUtil.cpp @@ -796,8 +796,8 @@ Slice::Python::CodeVisitor::visitClassDefStart(const ClassDefPtr& p) DataMemberList members = p->dataMembers(); _out << sp << nl << "_M_" << type << " = IcePy.defineClass('" << scoped << "', " << name << ", "; writeMetaData(p->getMetaData()); - _out << ", " << (isAbstract ? "True" : "False") << ", " << (p->hasMetaData("preserve-slice") ? "True" : "False") - << ", "; + const bool preserved = p->hasMetaData("preserve-slice") || p->inheritsMetaData("preserve-slice"); + _out << ", " << (isAbstract ? "True" : "False") << ", " << (preserved ? "True" : "False") << ", "; if(!base) { _out << "None"; @@ -1106,7 +1106,8 @@ Slice::Python::CodeVisitor::visitExceptionStart(const ExceptionPtr& p) string type = getAbsolute(p, "_t_"); _out << sp << nl << "_M_" << type << " = IcePy.defineException('" << scoped << "', " << name << ", "; writeMetaData(p->getMetaData()); - _out << ", " << (p->hasMetaData("preserve-slice") ? "True" : "False") << ", "; + const bool preserved = p->hasMetaData("preserve-slice") || p->inheritsMetaData("preserve-slice"); + _out << ", " << (preserved ? "True" : "False") << ", "; if(!base) { _out << "None"; diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp index 6062804d5db..ecbc5b215be 100644 --- a/cpp/src/slice2cpp/Gen.cpp +++ b/cpp/src/slice2cpp/Gen.cpp @@ -635,8 +635,8 @@ Slice::Gen::TypesVisitor::visitExceptionStart(const ExceptionPtr& p) ExceptionPtr base = p->base(); DataMemberList dataMembers = p->dataMembers(); DataMemberList allDataMembers = p->allDataMembers(); - bool preserved = p->hasMetaData("preserve-slice"); - bool basePreserved = base ? base->hasMetaData("preserve-slice") : false; + bool basePreserved = p->inheritsMetaData("preserve-slice"); + bool preserved = basePreserved || p->hasMetaData("preserve-slice"); bool hasDefaultValues = p->hasDefaultValues(); DataMemberList::const_iterator q; @@ -881,8 +881,8 @@ Slice::Gen::TypesVisitor::visitExceptionEnd(const ExceptionPtr& p) if(!p->isLocal()) { ExceptionPtr base = p->base(); - bool preserved = p->hasMetaData("preserve-slice"); - bool basePreserved = base ? base->hasMetaData("preserve-slice") : false; + bool basePreserved = p->inheritsMetaData("preserve-slice"); + bool preserved = basePreserved || p->hasMetaData("preserve-slice"); H << sp << nl << "virtual void __write(::IceInternal::BasicStream*) const;"; H << nl << "virtual void __writeImpl(::IceInternal::BasicStream*) const;"; @@ -3827,8 +3827,8 @@ Slice::Gen::ObjectVisitor::visitClassDefStart(const ClassDefPtr& p) } DataMemberList dataMembers = p->dataMembers(); DataMemberList allDataMembers = p->allDataMembers(); - bool preserved = p->hasMetaData("preserve-slice"); - bool basePreserved = base ? base->hasMetaData("preserve-slice") : false; + bool basePreserved = p->inheritsMetaData("preserve-slice"); + bool preserved = basePreserved || p->hasMetaData("preserve-slice"); H << sp << nl << "class " << _dllExport << name << " : "; H.useCurrentPosAsIndent(); @@ -4165,8 +4165,8 @@ Slice::Gen::ObjectVisitor::visitClassDefEnd(const ClassDefPtr& p) { base = bases.front(); } - bool preserved = p->hasMetaData("preserve-slice"); - bool basePreserved = base ? base->hasMetaData("preserve-slice") : false; + bool basePreserved = p->inheritsMetaData("preserve-slice"); + bool preserved = basePreserved || p->hasMetaData("preserve-slice"); if(!p->isLocal()) { @@ -5018,8 +5018,8 @@ Slice::Gen::ObjectVisitor::emitGCFunctions(const ClassDefPtr& p) // bool canBeCyclic = p->canBeCyclic(); bool override = canBeCyclic && (!base || !base->canBeCyclic()); - bool preserved = p->hasMetaData("preserve-slice"); - bool basePreserved = base ? base->hasMetaData("preserve-slice") : false; + bool basePreserved = p->inheritsMetaData("preserve-slice"); + bool preserved = basePreserved || p->hasMetaData("preserve-slice"); // // We also override __addObject and __usesGC if this is the initial preserved |