From 8f89c258df007490839569ab6e7cd649c6de3121 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com>
Date: Mon, 9 Nov 2020 11:36:15 +0100
Subject: [PATCH] Remove a bunch of spurious std::ends use

These were useless and could eventually be problematic
---
 src/language/ast/ASTNodeDataTypeBuilder.cpp   | 20 +++++++++----------
 .../ast/ASTSymbolInitializationChecker.cpp    |  4 ++--
 .../node_processor/AffectationProcessor.hpp   | 10 +++++-----
 .../FunctionArgumentConverter.hpp             |  2 +-
 src/language/utils/PugsFunctionAdapter.hpp    |  2 +-
 tests/test_AffectationToStringProcessor.cpp   | 12 +++++------
 tests/test_AffectationToTupleProcessor.cpp    |  6 +++---
 tests/test_BuildInfo.cpp                      |  2 +-
 tests/test_FunctionArgumentConverter.cpp      |  2 +-
 tests/test_ListAffectationProcessor.cpp       |  6 +++---
 10 files changed, 32 insertions(+), 34 deletions(-)

diff --git a/src/language/ast/ASTNodeDataTypeBuilder.cpp b/src/language/ast/ASTNodeDataTypeBuilder.cpp
index 4a56bdae9..7cbeb6adf 100644
--- a/src/language/ast/ASTNodeDataTypeBuilder.cpp
+++ b/src/language/ast/ASTNodeDataTypeBuilder.cpp
@@ -16,8 +16,7 @@ ASTNodeDataTypeBuilder::_buildDeclarationNodeDataTypes(ASTNode& type_node, ASTNo
       std::ostringstream message;
       message << "number of product spaces (" << type_node.children.size() << ") " << rang::fgB::yellow
               << type_node.string() << rang::style::reset << rang::style::bold << " differs from number of variables ("
-              << name_node.children.size() << ") " << rang::fgB::yellow << name_node.string() << rang::style::reset
-              << std::ends;
+              << name_node.children.size() << ") " << rang::fgB::yellow << name_node.string() << rang::style::reset;
       throw ParseError(message.str(), name_node.begin());
     }
 
@@ -55,7 +54,7 @@ ASTNodeDataTypeBuilder::_buildDeclarationNodeDataTypes(ASTNode& type_node, ASTNo
         } else if (i_type_symbol->attributes().dataType() != ASTNodeDataType::type_name_id_t) {
           std::ostringstream os;
           os << "invalid type identifier, '" << type_name_id << "' was previously defined as a '"
-             << dataTypeName(i_type_symbol->attributes().dataType()) << "'" << std::ends;
+             << dataTypeName(i_type_symbol->attributes().dataType()) << '\'';
           throw ParseError(os.str(), std::vector{content_node->begin()});
         }
 
@@ -92,7 +91,7 @@ ASTNodeDataTypeBuilder::_buildDeclarationNodeDataTypes(ASTNode& type_node, ASTNo
       } else if (i_type_symbol->attributes().dataType() != ASTNodeDataType::type_name_id_t) {
         std::ostringstream os;
         os << "invalid type identifier, '" << type_name_id << "' was previously defined as a '"
-           << dataTypeName(i_type_symbol->attributes().dataType()) << "'" << std::ends;
+           << dataTypeName(i_type_symbol->attributes().dataType()) << '\'';
         throw ParseError(os.str(), std::vector{type_node.begin()});
       }
 
@@ -199,7 +198,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
           message << "note: number of product spaces (" << nb_parameter_domains << ") " << rang::fgB::yellow
                   << parameters_domain_node.string() << rang::style::reset << rang::style::bold
                   << " differs from number of variables (" << nb_parameter_names << ") " << rang::fgB::yellow
-                  << parameters_name_node.string() << rang::style::reset << std::ends;
+                  << parameters_name_node.string() << rang::style::reset;
           throw ParseError(message.str(), parameters_domain_node.begin());
         }
 
@@ -247,8 +246,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
             if (image_type.dimension() != nb_image_expressions) {
               std::ostringstream message;
               message << "expecting " << image_type.dimension() << " scalar expressions or an "
-                      << dataTypeName(image_type) << ", found " << nb_image_expressions << " scalar expressions"
-                      << std::ends;
+                      << dataTypeName(image_type) << ", found " << nb_image_expressions << " scalar expressions";
               throw ParseError(message.str(), image_domain_node.begin());
             }
           } else {
@@ -256,7 +254,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
             message << "number of image spaces (" << nb_image_domains << ") " << rang::fgB::yellow
                     << image_domain_node.string() << rang::style::reset << rang::style::bold
                     << " differs from number of expressions (" << nb_image_expressions << ") " << rang::fgB::yellow
-                    << image_expression_node.string() << rang::style::reset << std::ends;
+                    << image_expression_node.string() << rang::style::reset;
             throw ParseError(message.str(), image_domain_node.begin());
           }
         }
@@ -396,7 +394,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
         std::ostringstream message;
         message << "undefined binary operator\n"
                 << "note: incompatible operand types " << n.children[0]->string() << " (" << dataTypeName(type_0)
-                << ") and " << n.children[1]->string() << " (" << dataTypeName(type_1) << ')' << std::ends;
+                << ") and " << n.children[1]->string() << " (" << dataTypeName(type_1) << ')';
         throw ParseError(message.str(), n.begin());
       }
     } else if (n.is_type<language::function_evaluation>()) {
@@ -429,7 +427,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
         std::ostringstream message;
         message << "invalid function call\n"
                 << "note: '" << n.children[0]->string() << "' (type: " << dataTypeName(n.children[0]->m_data_type)
-                << ") is not a function!" << std::ends;
+                << ") is not a function!";
         throw ParseError(message.str(), n.begin());
       }
     } else if (n.is_type<language::subscript_expression>()) {
@@ -442,7 +440,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
         std::ostringstream message;
         message << "invalid types '" << rang::fgB::yellow << dataTypeName(array_expression.m_data_type)
                 << rang::style::reset << '[' << dataTypeName(index_expression.m_data_type) << ']'
-                << "' for array subscript" << std::ends;
+                << "' for array subscript";
 
         throw ParseError(message.str(), n.begin());
       } else {
diff --git a/src/language/ast/ASTSymbolInitializationChecker.cpp b/src/language/ast/ASTSymbolInitializationChecker.cpp
index 0e4d441fe..c37d4ba6b 100644
--- a/src/language/ast/ASTSymbolInitializationChecker.cpp
+++ b/src/language/ast/ASTSymbolInitializationChecker.cpp
@@ -22,7 +22,7 @@ ASTSymbolInitializationChecker::_checkSymbolInitialization(ASTNode& node)
       Assert(def_name_node.is_type<language::name>());
       if (decl_name_node.string() != def_name_node.string()) {
         std::ostringstream os;
-        os << "invalid identifier, expecting '" << decl_name_node.string() << "'" << std::ends;
+        os << "invalid identifier, expecting '" << decl_name_node.string() << '\'';
         throw ParseError(os.str(), std::vector{def_name_node.begin()});
       }
     };
@@ -45,7 +45,7 @@ ASTSymbolInitializationChecker::_checkSymbolInitialization(ASTNode& node)
         if (decl_name_list_node.children.size() != def_name_list_node.children.size()) {
           std::ostringstream os;
           os << "invalid number of definition identifiers, expecting " << decl_name_list_node.children.size()
-             << " found " << def_name_list_node.children.size() << std::ends;
+             << " found " << def_name_list_node.children.size();
           throw ParseError(os.str(), std::vector{def_name_list_node.begin()});
         }
 
diff --git a/src/language/node_processor/AffectationProcessor.hpp b/src/language/node_processor/AffectationProcessor.hpp
index f3f8af44f..6cdb19dfd 100644
--- a/src/language/node_processor/AffectationProcessor.hpp
+++ b/src/language/node_processor/AffectationProcessor.hpp
@@ -105,7 +105,7 @@ class AffectationExecutor final : public IAffectationExecutor
               m_lhs = std::to_string(std::get<DataT>(rhs));
             } else {
               std::ostringstream os;
-              os << std::get<DataT>(rhs) << std::ends;
+              os << std::get<DataT>(rhs);
               m_lhs = os.str();
             }
           } else {
@@ -115,7 +115,7 @@ class AffectationExecutor final : public IAffectationExecutor
               m_lhs += std::to_string(std::get<DataT>(rhs));
             } else {
               std::ostringstream os;
-              os << std::get<DataT>(rhs) << std::ends;
+              os << std::get<DataT>(rhs);
               m_lhs += os.str();
             }
           }
@@ -418,7 +418,7 @@ class AffectationToTupleProcessor final : public INodeProcessor
             *m_lhs = std::vector{std::move(std::to_string(v))};
           } else {
             std::ostringstream os;
-            os << v << std::ends;
+            os << v;
             *m_lhs = std::vector<std::string>{os.str()};
           }
         } else if constexpr (std::is_same_v<ValueT, TinyVector<1>> and std::is_arithmetic_v<T>) {
@@ -475,7 +475,7 @@ class AffectationToTupleFromListProcessor final : public INodeProcessor
               tuple_value[i] = std::to_string(child_value);
             } else {
               std::ostringstream os;
-              os << child_value << std::ends;
+              os << child_value;
               tuple_value[i] = os.str();
             }
           } else if constexpr (is_tiny_vector_v<ValueT>) {
@@ -544,7 +544,7 @@ class AffectationToTupleFromListProcessor final : public INodeProcessor
       } else {
         for (size_t i = 0; i < values.size(); ++i) {
           std::ostringstream sout;
-          sout << values[i] << std::ends;
+          sout << values[i];
           v[i] = sout.str();
         }
       }
diff --git a/src/language/node_processor/FunctionArgumentConverter.hpp b/src/language/node_processor/FunctionArgumentConverter.hpp
index 9e7eec757..e226e5336 100644
--- a/src/language/node_processor/FunctionArgumentConverter.hpp
+++ b/src/language/node_processor/FunctionArgumentConverter.hpp
@@ -40,7 +40,7 @@ class FunctionArgumentToStringConverter final : public IFunctionArgumentConverte
           exec_policy.currentContext()[m_argument_id] = v;
         } else {
           std::ostringstream sout;
-          sout << value << std::ends;
+          sout << value;
           exec_policy.currentContext()[m_argument_id] = sout.str();
         }
       },
diff --git a/src/language/utils/PugsFunctionAdapter.hpp b/src/language/utils/PugsFunctionAdapter.hpp
index 489066488..17d97f509 100644
--- a/src/language/utils/PugsFunctionAdapter.hpp
+++ b/src/language/utils/PugsFunctionAdapter.hpp
@@ -110,7 +110,7 @@ class PugsFunctionAdapter<OutputType(InputType...)>
                     << _getInputDataTypeName() << " -> " << dataTypeName(ast_node_data_type_from<OutputType>)
                     << rang::style::reset << '\n'
                     << "note: provided function " << rang::fgB::magenta << function.name() << ": "
-                    << function.domainMappingNode().string() << rang::style::reset << std::ends;
+                    << function.domainMappingNode().string() << rang::style::reset;
       throw NormalError(error_message.str());
     }
   }
diff --git a/tests/test_AffectationToStringProcessor.cpp b/tests/test_AffectationToStringProcessor.cpp
index 4053e0231..c432cdd00 100644
--- a/tests/test_AffectationToStringProcessor.cpp
+++ b/tests/test_AffectationToStringProcessor.cpp
@@ -55,17 +55,17 @@ TEST_CASE("ASTAffectationToStringProcessor", "[language]")
     CHECK_AFFECTATION_RESULT(R"(let s : string; s = 2.3;)", "s", std::to_string(2.3));
     {
       std::ostringstream os;
-      os << TinyVector<1>{13} << std::ends;
+      os << TinyVector<1>{13};
       CHECK_AFFECTATION_RESULT(R"(let x : R^1, x = 13; let s : string; s = x;)", "s", os.str());
     }
     {
       std::ostringstream os;
-      os << TinyVector<2>{2, 3} << std::ends;
+      os << TinyVector<2>{2, 3};
       CHECK_AFFECTATION_RESULT(R"(let x : R^2, x = (2,3); let s : string; s = x;)", "s", os.str());
     }
     {
       std::ostringstream os;
-      os << TinyVector<3>{1, 2, 3} << std::ends;
+      os << TinyVector<3>{1, 2, 3};
       CHECK_AFFECTATION_RESULT(R"(let x : R^3, x = (1,2,3); let s : string; s = x;)", "s", os.str());
     }
   }
@@ -82,17 +82,17 @@ TEST_CASE("ASTAffectationToStringProcessor", "[language]")
                              (std::string("foo") + std::to_string(2.3)));
     {
       std::ostringstream os;
-      os << "foo" << TinyVector<1>{13} << std::ends;
+      os << "foo" << TinyVector<1>{13};
       CHECK_AFFECTATION_RESULT(R"(let x : R^1, x = 13; let s : string, s="foo"; s += x;)", "s", os.str());
     }
     {
       std::ostringstream os;
-      os << "foo" << TinyVector<2>{2, 3} << std::ends;
+      os << "foo" << TinyVector<2>{2, 3};
       CHECK_AFFECTATION_RESULT(R"(let x : R^2, x = (2,3); let s : string, s="foo"; s += x;)", "s", os.str());
     }
     {
       std::ostringstream os;
-      os << "foo" << TinyVector<3>{1, 2, 3} << std::ends;
+      os << "foo" << TinyVector<3>{1, 2, 3};
       CHECK_AFFECTATION_RESULT(R"(let x : R^3, x = (1,2,3); let s : string, s="foo"; s += x;)", "s", os.str());
     }
   }
diff --git a/tests/test_AffectationToTupleProcessor.cpp b/tests/test_AffectationToTupleProcessor.cpp
index 3720bc856..963e931bb 100644
--- a/tests/test_AffectationToTupleProcessor.cpp
+++ b/tests/test_AffectationToTupleProcessor.cpp
@@ -65,7 +65,7 @@ let s :(string); s = 2.;
 
     const std::string x_string = []() -> std::string {
       std::ostringstream os;
-      os << TinyVector<3, double>{1, 2, 3} << std::ends;
+      os << TinyVector<3, double>{1, 2, 3};
       return os.str();
     }();
 
@@ -101,7 +101,7 @@ let s :(string); s = (2.,3,"foo");
 
     const std::string x_string = []() -> std::string {
       std::ostringstream os;
-      os << TinyVector<2, double>{1, 2} << std::ends;
+      os << TinyVector<2, double>{1, 2};
       return os.str();
     }();
 
@@ -143,7 +143,7 @@ let t :(R^1); t = (x,2);
   {
     const std::string x_string = []() -> std::string {
       std::ostringstream os;
-      os << TinyVector<3, double>{1, 2, 3} << std::ends;
+      os << TinyVector<3, double>{1, 2, 3};
       return os.str();
     }();
 
diff --git a/tests/test_BuildInfo.cpp b/tests/test_BuildInfo.cpp
index 335cc74e4..b63d0eb9b 100644
--- a/tests/test_BuildInfo.cpp
+++ b/tests/test_BuildInfo.cpp
@@ -26,7 +26,7 @@ TEST_CASE("BuildInfo", "[utils]")
   SECTION("compiler")
   {
     std::stringstream compiler_info;
-    compiler_info << PUGS_BUILD_COMPILER << " (" << PUGS_BUILD_COMPILER_VERSION << ")" << std::ends;
+    compiler_info << PUGS_BUILD_COMPILER << " (" << PUGS_BUILD_COMPILER_VERSION << ")";
     REQUIRE(BuildInfo::compiler() == compiler_info.str());
   }
 
diff --git a/tests/test_FunctionArgumentConverter.cpp b/tests/test_FunctionArgumentConverter.cpp
index e3d2ee093..dfa637bf7 100644
--- a/tests/test_FunctionArgumentConverter.cpp
+++ b/tests/test_FunctionArgumentConverter.cpp
@@ -20,7 +20,7 @@ TEST_CASE("FunctionArgumentConverter", "[language]")
     FunctionArgumentToStringConverter converter1{1};
     converter1.convert(execution_policy, X);
     std::ostringstream os_X;
-    os_X << X << std::ends;
+    os_X << X;
 
     const double x = 3.2;
     FunctionArgumentToStringConverter converter2{2};
diff --git a/tests/test_ListAffectationProcessor.cpp b/tests/test_ListAffectationProcessor.cpp
index e0f17e7f5..e2a091995 100644
--- a/tests/test_ListAffectationProcessor.cpp
+++ b/tests/test_ListAffectationProcessor.cpp
@@ -89,19 +89,19 @@ TEST_CASE("ListAffectationProcessor", "[language]")
                                std::to_string(double{3}));
       {
         std::ostringstream os;
-        os << TinyVector<1>{7} << std::ends;
+        os << TinyVector<1>{7};
         CHECK_AFFECTATION_RESULT(R"(let v:R^1, v = 7; let  (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), v);)", "s",
                                  os.str());
       }
       {
         std::ostringstream os;
-        os << TinyVector<2>{6, 3} << std::ends;
+        os << TinyVector<2>{6, 3};
         CHECK_AFFECTATION_RESULT(R"(let v: R^2, v = (6,3); let (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), v);)", "s",
                                  os.str());
       }
       {
         std::ostringstream os;
-        os << TinyVector<3>{1, 2, 3} << std::ends;
+        os << TinyVector<3>{1, 2, 3};
         CHECK_AFFECTATION_RESULT(R"(let v:R^3, v = (1,2,3); let (x,u,s):R*R^2*string, (x,u,s) = (1.2, (2,3), v);)", "s",
                                  os.str());
       }
-- 
GitLab