diff options
-rw-r--r-- | slicer/slicer/modelPartsTypes.impl.h | 18 | ||||
-rw-r--r-- | slicer/test/Jamfile.jam | 8 | ||||
-rw-r--r-- | slicer/test/slicer.jam | 2 | ||||
-rw-r--r-- | slicer/tool/parser.cpp | 20 |
4 files changed, 36 insertions, 12 deletions
diff --git a/slicer/slicer/modelPartsTypes.impl.h b/slicer/slicer/modelPartsTypes.impl.h index 74bf0c6..e75c849 100644 --- a/slicer/slicer/modelPartsTypes.impl.h +++ b/slicer/slicer/modelPartsTypes.impl.h @@ -146,6 +146,7 @@ namespace Slicer { template<typename T> void ModelPartForSimple<T>::SetValue(ValueSource && s) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); s.set(*this->Model); } @@ -153,6 +154,7 @@ namespace Slicer { template<typename T> bool ModelPartForSimple<T>::GetValue(ValueTarget && s) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); s.get(*this->Model); return true; @@ -174,6 +176,7 @@ namespace Slicer { template<typename T, typename M, Ice::optional<T> M::* MV> bool ModelPartForConverted<Ice::optional<T>, M, MV>::HasValue() const { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); return (bool)*this->Model; } @@ -289,6 +292,7 @@ namespace Slicer { template<typename T> bool ModelPartForOptional<T>::hasModel() const { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); return (bool)*this->Model; } @@ -296,6 +300,7 @@ namespace Slicer { template<typename T> void ModelPartForOptional<T>::Create() { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); if (!*this->Model) { *this->Model = typename T::element_type(); @@ -307,6 +312,7 @@ namespace Slicer { template<typename T> bool ModelPartForOptional<T>::GetValue(ValueTarget && s) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); if (*this->Model) { return modelPart->GetValue(std::move(s)); @@ -446,6 +452,7 @@ namespace Slicer { template<typename T> void ModelPartForClass<T>::Create() { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); *this->Model = std::make_shared<T>(); } @@ -459,6 +466,7 @@ namespace Slicer { template<typename T> ModelPartPtr ModelPartForClass<T>::GetSubclassModelPart(const std::string & name) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); return ModelPartForComplexBase::getSubclassModelPart(name, this->Model); } @@ -466,6 +474,7 @@ namespace Slicer { template<typename T> bool ModelPartForClass<T>::HasValue() const { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); return (bool)*this->Model; } @@ -507,6 +516,7 @@ namespace Slicer { TypeId ModelPartForClass<T>::GetTypeId() const { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); return ModelPartForComplexBase::GetTypeId(getTypeId(), *className); } @@ -591,6 +601,7 @@ namespace Slicer { template<typename T> void ModelPartForEnum<T>::SetValue(ValueSource && s) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); std::string val; s.set(val); @@ -600,6 +611,7 @@ namespace Slicer { template<typename T> bool ModelPartForEnum<T>::GetValue(ValueTarget && s) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); s.get(lookup(*this->Model)); return true; @@ -615,6 +627,7 @@ namespace Slicer { template<typename T> void ModelPartForSequence<T>::OnEachChild(const ChildHandler & ch) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); for(auto & element : *this->Model) { ch(elementName, elementModelPart(element), NULL); @@ -624,6 +637,7 @@ namespace Slicer { template<typename T> ChildRef ModelPartForSequence<T>::GetAnonChildRef(const HookFilter &) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); this->Model->push_back(typename element_type::value_type()); return ChildRef(ModelPart::CreateFor(this->Model->back())); @@ -671,6 +685,7 @@ namespace Slicer { template<typename T> void ModelPartForDictionary<T>::OnEachChild(const ChildHandler & ch) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); for (auto & pair : *this->Model) { ch(pairName, std::make_shared<ModelPartForStruct<typename T::value_type>>(&pair), NULL); @@ -680,6 +695,7 @@ namespace Slicer { template<typename T> ChildRef ModelPartForDictionary<T>::GetAnonChildRef(const HookFilter &) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); return ChildRef(std::make_shared<ModelPartForDictionaryElementInserter<T>>(this->Model)); } @@ -687,6 +703,7 @@ namespace Slicer { template<typename T> ChildRef ModelPartForDictionary<T>::GetChildRef(const std::string & name, const HookFilter &, bool matchCase) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); if (!optionalCaseEq(name, pairName, matchCase)) { throw IncorrectElementName(name); @@ -724,6 +741,7 @@ namespace Slicer { void ModelPartForStream<T>::OnEachChild(const ChildHandler & ch) { + // NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors) BOOST_ASSERT(this->Model); this->Model->Produce([&ch](const T & element) { ch(ModelPartForSequence<std::vector<T>>::elementName, ModelPart::CreateFor(element), NULL); diff --git a/slicer/test/Jamfile.jam b/slicer/test/Jamfile.jam index c288fc9..4c0acbd 100644 --- a/slicer/test/Jamfile.jam +++ b/slicer/test/Jamfile.jam @@ -22,9 +22,13 @@ lib types : [ glob *.ice ] conversions.cpp : - <dependency>../tool//slicer + <toolset>gcc:<dependency>../tool//slicer/<toolset>gcc + <toolset>clang:<dependency>../tool//slicer/<toolset>clang + <toolset>tidy:<dependency>../tool//slicer/<toolset>gcc <slicer>pure - <slicerbin>../tool//slicer + <toolset>gcc:<slicerbin>../tool//slicer/<toolset>gcc + <toolset>clang:<slicerbin>../tool//slicer/<toolset>clang + <toolset>tidy:<slicerbin>../tool//slicer/<toolset>gcc <include>. <library>..//adhocutil <library>boost_date_time diff --git a/slicer/test/slicer.jam b/slicer/test/slicer.jam index f43d087..f413628 100644 --- a/slicer/test/slicer.jam +++ b/slicer/test/slicer.jam @@ -14,13 +14,11 @@ toolset.flags slicer INCLUDES <include> ; actions slicer bind SLICERBIN { slice2cpp -I"$(INCLUDES)" --checksum --output-dir $(1[1]:D) $(2) --dll-export JAM_DLL_PUBLIC - touch $(1[2]) "$(SLICERBIN)" -I"$(INCLUDES)" $(2) $(1[2]) --headerPrefix="\"\"" } actions slicer.pure bind SLICERBIN { - touch $(1[1]) "$(SLICERBIN)" -I"$(INCLUDES)" $(2) $(1[1]) --headerPrefix="\"\"" } diff --git a/slicer/tool/parser.cpp b/slicer/tool/parser.cpp index 9aa27cd..0edcc2f 100644 --- a/slicer/tool/parser.cpp +++ b/slicer/tool/parser.cpp @@ -50,16 +50,17 @@ namespace Slicer { fprintbf(cpp, "template<> DLL_PUBLIC\nvoid\n"); createModelPartForConverted(type, c->scoped(), dm); fprintbf(cpp, "::SetValue(ValueSource && vsp)\n{\n"); + fprintbf(cpp, "\t// NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors)\n"); fprintbf(cpp, "\tBOOST_ASSERT(Model);\n"); for (const auto & conversion : conversions) { - fprintbf(cpp, "\tif (tryConvertFrom< %s >(vsp, Model, &%s)) return;\n", + fprintbf(cpp, "\tif (tryConvertFrom< %s >(vsp, Model, &%s)) {\n\t\treturn;\n\t}\n", conversion.ExchangeType, conversion.ConvertToModelFunc); } // Default conversion if (!dm->hasMetaData("slicer:nodefaultconversion")) { - fprintbf(cpp, "\tif (tryConvertFrom< %s >(vsp, Model)) return;\n", + fprintbf(cpp, "\tif (tryConvertFrom< %s >(vsp, Model)) {\n\t\treturn;\n\t}\n", Slice::typeToString(type)); } // Failed to convert @@ -70,16 +71,17 @@ namespace Slicer { fprintbf(cpp, "template<> DLL_PUBLIC\nbool\n"); createModelPartForConverted(type, c->scoped(), dm); fprintbf(cpp, "::GetValue(ValueTarget && vtp)\n{\n"); + fprintbf(cpp, "\t// NOLINTNEXTLINE(hicpp-no-array-decay,-warnings-as-errors)\n"); fprintbf(cpp, "\tBOOST_ASSERT(Model);\n"); for (const auto & conversion : conversions) { - fprintbf(cpp, "\tif (auto r = tryConvertTo< %s >(vtp, Model, &%s)) return (r == tcr_Value);\n", + fprintbf(cpp, "\tif (auto r = tryConvertTo< %s >(vtp, Model, &%s)) {\n\t\treturn (r == tcr_Value);\n\t}\n", conversion.ExchangeType, conversion.ConvertToExchangeFunc); } // Default conversion if (!dm->hasMetaData("slicer:nodefaultconversion")) { - fprintbf(cpp, "\tif (auto r = tryConvertTo< %s >(vtp, Model)) return (r == tcr_Value);\n", + fprintbf(cpp, "\tif (auto r = tryConvertTo< %s >(vtp, Model)) {\n\t\treturn (r == tcr_Value);\n\t}\n", Slice::typeToString(type)); } // Failed to convert @@ -199,6 +201,7 @@ namespace Slicer { copyMetadata(c->getMetaData()); fprintbf(cpp, ";\n\n"); + fprintbf(cpp, "// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n"); if (auto cmp = metaDataValue("slicer:custommodelpart:", c->getMetaData())) { fprintbf(cpp, "CUSTOMMODELPARTFOR(%s, %s< %s >, %s);\n\n", Slice::typeToString(decl), getBasicModelPart(decl), c->scoped(), boost::algorithm::replace_all_copy(*cmp, ".", "::")); @@ -243,8 +246,8 @@ namespace Slicer { { if (!cpp) { return; } - fprintbf(cpp, "typedef ModelPartForComplex< %s > C%d;\n", - it->scoped(), components); + fprintbf(cpp, "using C%d = ModelPartForComplex< %s >;\n", + components, it->scoped()); fprintbf(cpp, "template<> DLL_PUBLIC\n"); fprintbf(cpp, "const C%d::Hooks ", components); @@ -373,8 +376,8 @@ namespace Slicer { d->scoped(), iname ? *iname : "element"); - fprintbf(cpp, "typedef ModelPartForComplex< %s::value_type > C%d;\n", - d->scoped(), components); + fprintbf(cpp, "using C%d = ModelPartForComplex< %s::value_type >;\n", + components, d->scoped()); fprintbf(cpp, "template<> DLL_PUBLIC\n"); fprintbf(cpp, "const C%d::Hooks ", components); @@ -550,6 +553,7 @@ namespace Slicer { void Slicer::defineMODELPART(const std::string & type, const Slice::TypePtr & stype, const Slice::StringList & metadata) const { + fprintbf(cpp, "// NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n"); if (auto cmp = metaDataValue("slicer:custommodelpart:", metadata)) { fprintbf(cpp, "CUSTOMMODELPARTFOR(%s, %s< %s >, %s);\n\n", type, getBasicModelPart(stype), type, boost::algorithm::replace_all_copy(*cmp, ".", "::")); |