diff --git a/.gitignore b/.gitignore index 9e6e4429..a3790d46 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,361 @@ /buckaroo/ .buckconfig.local BUCKAROO_DEPS + +# Prerequisites +*.d + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser \ No newline at end of file diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 00000000..9bb3071a --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,49 @@ +{ + // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file. + "configurations": [ + { + "name": "x86-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x86" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "" + }, + { + "name": "x86-Release", + "generator": "Ninja", + "configurationType": "RelWithDebInfo", + "inheritEnvironments": [ "msvc_x86" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "" + }, + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "" + }, + { + "name": "x64-Release", + "generator": "Ninja", + "configurationType": "RelWithDebInfo", + "inheritEnvironments": [ "msvc_x64_x64" ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "-v", + "ctestCommandArgs": "" + } + ] +} \ No newline at end of file diff --git a/contrib/codeanalysis/fuzzy_tests/use.inc b/contrib/codeanalysis/fuzzy_tests/use.inc index 0f9fea77..ae66ba9e 100644 --- a/contrib/codeanalysis/fuzzy_tests/use.inc +++ b/contrib/codeanalysis/fuzzy_tests/use.inc @@ -2,4 +2,4 @@ def greet { return("hello") } -fun(){ "world" } +fun() { return "world"; } diff --git a/include/chaiscript/chaiscript.hpp b/include/chaiscript/chaiscript.hpp index dbf6d73b..169ced29 100644 --- a/include/chaiscript/chaiscript.hpp +++ b/include/chaiscript/chaiscript.hpp @@ -820,6 +820,7 @@ /// @namespace chaiscript::detail /// @brief Classes and functions reserved for internal use. Items in this namespace are not supported. +#include #include "chaiscript_basic.hpp" #include "language/chaiscript_parser.hpp" #include "chaiscript_stdlib.hpp" @@ -836,7 +837,7 @@ namespace chaiscript : ChaiScript_Basic( chaiscript::Std_Lib::library(), std::make_unique>(), - t_modulepaths, t_usepaths, t_opts) + std::move(t_modulepaths), std::move(t_usepaths), t_opts) { } }; diff --git a/include/chaiscript/chaiscript_defines.hpp b/include/chaiscript/chaiscript_defines.hpp index d3a74d78..42ee37b4 100644 --- a/include/chaiscript/chaiscript_defines.hpp +++ b/include/chaiscript/chaiscript_defines.hpp @@ -155,7 +155,7 @@ namespace chaiscript { auto parse_num(const char *t_str) -> typename std::enable_if::value, T>::type { T t = 0; - for (char c = *t_str; (c = *t_str) != 0; ++t_str) { + for (char c; (c = *t_str) != 0; ++t_str) { if (c < '0' || c > '9') { return t; } diff --git a/include/chaiscript/dispatchkit/any.hpp b/include/chaiscript/dispatchkit/any.hpp index ae8035c9..2ebc9ed9 100644 --- a/include/chaiscript/dispatchkit/any.hpp +++ b/include/chaiscript/dispatchkit/any.hpp @@ -79,7 +79,7 @@ namespace chaiscript { std::unique_ptr clone() const override { - return std::unique_ptr(new Data_Impl(m_data)); + return std::unique_ptr(std::make_unique>(m_data)); } Data_Impl &operator=(const Data_Impl&) = delete; @@ -134,8 +134,7 @@ namespace chaiscript { // modifiers - Any & swap(Any &t_other) - { + Any & swap(Any &t_other) noexcept { std::swap(t_other.m_data, m_data); return *this; } diff --git a/include/chaiscript/dispatchkit/bootstrap.hpp b/include/chaiscript/dispatchkit/bootstrap.hpp index bcaebfca..9563138a 100644 --- a/include/chaiscript/dispatchkit/bootstrap.hpp +++ b/include/chaiscript/dispatchkit/bootstrap.hpp @@ -271,7 +271,7 @@ namespace chaiscript static bool has_guard(const Const_Proxy_Function &t_pf) { - auto pf = std::dynamic_pointer_cast(t_pf); + const auto pf = std::dynamic_pointer_cast(t_pf); return pf && pf->get_guard(); } @@ -294,6 +294,7 @@ namespace chaiscript std::vector vbv; + vbv.reserve(v.size()); for (const auto &o: v) { vbv.push_back(const_var(o)); diff --git a/include/chaiscript/dispatchkit/boxed_cast.hpp b/include/chaiscript/dispatchkit/boxed_cast.hpp index b79d735b..9ac52d30 100644 --- a/include/chaiscript/dispatchkit/boxed_cast.hpp +++ b/include/chaiscript/dispatchkit/boxed_cast.hpp @@ -33,6 +33,7 @@ namespace chaiscript /// \brief Function for extracting a value stored in a Boxed_Value object /// \tparam Type The type to extract from the Boxed_Value /// \param[in] bv The Boxed_Value to extract a typed value from + /// \param t_conversions /// \returns Type equivalent to the requested type /// \throws exception::bad_boxed_cast If the requested conversion is not possible /// diff --git a/include/chaiscript/dispatchkit/boxed_number.hpp b/include/chaiscript/dispatchkit/boxed_number.hpp index dafc1234..35e0a478 100644 --- a/include/chaiscript/dispatchkit/boxed_number.hpp +++ b/include/chaiscript/dispatchkit/boxed_number.hpp @@ -769,22 +769,22 @@ namespace chaiscript return Boxed_Number(oper(Operators::Opers::pre_increment, t_lhs.bv)); } - static const Boxed_Number sum(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) + static Boxed_Number sum(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) { return Boxed_Number(oper(Operators::Opers::sum, t_lhs.bv, t_rhs.bv)); } - static const Boxed_Number unary_plus(const Boxed_Number &t_lhs) + static Boxed_Number unary_plus(const Boxed_Number &t_lhs) { return Boxed_Number(oper(Operators::Opers::unary_plus, t_lhs.bv)); } - static const Boxed_Number unary_minus(const Boxed_Number &t_lhs) + static Boxed_Number unary_minus(const Boxed_Number &t_lhs) { return Boxed_Number(oper(Operators::Opers::unary_minus, t_lhs.bv)); } - static const Boxed_Number difference(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) + static Boxed_Number difference(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) { return Boxed_Number(oper(Operators::Opers::difference, t_lhs.bv, t_rhs.bv)); } @@ -824,22 +824,22 @@ namespace chaiscript return Boxed_Number(oper(Operators::Opers::assign_shift_right, t_lhs.bv, t_rhs.bv)); } - static const Boxed_Number bitwise_and(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) + static Boxed_Number bitwise_and(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) { return Boxed_Number(oper(Operators::Opers::bitwise_and, t_lhs.bv, t_rhs.bv)); } - static const Boxed_Number bitwise_complement(const Boxed_Number &t_lhs) + static Boxed_Number bitwise_complement(const Boxed_Number &t_lhs) { return Boxed_Number(oper(Operators::Opers::bitwise_complement, t_lhs.bv, Boxed_Value(0))); } - static const Boxed_Number bitwise_xor(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) + static Boxed_Number bitwise_xor(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) { return Boxed_Number(oper(Operators::Opers::bitwise_xor, t_lhs.bv, t_rhs.bv)); } - static const Boxed_Number bitwise_or(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) + static Boxed_Number bitwise_or(const Boxed_Number &t_lhs, const Boxed_Number &t_rhs) { return Boxed_Number(oper(Operators::Opers::bitwise_or, t_lhs.bv, t_rhs.bv)); } diff --git a/include/chaiscript/dispatchkit/boxed_value.hpp b/include/chaiscript/dispatchkit/boxed_value.hpp index ce943eb9..78078783 100644 --- a/include/chaiscript/dispatchkit/boxed_value.hpp +++ b/include/chaiscript/dispatchkit/boxed_value.hpp @@ -208,15 +208,13 @@ namespace chaiscript Boxed_Value(const Boxed_Value&) = default; Boxed_Value& operator=(const Boxed_Value&) = default; - void swap(Boxed_Value &rhs) - { + void swap(Boxed_Value &rhs) noexcept { std::swap(m_data, rhs.m_data); } /// Copy the values stored in rhs.m_data to m_data. /// m_data pointers are not shared in this case - Boxed_Value assign(const Boxed_Value &rhs) - { + Boxed_Value assign(const Boxed_Value &rhs) const { (*m_data) = (*rhs.m_data); return *this; } @@ -318,8 +316,7 @@ namespace chaiscript return m_data->m_const_data_ptr; } - Boxed_Value get_attr(const std::string &t_name) - { + Boxed_Value get_attr(const std::string &t_name) const { if (!m_data->m_attrs) { m_data->m_attrs = std::make_unique>>(); diff --git a/include/chaiscript/dispatchkit/dispatchkit.hpp b/include/chaiscript/dispatchkit/dispatchkit.hpp index ae729819..112e8b7f 100644 --- a/include/chaiscript/dispatchkit/dispatchkit.hpp +++ b/include/chaiscript/dispatchkit/dispatchkit.hpp @@ -663,7 +663,7 @@ namespace chaiscript loc_mask = 0x0000FFFF }; - uint_fast32_t loc = t_loc; + const uint_fast32_t loc = t_loc; if (loc == 0) { @@ -733,7 +733,7 @@ namespace chaiscript if (t_throw) { throw std::range_error("Type Not Known"); } else { - return Type_Info(); + return {}; } } @@ -765,7 +765,7 @@ namespace chaiscript std::shared_ptr> get_method_missing_functions() const { - uint_fast32_t method_missing_loc = m_method_missing_loc; + const uint_fast32_t method_missing_loc = m_method_missing_loc; auto method_missing_funs = get_function("method_missing", method_missing_loc); if (method_missing_funs.first != method_missing_loc) { m_method_missing_loc = uint_fast32_t(method_missing_funs.first); @@ -782,7 +782,7 @@ namespace chaiscript const auto &funs = get_functions_int(); - auto itr = find_keyed_value(funs, t_name, t_hint); + const auto itr = find_keyed_value(funs, t_name, t_hint); if (itr != funs.end()) { @@ -808,7 +808,7 @@ namespace chaiscript { const auto &funs = get_boxed_functions_int(); - auto itr = find_keyed_value(funs, t_name, t_hint); + const auto itr = find_keyed_value(funs, t_name, t_hint); if (itr != funs.end()) { @@ -959,7 +959,7 @@ namespace chaiscript Boxed_Value call_member(const std::string &t_name, std::atomic_uint_fast32_t &t_loc, const std::vector ¶ms, bool t_has_params, const Type_Conversions_State &t_conversions) { - uint_fast32_t loc = t_loc; + const uint_fast32_t loc = t_loc; const auto funs = get_function(t_name, loc); if (funs.first != loc) { t_loc = uint_fast32_t(funs.first); } @@ -1079,7 +1079,7 @@ namespace chaiscript Boxed_Value call_function(const std::string &t_name, std::atomic_uint_fast32_t &t_loc, const std::vector ¶ms, const Type_Conversions_State &t_conversions) const { - uint_fast32_t loc = t_loc; + const uint_fast32_t loc = t_loc; const auto funs = get_function(t_name, loc); if (funs.first != loc) { t_loc = uint_fast32_t(funs.first); } @@ -1233,7 +1233,7 @@ namespace chaiscript { if (t_s.call_depth == 0) { - m_conversions.enable_conversion_saves(t_saves, true); + chaiscript::Type_Conversions::enable_conversion_saves(t_saves, true); } ++t_s.call_depth; @@ -1250,7 +1250,7 @@ namespace chaiscript if (t_s.call_depth == 0) { t_s.call_params.back().clear(); - m_conversions.enable_conversion_saves(t_saves, false); + chaiscript::Type_Conversions::enable_conversion_saves(t_saves, false); } } @@ -1326,8 +1326,8 @@ namespace chaiscript static bool function_less_than(const Proxy_Function &lhs, const Proxy_Function &rhs) { - auto dynamic_lhs(std::dynamic_pointer_cast(lhs)); - auto dynamic_rhs(std::dynamic_pointer_cast(rhs)); + const auto dynamic_lhs(std::dynamic_pointer_cast(lhs)); + const auto dynamic_rhs(std::dynamic_pointer_cast(rhs)); if (dynamic_lhs && dynamic_rhs) { diff --git a/include/chaiscript/dispatchkit/dynamic_object.hpp b/include/chaiscript/dispatchkit/dynamic_object.hpp index b5afaf15..94fcbff2 100644 --- a/include/chaiscript/dispatchkit/dynamic_object.hpp +++ b/include/chaiscript/dispatchkit/dynamic_object.hpp @@ -44,7 +44,7 @@ namespace chaiscript { public: explicit Dynamic_Object(std::string t_type_name) - : m_type_name(std::move(t_type_name)), m_option_explicit(false) + : m_type_name(std::move(t_type_name)) { } @@ -77,7 +77,7 @@ namespace chaiscript const Boxed_Value &get_attr(const std::string &t_attr_name) const { - auto a = m_attrs.find(t_attr_name); + const auto a = m_attrs.find(t_attr_name); if (a != m_attrs.end()) { return a->second; diff --git a/include/chaiscript/dispatchkit/dynamic_object_detail.hpp b/include/chaiscript/dispatchkit/dynamic_object_detail.hpp index df90ab66..91e29071 100644 --- a/include/chaiscript/dispatchkit/dynamic_object_detail.hpp +++ b/include/chaiscript/dispatchkit/dynamic_object_detail.hpp @@ -68,7 +68,7 @@ namespace chaiscript } - Dynamic_Object_Function &operator=(const Dynamic_Object_Function) = delete; + Dynamic_Object_Function &operator=(Dynamic_Object_Function) = delete; Dynamic_Object_Function(Dynamic_Object_Function &) = delete; bool operator==(const Proxy_Function_Base &f) const override @@ -189,7 +189,7 @@ namespace chaiscript static std::vector build_type_list(const std::vector &tl) { auto begin = tl.begin(); - auto end = tl.end(); + const auto end = tl.end(); if (begin != end) { @@ -201,7 +201,7 @@ namespace chaiscript bool operator==(const Proxy_Function_Base &f) const override { - const Dynamic_Object_Constructor *dc = dynamic_cast(&f); + const auto *dc = dynamic_cast(&f); return (dc != nullptr) && dc->m_type_name == m_type_name && (*dc->m_func) == (*m_func); } diff --git a/include/chaiscript/dispatchkit/function_call.hpp b/include/chaiscript/dispatchkit/function_call.hpp index 1980f35c..affcf8ff 100644 --- a/include/chaiscript/dispatchkit/function_call.hpp +++ b/include/chaiscript/dispatchkit/function_call.hpp @@ -38,6 +38,7 @@ namespace chaiscript /// build_function_caller(dispatchkit.get_function("print")); /// \returns A std::function object for dispatching /// \param[in] funcs the set of functions to dispatch on. + /// \param t_conversions template std::function functor(const std::vector &funcs, const Type_Conversions_State *t_conversions) { @@ -65,6 +66,7 @@ namespace chaiscript /// } /// \returns A std::function object for dispatching /// \param[in] func A function to execute. + /// \param t_conversions template std::function functor(Const_Proxy_Function func, const Type_Conversions_State *t_conversions) { diff --git a/include/chaiscript/dispatchkit/function_call_detail.hpp b/include/chaiscript/dispatchkit/function_call_detail.hpp index d6cb241f..bbafb1fb 100644 --- a/include/chaiscript/dispatchkit/function_call_detail.hpp +++ b/include/chaiscript/dispatchkit/function_call_detail.hpp @@ -41,7 +41,7 @@ namespace chaiscript return boxed_cast(dispatch::dispatch(t_funcs, params, *t_conversions), t_conversions); } else { Type_Conversions conv; - Type_Conversions_State state(conv, conv.conversion_saves()); + const Type_Conversions_State state(conv, conv.conversion_saves()); return boxed_cast(dispatch::dispatch(t_funcs, params, state), t_conversions); } } @@ -60,7 +60,7 @@ namespace chaiscript return Boxed_Number(dispatch::dispatch(t_funcs, params, *t_conversions)).get_as(); } else { Type_Conversions conv; - Type_Conversions_State state(conv, conv.conversion_saves()); + const Type_Conversions_State state(conv, conv.conversion_saves()); return Boxed_Number(dispatch::dispatch(t_funcs, params, state)).get_as(); } } @@ -80,7 +80,7 @@ namespace chaiscript dispatch::dispatch(t_funcs, params, *t_conversions); } else { Type_Conversions conv; - Type_Conversions_State state(conv, conv.conversion_saves()); + const Type_Conversions_State state(conv, conv.conversion_saves()); dispatch::dispatch(t_funcs, params, state); } } diff --git a/include/chaiscript/dispatchkit/proxy_functions.hpp b/include/chaiscript/dispatchkit/proxy_functions.hpp index 0c60315f..f4d75563 100644 --- a/include/chaiscript/dispatchkit/proxy_functions.hpp +++ b/include/chaiscript/dispatchkit/proxy_functions.hpp @@ -360,7 +360,7 @@ namespace chaiscript bool operator==(const Proxy_Function_Base &rhs) const override { - const Dynamic_Proxy_Function *prhs = dynamic_cast(&rhs); + const auto *prhs = dynamic_cast(&rhs); return this == &rhs || ((prhs != nullptr) @@ -733,7 +733,7 @@ namespace chaiscript bool operator==(const Proxy_Function_Base &t_func) const override { - const Attribute_Access * aa + const auto * aa = dynamic_cast *>(&t_func); if (aa) { diff --git a/include/chaiscript/dispatchkit/short_alloc.hpp b/include/chaiscript/dispatchkit/short_alloc.hpp index e1cc9a96..520ffe5f 100644 --- a/include/chaiscript/dispatchkit/short_alloc.hpp +++ b/include/chaiscript/dispatchkit/short_alloc.hpp @@ -123,7 +123,7 @@ public: T* allocate(std::size_t n) { - return reinterpret_cast(a_.template allocate(n*sizeof(T))); + return reinterpret_cast(a_.allocate(n*sizeof(T))); } void deallocate(T* p, std::size_t n) noexcept { diff --git a/include/chaiscript/dispatchkit/type_conversions.hpp b/include/chaiscript/dispatchkit/type_conversions.hpp index d9d2f374..fa33ae66 100644 --- a/include/chaiscript/dispatchkit/type_conversions.hpp +++ b/include/chaiscript/dispatchkit/type_conversions.hpp @@ -156,11 +156,11 @@ namespace chaiscript if (t_from.is_const()) { const From &d = detail::Cast_Helper::cast(t_from, nullptr); - const To &data = static_cast(d); + const auto &data = static_cast(d); return Boxed_Value(std::cref(data)); } else { From &d = detail::Cast_Helper::cast(t_from, nullptr); - To &data = static_cast(d); + auto &data = static_cast(d); return Boxed_Value(std::ref(data)); } } @@ -221,11 +221,11 @@ namespace chaiscript if (t_from.is_const()) { const From &d = detail::Cast_Helper::cast(t_from, nullptr); - const To &data = dynamic_cast(d); + const auto &data = dynamic_cast(d); return Boxed_Value(std::cref(data)); } else { From &d = detail::Cast_Helper::cast(t_from, nullptr); - To &data = dynamic_cast(d); + auto &data = dynamic_cast(d); return Boxed_Value(std::ref(data)); } } @@ -335,18 +335,15 @@ namespace chaiscript }; Type_Conversions() - : m_mutex(), - m_conversions(), - m_convertableTypes(), - m_num_types(0) + : m_num_types(0) { } Type_Conversions(const Type_Conversions &t_other) = delete; - Type_Conversions(Type_Conversions &&) = default; + Type_Conversions(Type_Conversions &&) = default; //? this is implicitly deleted (because member not assignable or ...) Type_Conversions &operator=(const Type_Conversions &) = delete; - Type_Conversions &operator=(Type_Conversions &&) = default; + Type_Conversions &operator=(Type_Conversions &&) = default; // ? implcitly deleted const std::set &thread_cache() const { @@ -436,8 +433,7 @@ namespace chaiscript t_saves.enabled = t_val; } - std::vector take_saves(Conversion_Saves &t_saves) - { + std::vector take_saves(Conversion_Saves &t_saves) const { std::vector ret; std::swap(ret, t_saves.saves); return ret; @@ -504,8 +500,8 @@ namespace chaiscript std::set> m_conversions; std::set m_convertableTypes; std::atomic_size_t m_num_types; - mutable chaiscript::detail::threading::Thread_Storage> m_thread_cache; - mutable chaiscript::detail::threading::Thread_Storage m_conversion_saves; + mutable chaiscript::detail::threading::Thread_Storage> m_thread_cache{}; + mutable chaiscript::detail::threading::Thread_Storage m_conversion_saves{}; }; class Type_Conversions_State diff --git a/include/chaiscript/language/chaiscript_common.hpp b/include/chaiscript/language/chaiscript_common.hpp index b1e16688..e33f3b16 100644 --- a/include/chaiscript/language/chaiscript_common.hpp +++ b/include/chaiscript/language/chaiscript_common.hpp @@ -73,7 +73,7 @@ namespace chaiscript Logical_And, Bitwise_Or, Bitwise_Xor, Bitwise_And, Equality, Comparison, Shift, Addition, Multiplication, Prefix }; - namespace + namespace // TODO:: should not use unnamed namespaces in header files { /// Helper lookup to get the name of each node type inline const char *ast_node_type_to_string(AST_Node_Type ast_node_type) { @@ -263,7 +263,7 @@ namespace chaiscript const chaiscript::detail::Dispatch_Engine &t_ss) { assert(t_func); - int arity = t_func->get_arity(); + const int arity = t_func->get_arity(); std::vector types = t_func->get_param_types(); std::string retval; @@ -308,16 +308,16 @@ namespace chaiscript } - std::shared_ptr dynfun + const std::shared_ptr dynfun = std::dynamic_pointer_cast(t_func); if (dynfun && dynfun->has_parse_tree()) { - Proxy_Function f = dynfun->get_guard(); + const Proxy_Function f = dynfun->get_guard(); if (f) { - auto dynfunguard = std::dynamic_pointer_cast(f); + const auto dynfunguard = std::dynamic_pointer_cast(f); if (dynfunguard && dynfunguard->has_parse_tree()) { retval += " : " + format_guard(dynfunguard->get_parse_tree()); @@ -598,8 +598,7 @@ namespace chaiscript return oss.str(); } - std::vector get_children(const AST_Node &node) - { + std::vector get_children(const AST_Node &node) const { const auto node_children = node.get_children(); return std::vector(node_children.begin(), node_children.end()); } @@ -707,13 +706,11 @@ namespace chaiscript m_ds->pop_function_call(m_ds.stack_holder(), m_ds.conversion_saves()); } - void save_params(const std::vector &t_params) - { + void save_params(const std::vector &t_params) const { m_ds->save_function_params(t_params); } - void save_params(std::initializer_list t_params) - { + void save_params(std::initializer_list t_params) const { m_ds->save_function_params(t_params); } diff --git a/include/chaiscript/language/chaiscript_engine.hpp b/include/chaiscript/language/chaiscript_engine.hpp index fff85873..6bf13598 100644 --- a/include/chaiscript/language/chaiscript_engine.hpp +++ b/include/chaiscript/language/chaiscript_engine.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -298,7 +299,7 @@ namespace chaiscript std::vector t_module_paths = {}, std::vector t_use_paths = {}, const std::vector &t_opts = chaiscript::default_options()) - : ChaiScript_Basic({}, std::move(parser), t_module_paths, t_use_paths, t_opts) + : ChaiScript_Basic({}, std::move(parser), std::move(t_module_paths), std::move(t_use_paths), t_opts) { try { // attempt to load the stdlib @@ -323,8 +324,7 @@ explicit ChaiScript_Basic(std::unique_ptr &&pars const std::vector &t_opts = chaiscript::default_options()) = delete; #endif - parser::ChaiScript_Parser_Base &get_parser() - { + parser::ChaiScript_Parser_Base &get_parser() const { return *m_parser; } @@ -337,8 +337,7 @@ explicit ChaiScript_Basic(std::unique_ptr &&pars } } - AST_NodePtr parse(const std::string &t_input, const bool t_debug_print = false) - { + AST_NodePtr parse(const std::string &t_input, const bool t_debug_print = false) const { auto ast = m_parser->parse(t_input, "PARSE"); if (t_debug_print) { m_parser->debug_print(*ast); @@ -371,6 +370,7 @@ explicit ChaiScript_Basic(std::unique_ptr &&pars try { const auto appendedpath = path + t_filename; + // l and l2 never used? chaiscript::detail::threading::unique_lock l(m_use_mutex); chaiscript::detail::threading::unique_lock l2(m_mutex); @@ -569,7 +569,7 @@ explicit ChaiScript_Basic(std::unique_ptr &&pars #else std::vector errors; std::string version_stripped_name = t_module_name; - size_t version_pos = version_stripped_name.find("-" + Build_Info::version()); + const size_t version_pos = version_stripped_name.find("-" + Build_Info::version()); if (version_pos != std::string::npos) { version_stripped_name.erase(version_pos); @@ -616,7 +616,7 @@ explicit ChaiScript_Basic(std::unique_ptr &&pars if (m_loaded_modules.count(t_module_name) == 0) { - detail::Loadable_Module_Ptr lm(new detail::Loadable_Module(t_module_name, t_filename)); + const detail::Loadable_Module_Ptr lm(new detail::Loadable_Module(t_module_name, t_filename)); m_loaded_modules[t_module_name] = lm; m_active_loaded_modules.insert(t_module_name); add(lm->m_moduleptr); diff --git a/include/chaiscript/language/chaiscript_eval.hpp b/include/chaiscript/language/chaiscript_eval.hpp index f6472933..ba80058b 100644 --- a/include/chaiscript/language/chaiscript_eval.hpp +++ b/include/chaiscript/language/chaiscript_eval.hpp @@ -47,7 +47,7 @@ namespace chaiscript { template struct AST_Node_Impl; - template using AST_Node_Impl_Ptr = typename std::unique_ptr>; + template using AST_Node_Impl_Ptr = std::unique_ptr>; namespace detail { @@ -57,7 +57,7 @@ namespace chaiscript chaiscript::detail::Dispatch_State state(t_ss); const Boxed_Value *thisobj = [&]() -> const Boxed_Value *{ - auto &stack = t_ss.get_stack_data(state.stack_holder()).back(); + auto &stack = chaiscript::detail::Dispatch_Engine::get_stack_data(state.stack_holder()).back(); if (!stack.empty() && stack.back().first == "__this") { return &stack.back().second; } else if (!t_vals.empty()) { @@ -325,7 +325,7 @@ namespace chaiscript fpp.save_params(params); } - Boxed_Value fn(this->children[0]->eval(t_ss)); + const Boxed_Value fn(this->children[0]->eval(t_ss)); using ConstFunctionTypePtr = const dispatch::Proxy_Function_Base *; try { @@ -337,7 +337,7 @@ namespace chaiscript catch(const exception::bad_boxed_cast &){ try { using ConstFunctionTypeRef = const Const_Proxy_Function &; - Const_Proxy_Function f = t_ss->boxed_cast(fn); + const Const_Proxy_Function f = t_ss->boxed_cast(fn); // handle the case where there is only 1 function to try to call and dispatch fails on it throw exception::eval_error("Error calling function '" + this->children[0]->text + "'", params, {f}, false, *t_ss); } catch (const exception::bad_boxed_cast &) { @@ -689,7 +689,7 @@ namespace chaiscript const auto numparams = this->children[1]->children.size(); const auto param_types = Arg_List_AST_Node::get_arg_types(*this->children[1], t_ss); - std::reference_wrapper engine(*t_ss); + const std::reference_wrapper engine(*t_ss); return Boxed_Value( dispatch::make_dynamic_proxy_function( @@ -1020,7 +1020,7 @@ namespace chaiscript chaiscript::eval::detail::Scope_Push_Pop spp(t_ss); - Boxed_Value match_value(this->children[0]->eval(t_ss)); + const Boxed_Value match_value(this->children[0]->eval(t_ss)); while (!breaking && (currentCase < this->children.size())) { try { @@ -1322,7 +1322,7 @@ namespace chaiscript else if (catch_block.children.size() == 3) { //Variable capture, guards - bool guard = false; + bool guard; try { guard = boxed_cast(catch_block.children[1]->eval(t_ss)); } catch (const exception::bad_boxed_cast &) { diff --git a/include/chaiscript/language/chaiscript_optimizer.hpp b/include/chaiscript/language/chaiscript_optimizer.hpp index a8118fba..865dcaa2 100644 --- a/include/chaiscript/language/chaiscript_optimizer.hpp +++ b/include/chaiscript/language/chaiscript_optimizer.hpp @@ -160,6 +160,7 @@ namespace chaiscript { } else { const auto new_children = [&](){ std::vector> retval; + retval.reserve(keepers.size()); for (const auto x : keepers) { retval.push_back(std::move(node->children[x])); diff --git a/include/chaiscript/language/chaiscript_parser.hpp b/include/chaiscript/language/chaiscript_parser.hpp index c82aff38..cb8cfbe3 100644 --- a/include/chaiscript/language/chaiscript_parser.hpp +++ b/include/chaiscript/language/chaiscript_parser.hpp @@ -29,6 +29,7 @@ #include "chaiscript_tracer.hpp" #include "../utility/fnv1a.hpp" #include "../utility/static_string.hpp" +#include #if defined(CHAISCRIPT_UTF16_UTF32) #include @@ -126,7 +127,7 @@ namespace chaiscript static std::array, detail::max_alphabet> build_alphabet() { - std::array, detail::max_alphabet> alphabet; + std::array, detail::max_alphabet> alphabet{}; for (auto &alpha : alphabet) { alpha.fill(false); @@ -461,8 +462,7 @@ namespace chaiscript /// Reads a symbol group from input if it matches the parameter, without skipping initial whitespace - inline auto Symbol_(const utility::Static_String &sym) - { + inline auto Symbol_(const utility::Static_String &sym) { const auto len = sym.size(); if (m_position.remaining() >= len) { const char *file_pos = &(*m_position); @@ -675,7 +675,7 @@ namespace chaiscript for (; i > 0; --i) { - char val = t_val[i-1]; + const char val = t_val[i-1]; if (val == 'f' || val == 'F') { @@ -739,7 +739,7 @@ namespace chaiscript #endif try { - auto u = std::stoll(val,nullptr,base); + const auto u = std::stoll(val,nullptr,base); if (!unsigned_ && !long_ && u >= std::numeric_limits::min() && u <= std::numeric_limits::max()) { @@ -761,7 +761,7 @@ namespace chaiscript } catch (const std::out_of_range &) { // too big to be signed try { - auto u = std::stoull(val,nullptr,base); + const auto u = std::stoull(val,nullptr,base); if (!longlong_ && u >= std::numeric_limits::min() && u <= std::numeric_limits::max()) { return const_var(static_cast(u)); @@ -1210,7 +1210,7 @@ namespace chaiscript std::string match; const auto prev_stack_top = m_match_stack.size(); - bool is_interpolated = [&]()->bool { + const bool is_interpolated = [&]()->bool { Char_Parser cparser(match, true); @@ -1409,7 +1409,7 @@ namespace chaiscript bool retval = Symbol_(t_s); // ignore substring matches - if (retval && m_position.has_more() && (t_disallow_prevention == false) && char_in_alphabet(*m_position,detail::symbol_alphabet)) { + if (retval && m_position.has_more() && !t_disallow_prevention && char_in_alphabet(*m_position,detail::symbol_alphabet)) { if (*m_position != '=' && is_operator(Position::str(start, m_position)) && !is_operator(Position::str(start, m_position+1))) { // don't throw this away, it's a good match and the next is not } else { @@ -1791,7 +1791,7 @@ namespace chaiscript bool Class(const bool t_class_allowed) { bool retval = false; - size_t prev_stack_top = m_match_stack.size(); + const size_t prev_stack_top = m_match_stack.size(); if (Keyword("class")) { if (!t_class_allowed) { diff --git a/include/chaiscript/language/chaiscript_posix.hpp b/include/chaiscript/language/chaiscript_posix.hpp index 87b66881..5b0a423a 100644 --- a/include/chaiscript/language/chaiscript_posix.hpp +++ b/include/chaiscript/language/chaiscript_posix.hpp @@ -6,6 +6,7 @@ #ifndef CHAISCRIPT_POSIX_HPP_ #define CHAISCRIPT_POSIX_HPP_ +#include "../dispatchkit/bootstrap.hpp" namespace chaiscript { @@ -29,12 +30,9 @@ namespace chaiscript DLModule(const DLModule &) = delete; DLModule &operator=(const DLModule &) = delete; - ~DLModule() - { - dlclose(m_data); - } + ~DLModule() = default; - void *m_data; + void *m_data{}; }; template @@ -59,9 +57,13 @@ namespace chaiscript } DLModule m_dlmodule; - DLSym m_func; - ModulePtr m_moduleptr; + DLSym m_func{}; + ModulePtr m_moduleptr{}; }; + + inline Loadable_Module::DLModule::~DLModule() { + dlclose(m_data); + } } } #endif diff --git a/include/chaiscript/language/chaiscript_prelude_docs.hpp b/include/chaiscript/language/chaiscript_prelude_docs.hpp index 7df56521..38e758a8 100644 --- a/include/chaiscript/language/chaiscript_prelude_docs.hpp +++ b/include/chaiscript/language/chaiscript_prelude_docs.hpp @@ -2,6 +2,9 @@ /// regarding the ChaiScript standard runtime library. /// \brief Items in this namespace exist in the ChaiScript language runtime. They are not part of the C++ API +#ifndef CHAISCRIPT_PRELUDE_DOCS_HPP +#define CHAISCRIPT_PRELUDE_DOCS_HPP + namespace ChaiScript_Language { @@ -58,7 +61,7 @@ class Map_Pair { public: /// \brief Returns the key of the Map entry - const string first(); + string first(); /// \brief Returns the value Object of the Map entry Object second(); @@ -596,7 +599,7 @@ bool even(Object x); /// eval> odd(4) /// false /// \endcode -bool even(Object x); +bool odd(Object x); /// \brief Applies the function f over each element in the Range c. @@ -828,3 +831,4 @@ Const_Range retro(Const_Range); void throw(Object); } +#endif // CHAISCRIPT_PRELUDE_DOCS_HPP diff --git a/include/chaiscript/language/chaiscript_tracer.hpp b/include/chaiscript/language/chaiscript_tracer.hpp index 9d111815..0e0e488f 100644 --- a/include/chaiscript/language/chaiscript_tracer.hpp +++ b/include/chaiscript/language/chaiscript_tracer.hpp @@ -13,8 +13,7 @@ namespace chaiscript { struct Noop_Tracer_Detail { - template - void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl *) + template static void trace(const chaiscript::detail::Dispatch_State &, const AST_Node_Impl *) { } }; diff --git a/include/chaiscript/language/chaiscript_unknown.hpp b/include/chaiscript/language/chaiscript_unknown.hpp index 8fc1d494..b83819ef 100644 --- a/include/chaiscript/language/chaiscript_unknown.hpp +++ b/include/chaiscript/language/chaiscript_unknown.hpp @@ -23,7 +23,7 @@ namespace chaiscript #endif } - ModulePtr m_moduleptr; + ModulePtr m_moduleptr{}; }; } } diff --git a/include/chaiscript/utility/json.hpp b/include/chaiscript/utility/json.hpp index c6988d54..95344362 100644 --- a/include/chaiscript/utility/json.hpp +++ b/include/chaiscript/utility/json.hpp @@ -134,7 +134,7 @@ class JSON Internal( int64_t l ) : Int( l ), Type(Class::Integral) {} Internal( bool b ) : Bool( b ), Type(Class::Boolean) {} Internal( std::string s ) : String(std::make_unique(std::move(s))), Type(Class::String) {} - Internal() : Type(Class::Null) {} + Internal() = default; Internal(Class t_type) { set_type(t_type); @@ -349,43 +349,39 @@ class JSON JSONWrapper object_range() { if( internal.Type == Class::Object ) { - return JSONWrapper( internal.Map.get() ); - } else { - return JSONWrapper( nullptr ); + return { internal.Map.get() }; } + return { nullptr }; } JSONWrapper> array_range() { if( internal.Type == Class::Array ) { - return JSONWrapper>( internal.List.get() ); - } else { - return JSONWrapper>( nullptr ); + return { internal.List.get() }; } + return { nullptr }; } JSONConstWrapper object_range() const { if( internal.Type == Class::Object ) { - return JSONConstWrapper( internal.Map.get() ); - } else { - return JSONConstWrapper( nullptr ); + return { internal.Map.get() }; } + return { nullptr }; } JSONConstWrapper> array_range() const { if( internal.Type == Class::Array ) { - return JSONConstWrapper>( internal.List.get() ); - } else { - return JSONConstWrapper>( nullptr ); + return { internal.List.get() }; } + return { nullptr }; } - std::string dump( long depth = 1, std::string tab = " ") const { + std::string dump( long depth = 1, const std::string &tab = " ") const { switch( internal.Type ) { case Class::Null: return "null"; case Class::Object: { - std::string pad = ""; + std::string pad; for( long i = 0; i < depth; ++i, pad += tab ) { } std::string s = "{\n"; @@ -482,7 +478,7 @@ struct JSONParser { throw std::runtime_error(std::string("JSON ERROR: Object: Expected colon, found '") + str.at(offset) + "'\n"); } consume_ws( str, ++offset ); - JSON Value = parse_next( str, offset ); + const JSON Value = parse_next( str, offset ); Object[Key.to_string()] = Value; consume_ws( str, offset ); @@ -645,9 +641,8 @@ struct JSONParser { } static JSON parse_next( const std::string &str, size_t &offset ) { - char value; consume_ws( str, offset ); - value = str.at(offset); + const char value = str.at(offset); switch( value ) { case '[' : return parse_array( str, offset ); case '{' : return parse_object( str, offset ); diff --git a/include/chaiscript/utility/utility.hpp b/include/chaiscript/utility/utility.hpp index b743c451..7e388b34 100644 --- a/include/chaiscript/utility/utility.hpp +++ b/include/chaiscript/utility/utility.hpp @@ -48,7 +48,7 @@ namespace chaiscript /// {fun(static_cast(&test::operator=)), "=" } /// } /// ); - /// + /// \endcode template void add_class(ModuleType &t_module, const std::string &t_class_name, @@ -115,6 +115,7 @@ namespace chaiscript { t_module.add_global_const(chaiscript::const_var(EnumClass(constant.first)), constant.second); } + return {}; } } } diff --git a/samples/example.cpp b/samples/example.cpp index 4810a127..656725d3 100644 --- a/samples/example.cpp +++ b/samples/example.cpp @@ -121,7 +121,7 @@ int main(int /*argc*/, char * /*argv*/[]) { //If we would like a type-safe return value from all call, we can use //the templated version of eval: - int i = chai.eval("5+5"); + const auto i = chai.eval("5+5"); std::cout << "5+5: " << i << '\n'; @@ -129,7 +129,7 @@ int main(int /*argc*/, char * /*argv*/[]) { chai("var scripti = 15"); //We can even get a handle to the variables in the system - int &scripti = chai.eval("scripti"); + auto &scripti = chai.eval("scripti"); std::cout << "scripti: " << scripti << '\n'; scripti *= 2; @@ -139,7 +139,7 @@ int main(int /*argc*/, char * /*argv*/[]) { //To do: Add examples of handling Boxed_Values directly when needed //Creating a functor on the stack and using it immediately - int x = chai.eval >("fun (x, y) { return x + y; }")(5, 6); + const int x = chai.eval >("fun (x, y) { return x + y; }")(5, 6); std::stringstream ss; ss << x; diff --git a/samples/factory.cpp b/samples/factory.cpp index 976868b5..bb886a9a 100644 --- a/samples/factory.cpp +++ b/samples/factory.cpp @@ -7,9 +7,9 @@ class Entity int height; int x; int y; - std::string name; + std::string name{}; - std::function updater; + std::function updater{}; Entity(const int t_width, const int t_height, const int t_x, const int t_y, std::string t_name) : width(t_width), height(t_height), x(t_x), y(t_y), name(std::move(t_name)) @@ -72,7 +72,7 @@ int main() chai.add(chaiscript::user_type(), "Factory"); // this isn't strictly necessary but makes error messages nicer - Factory f; + Factory f{}; chai.add(chaiscript::var(&f), "f"); std::string script = R""( diff --git a/samples/fun_call_performance.cpp b/samples/fun_call_performance.cpp index 31fa606c..8e64aab1 100644 --- a/samples/fun_call_performance.cpp +++ b/samples/fun_call_performance.cpp @@ -24,7 +24,7 @@ #else char *mystrdup(const char *s) { - size_t len = strlen(s); // Space for length plus nul + const size_t len = strlen(s); // Space for length plus nul char *d = static_cast(malloc(len + 1)); if (d == nullptr) return nullptr; // No memory #ifdef CHAISCRIPT_MSVC @@ -75,8 +75,8 @@ std::vector default_search_paths() std::string exepath(path, size); - size_t lastslash = exepath.rfind('\\'); - size_t secondtolastslash = exepath.rfind('\\', lastslash - 1); + const size_t lastslash = exepath.rfind('\\'); + const size_t secondtolastslash = exepath.rfind('\\', lastslash - 1); if (lastslash != std::string::npos) { paths.push_back(exepath.substr(0, lastslash)); @@ -84,7 +84,7 @@ std::vector default_search_paths() if (secondtolastslash != std::string::npos) { - return{ exepath.substr(0, secondtolastslash) + "\\lib\\chaiscript\\" }; + return{ exepath.substr(0, secondtolastslash) + R"(\lib\chaiscript\)"}; } #else @@ -236,7 +236,7 @@ void interactive(chaiscript::ChaiScript& chai) using_history(); for (;;) { - std::string input = get_next_command(); + const std::string input = get_next_command(); try { // evaluate input chaiscript::Boxed_Value val = chai.eval(input); @@ -251,7 +251,7 @@ void interactive(chaiscript::ChaiScript& chai) } catch (const chaiscript::exception::eval_error &ee) { std::cout << ee.what(); - if (ee.call_stack.size() > 0) { + if (!ee.call_stack.empty()) { std::cout << "during evaluation at (" << ee.call_stack[0].start().line << ", " << ee.call_stack[0].start().column << ")"; } std::cout << std::endl; @@ -315,7 +315,7 @@ int main(int argc, char *argv[]) } clock_t end = clock(); - double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; + const double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; //begin = clock(); @@ -375,7 +375,7 @@ int main(int argc, char *argv[]) mode = eFile; } - chaiscript::Boxed_Value val; + chaiscript::Boxed_Value val; /* never accessed? */ try { switch (mode) { case eInteractive: interactive(chai); break; @@ -386,7 +386,7 @@ int main(int argc, char *argv[]) val = chai.eval_file(arg); end = clock(); - double elapsed_secs1 = double(end - begin) / CLOCKS_PER_SEC; + const auto elapsed_secs1 = double(end - begin) / CLOCKS_PER_SEC; printf("**C++::time= %.10f\n", elapsed_secs); printf("**ChaiScript::time= %.10f\n", elapsed_secs1); break; diff --git a/samples/inheritance.cpp b/samples/inheritance.cpp index 1c9ddb63..92e320bf 100644 --- a/samples/inheritance.cpp +++ b/samples/inheritance.cpp @@ -3,15 +3,13 @@ class BaseClass { public: - BaseClass() - { - } + BaseClass() = default; - BaseClass(const BaseClass &) = default; + BaseClass(const BaseClass &) = default; - virtual ~BaseClass() {} + virtual ~BaseClass() = default; - virtual std::string doSomething(float, double) const = 0; + virtual std::string doSomething(float, double) const = default; void setValue(const std::string &t_val) { @@ -29,7 +27,7 @@ class BaseClass virtual bool validateValue(const std::string &t_val) = 0; private: - std::string m_value; + std::string m_value{}; }; class ChaiScriptDerived : public BaseClass @@ -63,8 +61,8 @@ class ChaiScriptDerived : public BaseClass t_param = chaiscript::boxed_cast(t_func); } - std::function m_doSomethingImpl; - std::function m_validateValueImpl; + std::function m_doSomethingImpl{}; + std::function m_validateValueImpl{}; }; int main() @@ -126,7 +124,7 @@ int main() assert(myderived.getValue() == "new"); // call the other derived method via chaiscript and return the value to c++ land: - std::string retval = chai.eval("myderived.doSomething(2,4.3)"); + auto retval = chai.eval("myderived.doSomething(2,4.3)"); assert(retval == "new8.6"); // The whole process is fully orthogonal diff --git a/samples/memory_leak_test.cpp b/samples/memory_leak_test.cpp index 513656b7..381616e2 100644 --- a/samples/memory_leak_test.cpp +++ b/samples/memory_leak_test.cpp @@ -23,7 +23,7 @@ std::string get_next_command() { #endif } -void function(void) +void function() { // do nothing } @@ -40,7 +40,7 @@ class test chai.add(chaiscript::fun(&function),"Whatever()"); } - void RunFile(std::string sFile) + void RunFile(const std::string &sFile) { try { chaiscript::Boxed_Value val = chai.eval_file(sFile); @@ -56,10 +56,10 @@ class test int main(int /*argc*/, char * /*argv*/[]) { - test myChai; + test myChai{}; - std::string command = ""; + std::string command; // // this loop increases memory usage, if RunFile is not called (just hitting enter) diff --git a/src/libfuzzer_client.cpp b/src/libfuzzer_client.cpp index 1c90d0ba..4d414739 100644 --- a/src/libfuzzer_client.cpp +++ b/src/libfuzzer_client.cpp @@ -27,7 +27,7 @@ #else char *mystrdup (const char *s) { - size_t len = strlen(s); // Space for length plus nul + const size_t len = strlen(s); // Space for length plus nul char *d = static_cast(malloc (len+1)); if (d == nullptr) { return nullptr; } // No memory #ifdef CHAISCRIPT_MSVC @@ -78,8 +78,8 @@ std::vector default_search_paths() std::string exepath(path, size); - size_t lastslash = exepath.rfind('\\'); - size_t secondtolastslash = exepath.rfind('\\', lastslash - 1); + const size_t lastslash = exepath.rfind('\\'); + const size_t secondtolastslash = exepath.rfind('\\', lastslash - 1); if (lastslash != std::string::npos) { paths.push_back(exepath.substr(0, lastslash)); @@ -87,7 +87,7 @@ std::vector default_search_paths() if (secondtolastslash != std::string::npos) { - return {exepath.substr(0, secondtolastslash) + "\\lib\\chaiscript\\"}; + return {exepath.substr(0, secondtolastslash) + R"(\lib\chaiscript\)"}; } #else @@ -128,7 +128,7 @@ std::vector default_search_paths() exepath = std::string(rInfo.dli_fname); } - size_t lastslash = exepath.rfind('/'); + const size_t lastslash = exepath.rfind('/'); size_t secondtolastslash = exepath.rfind('/', lastslash - 1); if (lastslash != std::string::npos) @@ -231,7 +231,7 @@ void interactive(chaiscript::ChaiScript_Basic& chai) using_history(); for (;;) { - std::string input = get_next_command(); + const std::string input = get_next_command(); try { // evaluate input chaiscript::Boxed_Value val = chai.eval(input); diff --git a/src/main.cpp b/src/main.cpp index f3bd2d82..1da06c26 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,7 +27,7 @@ #else char *mystrdup (const char *s) { - size_t len = strlen(s); // Space for length plus nul + const size_t len = strlen(s); // Space for length plus nul char *d = static_cast(malloc (len+1)); if (d == nullptr) { return nullptr; } // No memory #ifdef CHAISCRIPT_MSVC @@ -78,8 +78,8 @@ std::vector default_search_paths() std::string exepath(path, size); - size_t lastslash = exepath.rfind('\\'); - size_t secondtolastslash = exepath.rfind('\\', lastslash - 1); + const size_t lastslash = exepath.rfind('\\'); + const size_t secondtolastslash = exepath.rfind('\\', lastslash - 1); if (lastslash != std::string::npos) { paths.push_back(exepath.substr(0, lastslash)); @@ -87,7 +87,7 @@ std::vector default_search_paths() if (secondtolastslash != std::string::npos) { - return {exepath.substr(0, secondtolastslash) + "\\lib\\chaiscript\\"}; + return {exepath.substr(0, secondtolastslash) + R"(\lib\chaiscript\)"}; } #else @@ -128,7 +128,7 @@ std::vector default_search_paths() exepath = std::string(rInfo.dli_fname); } - size_t lastslash = exepath.rfind('/'); + const size_t lastslash = exepath.rfind('/'); size_t secondtolastslash = exepath.rfind('/', lastslash - 1); if (lastslash != std::string::npos) @@ -231,7 +231,7 @@ void interactive(chaiscript::ChaiScript_Basic& chai) using_history(); for (;;) { - std::string input = get_next_command(); + const std::string input = get_next_command(); try { // evaluate input chaiscript::Boxed_Value val = chai.eval(input); diff --git a/src/test_module.cpp b/src/test_module.cpp index fcb255e5..dcb3e24e 100644 --- a/src/test_module.cpp +++ b/src/test_module.cpp @@ -13,10 +13,10 @@ class TestBaseType TestBaseType(int *) : val(10), const_val(15), mdarray{} { } TestBaseType(const TestBaseType &) = default; - virtual ~TestBaseType() {} + virtual ~TestBaseType() = default; virtual int func() { return 0; } - int base_only_func() { return -9; } + int base_only_func() const { return -9; } const TestBaseType &constMe() const { return *this; } @@ -24,19 +24,19 @@ class TestBaseType const int const_val; const int *const_val_ptr = &const_val; - const int *get_const_val_ptr() { + const int *get_const_val_ptr() const { return const_val_ptr; } int mdarray[2][3][5]; - std::function func_member; + std::function func_member{}; void set_string_val(std::string &t_str) { t_str = "42"; } - private: + //private: TestBaseType &operator=(const TestBaseType &) = delete; }; @@ -44,7 +44,7 @@ class Type2 { public: Type2(TestBaseType t_bt) - : m_bt(std::move(t_bt)), + : m_bt(t_bt), m_str("Hello World") { } @@ -77,14 +77,15 @@ int to_int(TestEnum t) class TestDerivedType : public TestBaseType { + ; public: - virtual ~TestDerivedType() {} + virtual ~TestDerivedType() = default; TestDerivedType(const TestDerivedType &) = default; TestDerivedType() = default; virtual int func() override { return 1; } int derived_only_func() { return 19; } - private: + //private: TestDerivedType &operator=(const TestDerivedType &) = delete; }; @@ -93,7 +94,7 @@ class TestMoreDerivedType : public TestDerivedType public: TestMoreDerivedType(const TestMoreDerivedType &) = default; TestMoreDerivedType() = default; - virtual ~TestMoreDerivedType() {} + virtual ~TestMoreDerivedType() = default; }; std::shared_ptr derived_type_factory() diff --git a/unittests/boxed_cast_test.cpp b/unittests/boxed_cast_test.cpp index 855619a3..cabe0d2a 100644 --- a/unittests/boxed_cast_test.cpp +++ b/unittests/boxed_cast_test.cpp @@ -27,19 +27,14 @@ bool run_test_type_conversion(const Boxed_Value &bv, bool expectedpass) std::cerr << "Unexpected unknown exception when attempting cast_conversion.\n"; return false; } - - if (expectedpass) - { - return true; - } else { - return false; - } + + return expectedpass; } template bool test_type_conversion(const Boxed_Value &bv, bool expectedpass) { - bool ret = run_test_type_conversion(bv, expectedpass); + const bool ret = run_test_type_conversion(bv, expectedpass); if (!ret) { @@ -113,7 +108,7 @@ bool built_in_type_test(const T &initial, bool ispod) bool passed = true; /** value tests **/ - T i = T(initial); + auto i = T(initial); passed &= do_test(var(i), true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, @@ -256,7 +251,7 @@ bool built_in_type_test(const T &initial, bool ispod) template bool pointer_test(const T& default_value, const T& new_value) { - T *p = new T(default_value); + auto *p = new T(default_value); // we store a pointer to a pointer, so we can get a pointer to a pointer try { diff --git a/unittests/catch.hpp b/unittests/catch.hpp index ef720908..a5396fdb 100644 --- a/unittests/catch.hpp +++ b/unittests/catch.hpp @@ -583,7 +583,7 @@ namespace Catch { struct AssertionInfo { StringRef macroName; - SourceLineInfo lineInfo; + SourceLineInfo lineInfo{}; StringRef capturedExpression; ResultDisposition::Flags resultDisposition; @@ -769,7 +769,7 @@ namespace Catch { // Should be preferably called fully qualified, like ::Catch::Detail::stringify template std::string stringify(const T& e) { - return ::Catch::StringMaker::type>::type>::convert(e); + return StringMaker::type>::type>::convert(e); } template @@ -1068,7 +1068,7 @@ namespace Catch { return rss.str(); } - template + template /* TODO::Declaration doesn't declare anything */ struct StringMaker::value && !is_string_array::value>::type> { static std::string convert( R const& range ) { return rangeToString( range ); @@ -1347,7 +1347,7 @@ namespace Catch { return ExprLhs{ lhs }; } - auto operator <=( bool value ) -> ExprLhs { + auto operator <=( bool value ) const -> ExprLhs { return ExprLhs{ value }; } }; @@ -2004,7 +2004,7 @@ namespace Detail { template ::value>::type> friend bool operator == ( const T& lhs, Approx const& rhs ) { - auto lhs_v = static_cast(lhs); + const auto lhs_v = static_cast(lhs); return rhs.equalityComparisonImpl(lhs_v); } @@ -2045,7 +2045,7 @@ namespace Detail { template ::value>::type> Approx& epsilon( T const& newEpsilon ) { - double epsilonAsDouble = static_cast(newEpsilon); + const double epsilonAsDouble = static_cast(newEpsilon); if( epsilonAsDouble < 0 || epsilonAsDouble > 1.0 ) { throw std::domain_error ( "Invalid Approx::epsilon: " + @@ -2058,7 +2058,7 @@ namespace Detail { template ::value>::type> Approx& margin( T const& newMargin ) { - double marginAsDouble = static_cast(newMargin); + const double marginAsDouble = static_cast(newMargin); if( marginAsDouble < 0 ) { throw std::domain_error ( "Invalid Approx::margin: " + @@ -2153,11 +2153,17 @@ namespace Matchers { template struct MatcherMethod { - virtual bool match( ObjectT const& arg ) const = 0; + protected: + ~MatcherMethod() = default; + public: + virtual bool match( ObjectT const& arg ) const = 0; }; template struct MatcherMethod { - virtual bool match( PtrT* arg ) const = 0; + protected: + ~MatcherMethod() = default; + public: + virtual bool match( PtrT* arg ) const = 0; }; template @@ -4495,24 +4501,24 @@ bool marginComparison(double lhs, double rhs, double margin) { namespace Catch { namespace Detail { - Approx::Approx ( double value ) + inline Approx::Approx ( double value ) : m_epsilon( std::numeric_limits::epsilon()*100 ), m_margin( 0.0 ), m_scale( 0.0 ), m_value( value ) {} - Approx Approx::custom() { + inline Approx Approx::custom() { return Approx( 0 ); } - std::string Approx::toString() const { + inline std::string Approx::toString() const { ReusableStringStream rss; rss << "Approx( " << ::Catch::Detail::stringify( m_value ) << " )"; return rss.str(); } - bool Approx::equalityComparisonImpl(const double other) const { + inline bool Approx::equalityComparisonImpl(const double other) const { // First try with fixed margin, then compute margin based on epsilon, scale and Approx's value // Thanks to Richard Harris for his help refining the scaled margin value return marginComparison(m_value, other, m_margin) || marginComparison(m_value, other, m_epsilon * (m_scale + std::fabs(m_value))); @@ -4520,7 +4526,7 @@ namespace Detail { } // end namespace Detail -std::string StringMaker::convert(Catch::Detail::Approx const& value) { +inline std::string StringMaker::convert(Catch::Detail::Approx const& value) { return value.toString(); } @@ -4843,22 +4849,22 @@ namespace Catch { // end catch_run_context.h namespace Catch { - auto operator <<( std::ostream& os, ITransientExpression const& expr ) -> std::ostream& { +inline auto operator <<( std::ostream& os, ITransientExpression const& expr ) -> std::ostream& { expr.streamReconstructedExpression( os ); return os; } - LazyExpression::LazyExpression( bool isNegated ) +inline LazyExpression::LazyExpression( bool isNegated ) : m_isNegated( isNegated ) {} - LazyExpression::LazyExpression( LazyExpression const& other ) : m_isNegated( other.m_isNegated ) {} +inline LazyExpression::LazyExpression( LazyExpression const& other ) : m_isNegated( other.m_isNegated ) {} - LazyExpression::operator bool() const { +inline LazyExpression::operator bool() const { return m_transientExpression != nullptr; } - auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream& { +inline auto operator << ( std::ostream& os, LazyExpression const& lazyExpr ) -> std::ostream& { if( lazyExpr.m_isNegated ) os << "!"; @@ -4874,7 +4880,7 @@ namespace Catch { return os; } - AssertionHandler::AssertionHandler +inline AssertionHandler::AssertionHandler ( StringRef macroName, SourceLineInfo const& lineInfo, StringRef capturedExpression, @@ -4883,18 +4889,19 @@ namespace Catch { m_resultCapture( getResultCapture() ) {} - void AssertionHandler::handleExpr( ITransientExpression const& expr ) { +inline void AssertionHandler::handleExpr( ITransientExpression const& expr ) { m_resultCapture.handleExpr( m_assertionInfo, expr, m_reaction ); } - void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef const& message) { + +inline void AssertionHandler::handleMessage(ResultWas::OfType resultType, StringRef const& message) { m_resultCapture.handleMessage( m_assertionInfo, resultType, message, m_reaction ); } - auto AssertionHandler::allowThrows() const -> bool { +inline auto AssertionHandler::allowThrows() const -> bool { return getCurrentContext().getConfig()->allowThrows(); } - void AssertionHandler::complete() { +inline void AssertionHandler::complete() { setCompleted(); if( m_reaction.shouldDebugBreak ) { @@ -4907,18 +4914,20 @@ namespace Catch { if( m_reaction.shouldThrow ) throw Catch::TestFailureException(); } - void AssertionHandler::setCompleted() { + +inline void AssertionHandler::setCompleted() { m_completed = true; } - void AssertionHandler::handleUnexpectedInflightException() { +inline void AssertionHandler::handleUnexpectedInflightException() { m_resultCapture.handleUnexpectedInflightException( m_assertionInfo, Catch::translateActiveException(), m_reaction ); } - void AssertionHandler::handleExceptionThrownAsExpected() { +inline void AssertionHandler::handleExceptionThrownAsExpected() { m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); } - void AssertionHandler::handleExceptionNotThrownAsExpected() { + +inline void AssertionHandler::handleExceptionNotThrownAsExpected() { m_resultCapture.handleNonExpr(m_assertionInfo, ResultWas::Ok, m_reaction); } @@ -5041,7 +5050,7 @@ namespace Catch { getResultCapture().benchmarkStarting( { m_name } ); } auto BenchmarkLooper::needsMoreIterations() -> bool { - auto elapsed = m_timer.getElapsedNanoseconds(); + const auto elapsed = m_timer.getElapsedNanoseconds(); // Exponentially increasing iterations until we're confident in our timer resolution if( elapsed < m_resolution ) { @@ -5065,8 +5074,8 @@ namespace Catch { // There is another overload, in catch_assertinhandler.h/.cpp, that only takes a string and infers // the Equals matcher (so the header does not mention matchers) void handleExceptionMatchExpr( AssertionHandler& handler, StringMatcher const& matcher, StringRef matcherString ) { - std::string exceptionMessage = Catch::translateActiveException(); - MatchExpr expr( exceptionMessage, matcher, matcherString ); + const std::string exceptionMessage = Catch::translateActiveException(); + const MatchExpr expr( exceptionMessage, matcher, matcherString ); handler.handleExpr( expr ); } @@ -5182,7 +5191,7 @@ namespace Catch { namespace clara { namespace TextFlow { assert( m_stringIndex < m_column.m_strings.size() ); m_suffix = false; - auto width = m_column.m_width-indent(); + const auto width = m_column.m_width-indent(); m_end = m_pos; while( m_end < line().size() && line()[m_end] != '\n' ) ++m_end; @@ -5207,7 +5216,7 @@ namespace Catch { namespace clara { namespace TextFlow { } auto indent() const -> size_t { - auto initial = m_pos == 0 && m_stringIndex == 0 ? m_column.m_initialIndent : std::string::npos; + const auto initial = m_pos == 0 && m_stringIndex == 0 ? m_column.m_initialIndent : std::string::npos; return initial == std::string::npos ? m_column.m_indent : initial; } @@ -5289,7 +5298,7 @@ namespace Catch { namespace clara { namespace TextFlow { inline friend std::ostream& operator << ( std::ostream& os, Column const& col ) { bool first = true; - for( auto line : col ) { + for(const auto line : col ) { if( first ) first = false; else @@ -5299,7 +5308,7 @@ namespace Catch { namespace clara { namespace TextFlow { return os; } - auto operator + ( Column const& other ) -> Columns; + auto operator + ( Column const& other ) const -> Columns; auto toString() const -> std::string { std::ostringstream oss; @@ -5360,7 +5369,7 @@ namespace Catch { namespace clara { namespace TextFlow { std::string row, padding; for( size_t i = 0; i < m_columns.size(); ++i ) { - auto width = m_columns[i].width(); + const auto width = m_columns[i].width(); if( m_iterators[i] != m_columns[i].end() ) { std::string col = *m_iterators[i]; row += padding + col; @@ -5397,7 +5406,7 @@ namespace Catch { namespace clara { namespace TextFlow { m_columns.push_back( col ); return *this; } - auto operator + ( Column const& col ) -> Columns { + auto operator + ( Column const& col ) const -> Columns { Columns combined = *this; combined += col; return combined; @@ -5423,7 +5432,7 @@ namespace Catch { namespace clara { namespace TextFlow { } }; - inline auto Column::operator + ( Column const& other ) -> Columns { + inline auto Column::operator + ( Column const& other ) const -> Columns { Columns cols; cols += *this; cols += other; @@ -5521,7 +5530,7 @@ namespace detail { if( it != itEnd ) { auto const &next = *it; if( isOptPrefix( next[0] ) ) { - auto delimiterPos = next.find_first_of( " :=" ); + const auto delimiterPos = next.find_first_of( " :=" ); if( delimiterPos != std::string::npos ) { m_tokenBuffer.push_back( { TokenType::Option, next.substr( 0, delimiterPos ) } ); m_tokenBuffer.push_back( { TokenType::Argument, next.substr( delimiterPos + 1 ) } ); @@ -5659,7 +5668,7 @@ namespace detail { auto errorMessage() const -> std::string { return m_errorMessage; } protected: - virtual void enforceOk() const { + void enforceOk() const override { // !TBD: If no exceptions, std::terminate here or something switch( m_type ) { case ResultBase::LogicError: @@ -5668,6 +5677,7 @@ namespace detail { throw std::runtime_error( m_errorMessage ); case ResultBase::Ok: break; + default: ; } } @@ -5970,10 +5980,10 @@ namespace detail { } auto name() const -> std::string { return *m_name; } - auto set( std::string const& newName ) -> ParserResult { + auto set( std::string const& newName ) const -> ParserResult { - auto lastSlash = newName.find_last_of( "\\/" ); - auto filename = ( lastSlash == std::string::npos ) + const auto lastSlash = newName.find_last_of( "\\/" ); + const auto filename = ( lastSlash == std::string::npos ) ? newName : newName.substr( lastSlash+1 ); @@ -5990,7 +6000,7 @@ namespace detail { using ParserRefImpl::ParserRefImpl; auto parse( std::string const &, TokenStream const &tokens ) const -> InternalParseResult override { - auto validationResult = validate(); + const auto validationResult = validate(); if( !validationResult ) return InternalParseResult( validationResult ); @@ -5999,7 +6009,7 @@ namespace detail { if( token.type != TokenType::Argument ) return InternalParseResult::ok( ParseState( ParseResultType::NoMatch, remainingTokens ) ); - auto result = m_ref->setValue( remainingTokens->token ); + const auto result = m_ref->setValue( remainingTokens->token ); if( !result ) return InternalParseResult( result ); else @@ -6053,7 +6063,7 @@ namespace detail { } auto isMatch( std::string const &optToken ) const -> bool { - auto normalisedToken = normaliseOpt( optToken ); + const auto normalisedToken = normaliseOpt( optToken ); for( auto const &name : m_optNames ) { if( normaliseOpt( name ) == normalisedToken ) return true; @@ -6064,7 +6074,7 @@ namespace detail { using ParserBase::parse; auto parse( std::string const&, TokenStream const &tokens ) const -> InternalParseResult override { - auto validationResult = validate(); + const auto validationResult = validate(); if( !validationResult ) return InternalParseResult( validationResult ); @@ -6195,13 +6205,13 @@ namespace detail { } auto rows = getHelpColumns(); - size_t consoleWidth = CATCH_CLARA_CONFIG_CONSOLE_WIDTH; + const size_t consoleWidth = CATCH_CLARA_CONFIG_CONSOLE_WIDTH; size_t optWidth = 0; for( auto const &cols : rows ) optWidth = (std::max)(optWidth, cols.left.size() + 2); for( auto const &cols : rows ) { - auto row = + const auto row = TextFlow::Column( cols.left ).width( optWidth ).indent( 2 ) + TextFlow::Spacer(4) + TextFlow::Column( cols.right ).width( consoleWidth - 7 - optWidth ); @@ -6641,7 +6651,7 @@ namespace Catch { }; struct NoColourImpl : IColourImpl { - void use( Colour::Code ) {} + void use( Colour::Code ) override {} static IColourImpl* instance() { static NoColourImpl s_instance; @@ -6696,7 +6706,7 @@ namespace { } private: - void setTextAttribute( WORD _textAttribute ) { + void setTextAttribute( WORD _textAttribute ) const { SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes ); } HANDLE stdoutHandle; @@ -6707,7 +6717,7 @@ namespace { IColourImpl* platformColourInstance() { static Win32ColourImpl s_instance; - IConfigPtr config = getCurrentContext().getConfig(); + const IConfigPtr config = getCurrentContext().getConfig(); UseColour::YesOrNo colourMode = config ? config->useColour() : UseColour::Auto; @@ -7461,13 +7471,13 @@ namespace Catch { return; } - MultipleReporters* multi = nullptr; + MultipleReporters* multi; if( existingReporter->isMulti() ) { multi = static_cast( existingReporter.get() ); } else { - auto newMulti = std::unique_ptr( new MultipleReporters ); + auto newMulti = std::make_unique(); newMulti->add( std::move( existingReporter ) ); multi = newMulti.get(); existingReporter = std::move( newMulti ); @@ -7568,7 +7578,7 @@ namespace Catch { auto matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); for( auto const& testCaseInfo : matchedTestCases ) { - Colour::Code colour = testCaseInfo.isHidden() + const Colour::Code colour = testCaseInfo.isHidden() ? Colour::SecondaryText : Colour::None; Colour colourGuard( colour ); @@ -7649,7 +7659,7 @@ namespace Catch { ReusableStringStream rss; rss << " " << std::setw(2) << tagCount.second.count << " "; auto str = rss.str(); - auto wrapper = Column( tagCount.second.all() ) + const auto wrapper = Column( tagCount.second.all() ) .initialIndent( 0 ) .indent( str.size() ) .width( CATCH_CONFIG_CONSOLE_WIDTH-10 ); @@ -7918,7 +7928,7 @@ namespace Matchers { if (m_caseSensitivity == CaseSensitive::Choice::No) { flags |= std::regex::icase; } - auto reg = std::regex(m_regex, flags); + const auto reg = std::regex(m_regex, flags); return std::regex_match(matchee, reg); } @@ -8281,7 +8291,7 @@ namespace Catch { ReporterRegistry::~ReporterRegistry() = default; IStreamingReporterPtr ReporterRegistry::create( std::string const& name, IConfigPtr const& config ) const { - auto it = m_factories.find( name ); + const auto it = m_factories.find( name ); if( it == m_factories.end() ) return nullptr; return it->second->create( ReporterConfig( config ) ); @@ -8387,7 +8397,7 @@ namespace Catch { } RunContext::~RunContext() { - m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, aborting())); + m_reporter->testRunEnded(TestRunStats(m_runInfo, m_totals, RunContext::aborting())); } void RunContext::testGroupStarting(std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount) { @@ -8399,7 +8409,7 @@ namespace Catch { } Totals RunContext::runTest(TestCase const& testCase) { - Totals prevTotals = m_totals; + const Totals prevTotals = m_totals; std::string redirectedCout; std::string redirectedCerr; @@ -8503,7 +8513,7 @@ namespace Catch { void RunContext::sectionEnded(SectionEndInfo const & endInfo) { Counts assertions = m_totals.assertions - endInfo.prevAssertions; - bool missingAssertions = testForMissingAssertions(assertions); + const bool missingAssertions = testForMissingAssertions(assertions); if (!m_activeSections.empty()) { m_activeSections.back()->close(); @@ -8560,7 +8570,7 @@ namespace Catch { // Instead, fake a result data. AssertionResultData tempResult( ResultWas::FatalErrorCondition, { false } ); tempResult.message = message; - AssertionResult result(m_lastAssertionInfo, tempResult); + const AssertionResult result(m_lastAssertionInfo, tempResult); assertionEnded(result); @@ -8568,11 +8578,11 @@ namespace Catch { // Recreate section for test case (as we will lose the one that was in scope) auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); - SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description); + const SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description); Counts assertions; assertions.failed = 1; - SectionStats testCaseSectionStats(testCaseSection, assertions, 0, false); + const SectionStats testCaseSectionStats(testCaseSection, assertions, 0, false); m_reporter->sectionEnded(testCaseSectionStats); auto const& testInfo = m_activeTestCase->getTestCaseInfo(); @@ -8606,9 +8616,9 @@ namespace Catch { void RunContext::runCurrentTest(std::string & redirectedCout, std::string & redirectedCerr) { auto const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); - SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description); + const SectionInfo testCaseSection(testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description); m_reporter->sectionStarting(testCaseSection); - Counts prevAssertions = m_totals.assertions; + const Counts prevAssertions = m_totals.assertions; double duration = 0; m_shouldReportUnexpected = true; m_lastAssertionInfo = { "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal }; @@ -8645,8 +8655,8 @@ namespace Catch { m_messages.clear(); Counts assertions = m_totals.assertions - prevAssertions; - bool missingAssertions = testForMissingAssertions(assertions); - SectionStats testCaseSectionStats(testCaseSection, assertions, duration, missingAssertions); + const bool missingAssertions = testForMissingAssertions(assertions); + const SectionStats testCaseSectionStats(testCaseSection, assertions, duration, missingAssertions); m_reporter->sectionEnded(testCaseSectionStats); } @@ -8674,8 +8684,8 @@ namespace Catch { ) { m_reporter->assertionStarting( info ); - bool negated = isFalseTest( info.resultDisposition ); - bool result = expr.getResult() != negated; + const bool negated = isFalseTest( info.resultDisposition ); + const bool result = expr.getResult() != negated; if( result ) { if (!m_includeSuccessfulResults) { @@ -8697,7 +8707,7 @@ namespace Catch { bool negated ) { m_lastAssertionInfo = info; - AssertionResultData data( resultType, LazyExpression( negated ) ); + const AssertionResultData data( resultType, LazyExpression( negated ) ); AssertionResult assertionResult{ info, data }; assertionResult.m_resultData.lazyExpression.m_transientExpression = expr; @@ -8738,7 +8748,7 @@ namespace Catch { AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) ); data.message = message; - AssertionResult assertionResult{ info, data }; + const AssertionResult assertionResult{ info, data }; assertionEnded( assertionResult ); populateReaction( reaction ); } @@ -8755,7 +8765,7 @@ namespace Catch { AssertionResultData data( ResultWas::ThrewException, LazyExpression( false ) ); data.message = "Exception translation was disabled by CATCH_CONFIG_FAST_COMPILE"; - AssertionResult assertionResult{ info, data }; + const AssertionResult assertionResult{ info, data }; assertionEnded( assertionResult ); } void RunContext::handleNonExpr( @@ -8765,7 +8775,7 @@ namespace Catch { ) { m_lastAssertionInfo = info; - AssertionResultData data( resultType, LazyExpression( false ) ); + const AssertionResultData data( resultType, LazyExpression( false ) ); AssertionResult assertionResult{ info, data }; assertionEnded( assertionResult ); @@ -8798,7 +8808,7 @@ namespace Catch { #endif Section::~Section() { if( m_sectionIncluded ) { - SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); + const SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); if( std::uncaught_exception() ) getResultCapture().sectionEndedEarly( endInfo ); else @@ -8891,7 +8901,7 @@ namespace Catch { Version( unsigned int _majorVersion, unsigned int _minorVersion, unsigned int _patchNumber, - char const * const _branchName, + char const *_branchName, unsigned int _buildNumber ); unsigned int const majorVersion; @@ -8979,13 +8989,13 @@ namespace Catch { auto tags = testCase.tags; std::string filename = testCase.lineInfo.file; - auto lastSlash = filename.find_last_of("\\/"); + const auto lastSlash = filename.find_last_of("\\/"); if (lastSlash != std::string::npos) { filename.erase(0, lastSlash); filename[0] = '#'; } - auto lastDot = filename.find_last_of('.'); + const auto lastDot = filename.find_last_of('.'); if (lastDot != std::string::npos) { filename.erase(lastDot); } @@ -9105,7 +9115,7 @@ namespace Catch { Catch::cout() << "...waiting for enter/ return before starting" << std::endl; static_cast(std::getchar()); } - int exitCode = runInternal(); + const int exitCode = runInternal(); if( ( m_configData.waitForKeypress & WaitForKeypress::BeforeExit ) != 0 ) { Catch::cout() << "...waiting for enter/ return before exiting, with code: " << exitCode << std::endl; static_cast(std::getchar()); @@ -9236,7 +9246,7 @@ namespace Catch { struct OutputDebugWriter { - void operator()( std::string const&str ) { + void operator()( std::string const&str ) const { writeToDebugConsole( str ); } }; @@ -9314,11 +9324,11 @@ namespace Catch { auto add() -> std::size_t { if( m_unused.empty() ) { - m_streams.push_back( std::unique_ptr( new std::ostringstream ) ); + m_streams.push_back(std::make_unique()); return m_streams.size()-1; } else { - auto index = m_unused.back(); + const auto index = m_unused.back(); m_unused.pop_back(); return index; } @@ -9412,8 +9422,8 @@ namespace Catch { } std::string trim( std::string const& str ) { static char const* whitespaceChars = "\n\r\t "; - std::string::size_type start = str.find_first_not_of( whitespaceChars ); - std::string::size_type end = str.find_last_not_of( whitespaceChars ); + const std::string::size_type start = str.find_first_not_of( whitespaceChars ); + const std::string::size_type end = str.find_last_not_of( whitespaceChars ); return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string(); } @@ -9518,7 +9528,7 @@ namespace Catch { size_type noChars = m_size; // Make adjustments for uft encodings for( size_type i=0; i < m_size; ++i ) { - char c = m_start[i]; + const char c = m_start[i]; if( ( c & 0b11000000 ) == 0b11000000 ) { if( ( c & 0b11100000 ) == 0b11000000 ) noChars--; @@ -9595,7 +9605,7 @@ namespace Catch { std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { std::string expandedTestSpec = unexpandedTestSpec; for( auto const& registryKvp : m_registry ) { - std::size_t pos = expandedTestSpec.find( registryKvp.first ); + const auto pos = expandedTestSpec.find( registryKvp.first ); if( pos != std::string::npos ) { expandedTestSpec = expandedTestSpec.substr( 0, pos ) + registryKvp.second.tag + @@ -9680,7 +9690,7 @@ namespace Catch { } else { if( c == ']' ) { - TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); + const TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); if( ( prop & TestCaseInfo::IsHidden ) != 0 ) isHidden = true; else if( prop == TestCaseInfo::None ) @@ -9698,7 +9708,7 @@ namespace Catch { tags.push_back( "." ); } - TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); + const TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); return TestCase( _testCase, info ); } @@ -9708,7 +9718,7 @@ namespace Catch { testCaseInfo.lcaseTags.clear(); for( auto const& tag : tags ) { - std::string lcaseTag = toLower( tag ); + const std::string lcaseTag = toLower( tag ); testCaseInfo.properties = static_cast( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); testCaseInfo.lcaseTags.push_back( lcaseTag ); } @@ -9819,7 +9829,7 @@ namespace Catch { void enforceNoDuplicateTestCases( std::vector const& functions ) { std::set seenFunctions; for( auto const& function : functions ) { - auto prev = seenFunctions.insert( function ); + const auto prev = seenFunctions.insert( function ); CATCH_ENFORCE( prev.second, "error: TEST_CASE( \"" << function.name << "\" ) already defined.\n" << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << "\n" @@ -9874,7 +9884,7 @@ namespace Catch { std::string className = classOrQualifiedMethodName; if( startsWith( className, '&' ) ) { - std::size_t lastColons = className.rfind( "::" ); + const std::size_t lastColons = className.rfind( "::" ); std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); if( penultimateColons == std::string::npos ) penultimateColons = 1; @@ -9978,7 +9988,7 @@ namespace TestCaseTracking { } ITrackerPtr TrackerBase::findChild( NameAndLocation const& nameAndLocation ) { - auto it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); + const auto it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); return( it != m_children.end() ) ? *it : nullptr; @@ -10072,7 +10082,7 @@ namespace TestCaseTracking { std::shared_ptr section; ITracker& currentTracker = ctx.currentTracker(); - if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { + if( const ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isSectionTracker() ); section = std::static_pointer_cast( childTracker ); @@ -10114,7 +10124,7 @@ namespace TestCaseTracking { std::shared_ptr tracker; ITracker& currentTracker = ctx.currentTracker(); - if( ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { + if( const ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) { assert( childTracker ); assert( childTracker->isIndexTracker() ); tracker = std::static_pointer_cast( childTracker ); @@ -10338,13 +10348,13 @@ namespace Catch { for( std::size_t i = 0; i < iterations; ++i ) { uint64_t ticks; - uint64_t baseTicks = getCurrentNanosecondsSinceEpoch(); + const uint64_t baseTicks = getCurrentNanosecondsSinceEpoch(); do { ticks = getCurrentNanosecondsSinceEpoch(); } while( ticks == baseTicks ); - auto delta = ticks - baseTicks; + const auto delta = ticks - baseTicks; sum += delta; } @@ -10753,7 +10763,7 @@ namespace Catch { // (see: http://www.w3.org/TR/xml/#syntax) for( std::size_t i = 0; i < m_str.size(); ++ i ) { - char c = m_str[i]; + const char c = m_str[i]; switch( c ) { case '<': os << "<"; break; case '&': os << "&"; break; @@ -10873,7 +10883,7 @@ namespace Catch { XmlWriter& XmlWriter::writeText( std::string const& text, bool indent ) { if( !text.empty() ){ - bool tagWasOpen = m_tagIsOpen; + const bool tagWasOpen = m_tagIsOpen; ensureTagClosed(); if( tagWasOpen && indent ) m_os << m_indent; @@ -11125,7 +11135,7 @@ private: stream << ' ' << issue; } - void printExpressionWas() { + void printExpressionWas() const { if (result.hasExpression()) { stream << ';'; { @@ -11164,7 +11174,7 @@ private: return; // using messages.end() directly yields (or auto) compilation error: - std::vector::const_iterator itEnd = messages.end(); + const std::vector::const_iterator itEnd = messages.end(); const std::size_t N = static_cast(std::distance(itMessage, itEnd)); { @@ -11404,7 +11414,7 @@ private: }; std::size_t makeRatio(std::size_t number, std::size_t total) { - std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number / total : 0; + const std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number / total : 0; return (ratio == 0 && number > 0) ? 1 : ratio; } @@ -11540,9 +11550,9 @@ public: } friend TablePrinter& operator << (TablePrinter& tp, ColumnBreak) { - auto colStr = tp.m_oss.str(); + const auto colStr = tp.m_oss.str(); // This takes account of utf8 encodings - auto strSize = Catch::StringRef(colStr).numberOfCharacters(); + const auto strSize = Catch::StringRef(colStr).numberOfCharacters(); tp.m_oss.str(""); tp.open(); if (tp.m_currentColumn == static_cast(tp.m_columnInfos.size() - 1)) { @@ -11551,8 +11561,8 @@ public: } tp.m_currentColumn++; - auto colInfo = tp.m_columnInfos[tp.m_currentColumn]; - auto padding = (strSize + 2 < static_cast(colInfo.width)) + const auto colInfo = tp.m_columnInfos[tp.m_currentColumn]; + const auto padding = (strSize + 2 < static_cast(colInfo.width)) ? std::string(colInfo.width - (strSize + 2), ' ') : std::string(); if (colInfo.justification == ColumnInfo::Left) @@ -11595,7 +11605,7 @@ void ConsoleReporter::assertionStarting(AssertionInfo const&) {} bool ConsoleReporter::assertionEnded(AssertionStats const& _assertionStats) { AssertionResult const& result = _assertionStats.assertionResult; - bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); + const bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); // Drop out if result was successful but we're not printing them. if (!includeResults && result.getResultType() != ResultWas::Warning) @@ -11639,7 +11649,7 @@ void ConsoleReporter::benchmarkStarting(BenchmarkInfo const& info) { auto nameCol = Column( info.name ).width( static_cast( m_tablePrinter->columnInfos()[0].width - 2 ) ); bool firstLine = true; - for (auto line : nameCol) { + for (const auto line : nameCol) { if (!firstLine) (*m_tablePrinter) << ColumnBreak() << ColumnBreak() << ColumnBreak(); else @@ -11649,7 +11659,7 @@ void ConsoleReporter::benchmarkStarting(BenchmarkInfo const& info) { } } void ConsoleReporter::benchmarkEnded(BenchmarkStats const& stats) { - Duration average(stats.elapsedTimeInNanoseconds / stats.iterations); + const Duration average(stats.elapsedTimeInNanoseconds / stats.iterations); (*m_tablePrinter) << stats.iterations << ColumnBreak() << stats.elapsedTimeInNanoseconds << ColumnBreak() @@ -11720,9 +11730,8 @@ void ConsoleReporter::printTestCaseAndSectionHeader() { if (m_sectionStack.size() > 1) { Colour colourGuard(Colour::Headers); - auto - it = m_sectionStack.begin() + 1, // Skip first section (test case) - itEnd = m_sectionStack.end(); + auto it = m_sectionStack.begin() + 1; // Skip first section (test case) + const auto itEnd = m_sectionStack.end(); for (; it != itEnd; ++it) printHeaderString(it->name, 2); } @@ -11816,7 +11825,7 @@ void ConsoleReporter::printTotals( Totals const& totals ) { } void ConsoleReporter::printSummaryRow(std::string const& label, std::vector const& cols, std::size_t row) { for (auto col : cols) { - std::string value = col.rows[row]; + const std::string value = col.rows[row]; if (col.label.empty()) { stream << label << ": "; if (value != "0") @@ -11902,7 +11911,7 @@ namespace Catch { } std::string fileNameTag(const std::vector &tags) { - auto it = std::find_if(begin(tags), + const auto it = std::find_if(begin(tags), end(tags), [] (std::string const& tag) {return tag.front() == '#'; }); if (it != tags.end()) @@ -11956,7 +11965,7 @@ namespace Catch { } void JunitReporter::testGroupEnded( TestGroupStats const& testGroupStats ) { - double suiteTime = suiteTimer.getElapsedSeconds(); + const double suiteTime = suiteTimer.getElapsedSeconds(); CumulativeReporterBase::testGroupEnded( testGroupStats ); writeGroup( *m_testGroups.back(), suiteTime ); } @@ -12278,7 +12287,7 @@ namespace Catch { AssertionResult const& result = assertionStats.assertionResult; - bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); + const bool includeResults = m_config->includeSuccessfulResults() || !result.isOk(); if( includeResults || result.getResultType() == ResultWas::Warning ) { // Print any info messages in tags. diff --git a/unittests/compiled_tests.cpp b/unittests/compiled_tests.cpp index a39c3f8d..974b37f2 100644 --- a/unittests/compiled_tests.cpp +++ b/unittests/compiled_tests.cpp @@ -58,7 +58,7 @@ TEST_CASE("Dynamic_Object attributes can be shared with C++") chai("attr bob::z; def bob::bob() { this.z = 10 }; auto x = bob()"); - chaiscript::dispatch::Dynamic_Object &mydo = chai.eval("x"); + auto &mydo = chai.eval("x"); CHECK(mydo.get_type_name() == "bob"); @@ -347,7 +347,7 @@ TEST_CASE("Functor cast") chai.add(chaiscript::fun(&functor_cast_test_call), "test_call"); chai.eval("def func(i) { return i * 6; };"); - int d = chai.eval("test_call(func, 3)"); + auto d = chai.eval("test_call(func, 3)"); CHECK(d == 3 * 6); } @@ -364,7 +364,7 @@ TEST_CASE("Set and restore chai state") chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser()); // save the initial state of globals and locals - auto firststate = chai.get_state(); + const auto firststate = chai.get_state(); std::map locals = chai.get_locals(); // add some new globals and locals @@ -598,8 +598,7 @@ class Object_Copy_Count_Test ++copycount(); } - Object_Copy_Count_Test(Object_Copy_Count_Test &&) - { + Object_Copy_Count_Test(Object_Copy_Count_Test &&) noexcept { std::cout << "Object_Copy_Count_Test(Object_Copy_Count_Test &&)\n"; ++movecount(); } @@ -868,10 +867,10 @@ TEST_CASE("Test long long dispatch") struct Returned_Converted_Config { - int num_iterations; - int something_else; + int num_iterations = 0; + int something_else = 0; std::string a_string; - std::function a_function; + std::function a_function{}; }; @@ -947,7 +946,7 @@ TEST_CASE("Parse floats with non-posix locale") std::setlocale(LC_ALL, "en_ZA.utf8"); #endif chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser()); - const double parsed = chai.eval("print(1.3); 1.3"); + const auto parsed = chai.eval("print(1.3); 1.3"); CHECK(parsed == Approx(1.3)); const std::string str = chai.eval("to_string(1.3)"); CHECK(str == "1.3"); @@ -1229,7 +1228,7 @@ TEST_CASE("Test typed chaiscript functions to perform conversions") chai.add(chaiscript::fun([]() -> std::shared_ptr { - return (std::shared_ptr(new B())); + return std::static_pointer_cast(std::make_shared()); }), "Create"); chai.eval(R"( @@ -1272,7 +1271,7 @@ TEST_CASE("Test reference member being registered") } -const int add_3(const int &i) +int add_3(const int &i) { return i + 3; } diff --git a/unittests/multifile_test_chai.cpp b/unittests/multifile_test_chai.cpp index f57157d4..e6780901 100644 --- a/unittests/multifile_test_chai.cpp +++ b/unittests/multifile_test_chai.cpp @@ -10,7 +10,6 @@ Multi_Test_Chai::Multi_Test_Chai() } -std::shared_ptr Multi_Test_Chai::get_chai() -{ +std::shared_ptr Multi_Test_Chai::get_chai() const { return m_chai; } diff --git a/unittests/multifile_test_chai.hpp b/unittests/multifile_test_chai.hpp index 681c2c2a..d3e1b380 100644 --- a/unittests/multifile_test_chai.hpp +++ b/unittests/multifile_test_chai.hpp @@ -1,3 +1,5 @@ +#ifndef MULTIFILE_TEST_CHAI_HPP +#define MULTIFILE_TEST_CHAI_HPP #include class Multi_Test_Chai @@ -5,10 +7,11 @@ class Multi_Test_Chai public: Multi_Test_Chai(); - std::shared_ptr get_chai(); + std::shared_ptr get_chai() const; private: - std::shared_ptr m_chai; + std::shared_ptr m_chai{}; }; +#endif // MULTIFILE_TEST_CHAI_HPP diff --git a/unittests/multifile_test_module.cpp b/unittests/multifile_test_module.cpp index ec1df238..97ea0439 100644 --- a/unittests/multifile_test_module.cpp +++ b/unittests/multifile_test_module.cpp @@ -2,17 +2,14 @@ #include "multifile_test_module.hpp" -Multi_Test_Module::Multi_Test_Module() -{ -} +Multi_Test_Module::Multi_Test_Module() = default; int Multi_Test_Module::get_module_value() { return 0; } -chaiscript::ModulePtr Multi_Test_Module::get_module() -{ +chaiscript::ModulePtr Multi_Test_Module::get_module() const { chaiscript::ModulePtr module(new chaiscript::Module()); module->add(chaiscript::fun(&Multi_Test_Module::get_module_value), "get_module_value"); diff --git a/unittests/multifile_test_module.hpp b/unittests/multifile_test_module.hpp index b09dca39..ba1fd18d 100644 --- a/unittests/multifile_test_module.hpp +++ b/unittests/multifile_test_module.hpp @@ -1,3 +1,5 @@ +#ifndef MULTIFILE_TEST_MODULE_HPP +#define MULTIFILE_TEST_MODULE_HPP #include class Multi_Test_Module @@ -7,5 +9,6 @@ class Multi_Test_Module Multi_Test_Module(); - chaiscript::ModulePtr get_module(); + chaiscript::ModulePtr get_module() const; }; +#endif // MULTIFILE_TEST_MODULE_HPP diff --git a/unittests/multithreaded_test.cpp b/unittests/multithreaded_test.cpp index e2d0240b..c8a98efb 100644 --- a/unittests/multithreaded_test.cpp +++ b/unittests/multithreaded_test.cpp @@ -80,7 +80,7 @@ int main() std::vector > threads; // Ensure at least two, but say only 7 on an 8 core processor - size_t num_threads = static_cast(std::max(static_cast(std::thread::hardware_concurrency()) - 1, 2)); + const size_t num_threads = static_cast(std::max(static_cast(std::thread::hardware_concurrency()) - 1, 2)); std::cout << "Num threads: " << num_threads << '\n';