From 6882fae187e7bd1aca75e5d84d7c80551b479e1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Fri, 3 Jun 2022 12:48:57 +0200 Subject: [PATCH] Remove pre and post increment of real values from the language --- doc/userdoc.org | 6 +- src/language/modules/CoreModule.cpp | 2 - src/language/utils/CMakeLists.txt | 1 - .../utils/IncDecOperatorRegisterForR.cpp | 58 -------------- .../utils/IncDecOperatorRegisterForR.hpp | 16 ---- .../test_ASTNodeFunctionExpressionBuilder.cpp | 24 +++--- tests/test_ASTNodeIncDecExpressionBuilder.cpp | 76 ------------------- tests/test_IncDecExpressionProcessor.cpp | 35 +++------ 8 files changed, 26 insertions(+), 192 deletions(-) delete mode 100644 src/language/utils/IncDecOperatorRegisterForR.cpp delete mode 100644 src/language/utils/IncDecOperatorRegisterForR.hpp diff --git a/doc/userdoc.org b/doc/userdoc.org index b58c69765..963ae2df8 100644 --- a/doc/userdoc.org +++ b/doc/userdoc.org @@ -1218,9 +1218,9 @@ operators can be defined for high-level types. - The ~-~ unary operator is defined for numeric basic types: ~B~, ~N~, ~Z~, ~R~, ~R^1~, ~R^2~, ~R^3~, ~R^1x1~, ~R^2x2~ and ~R^3x3~. It is not defined for ~string~ variables. -- Pre and post increment operators, ~--~ and ~++~, are defined for all - scalar basic types: ~N~, ~Z~ and ~R~. They are not defined for ~B~, ~R^1~, - ~R^2~, ~R^3~, ~R^1x1~, ~R^2x2~, ~R^3x3~ and ~string~ variables. +- Pre and post increment operators, ~--~ and ~++~, are defined for integer + types: ~N~ and ~Z~. They are not defined for ~B~, ~R~, ~R^1~, ~R^2~, ~R^3~, ~R^1x1~, + ~R^2x2~, ~R^3x3~ and ~string~ variables. Note that the pre increment/decrement operators behave slightly differently than their ~C++~ counterparts since they are not allowed to diff --git a/src/language/modules/CoreModule.cpp b/src/language/modules/CoreModule.cpp index 9b70144e8..966953add 100644 --- a/src/language/modules/CoreModule.cpp +++ b/src/language/modules/CoreModule.cpp @@ -20,7 +20,6 @@ #include <language/utils/BinaryOperatorRegisterForZ.hpp> #include <language/utils/BuiltinFunctionEmbedder.hpp> #include <language/utils/IncDecOperatorRegisterForN.hpp> -#include <language/utils/IncDecOperatorRegisterForR.hpp> #include <language/utils/IncDecOperatorRegisterForZ.hpp> #include <language/utils/OFStream.hpp> #include <language/utils/OStream.hpp> @@ -134,7 +133,6 @@ CoreModule::registerOperators() const BinaryOperatorRegisterForString{}; IncDecOperatorRegisterForN{}; - IncDecOperatorRegisterForR{}; IncDecOperatorRegisterForZ{}; UnaryOperatorRegisterForB{}; diff --git a/src/language/utils/CMakeLists.txt b/src/language/utils/CMakeLists.txt index cd3f8af23..b76655995 100644 --- a/src/language/utils/CMakeLists.txt +++ b/src/language/utils/CMakeLists.txt @@ -28,7 +28,6 @@ add_library(PugsLanguageUtils EmbeddedIDiscreteFunctionUtils.cpp FunctionSymbolId.cpp IncDecOperatorRegisterForN.cpp - IncDecOperatorRegisterForR.cpp IncDecOperatorRegisterForZ.cpp OFStream.cpp OperatorRepository.cpp diff --git a/src/language/utils/IncDecOperatorRegisterForR.cpp b/src/language/utils/IncDecOperatorRegisterForR.cpp deleted file mode 100644 index 503175146..000000000 --- a/src/language/utils/IncDecOperatorRegisterForR.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include <language/utils/IncDecOperatorRegisterForR.hpp> - -#include <language/utils/IncDecOperatorProcessorBuilder.hpp> -#include <language/utils/OperatorRepository.hpp> - -void -IncDecOperatorRegisterForR::_register_unary_minusminus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R = ASTNodeDataType::build<ASTNodeDataType::double_t>(); - - repository.addIncDecOperator<language::unary_minusminus>(R, std::make_shared<IncDecOperatorProcessorBuilder< - language::unary_minusminus, double_t>>()); -} - -void -IncDecOperatorRegisterForR::_register_unary_plusplus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R = ASTNodeDataType::build<ASTNodeDataType::double_t>(); - - repository.addIncDecOperator< - language::unary_plusplus>(R, - std::make_shared<IncDecOperatorProcessorBuilder<language::unary_plusplus, double_t>>()); -} - -void -IncDecOperatorRegisterForR::_register_post_minusminus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R = ASTNodeDataType::build<ASTNodeDataType::double_t>(); - - repository.addIncDecOperator< - language::post_minusminus>(R, - std::make_shared<IncDecOperatorProcessorBuilder<language::post_minusminus, double_t>>()); -} - -void -IncDecOperatorRegisterForR::_register_post_plusplus() -{ - OperatorRepository& repository = OperatorRepository::instance(); - - auto R = ASTNodeDataType::build<ASTNodeDataType::double_t>(); - - repository.addIncDecOperator< - language::post_plusplus>(R, std::make_shared<IncDecOperatorProcessorBuilder<language::post_plusplus, double_t>>()); -} - -IncDecOperatorRegisterForR::IncDecOperatorRegisterForR() -{ - this->_register_unary_minusminus(); - this->_register_unary_plusplus(); - this->_register_post_minusminus(); - this->_register_post_plusplus(); -} diff --git a/src/language/utils/IncDecOperatorRegisterForR.hpp b/src/language/utils/IncDecOperatorRegisterForR.hpp deleted file mode 100644 index 5ede6b999..000000000 --- a/src/language/utils/IncDecOperatorRegisterForR.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef INC_DEC_OPERATOR_REGISTER_FOR_R_HPP -#define INC_DEC_OPERATOR_REGISTER_FOR_R_HPP - -class IncDecOperatorRegisterForR -{ - private: - void _register_unary_minusminus(); - void _register_unary_plusplus(); - void _register_post_minusminus(); - void _register_post_plusplus(); - - public: - IncDecOperatorRegisterForR(); -}; - -#endif // INC_DEC_OPERATOR_REGISTER_FOR_Z_HPP diff --git a/tests/test_ASTNodeFunctionExpressionBuilder.cpp b/tests/test_ASTNodeFunctionExpressionBuilder.cpp index 4bf775a67..f6ed151fa 100644 --- a/tests/test_ASTNodeFunctionExpressionBuilder.cpp +++ b/tests/test_ASTNodeFunctionExpressionBuilder.cpp @@ -1190,7 +1190,7 @@ f((1,2,3),2,3); SECTION("++ argument") { std::string_view data = R"( -let non_pure : R -> R, x -> 3 * ++x; +let non_pure : N -> N, x -> 3 * ++x; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1200,7 +1200,7 @@ let non_pure : R -> R, x -> 3 * ++x; SECTION("argument ++") { std::string_view data = R"( -let non_pure : R -> R, x -> 1 + x ++; +let non_pure : N -> N, x -> 1 + x ++; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1210,7 +1210,7 @@ let non_pure : R -> R, x -> 1 + x ++; SECTION("-- argument") { std::string_view data = R"( -let non_pure : R -> R, x -> 3 * --x; +let non_pure : Z -> Z, x -> 3 * --x; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1220,7 +1220,7 @@ let non_pure : R -> R, x -> 3 * --x; SECTION("argument --") { std::string_view data = R"( -let non_pure : R -> R, x -> 1 + x --; +let non_pure : Z -> Z, x -> 1 + x --; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1233,8 +1233,8 @@ let non_pure : R -> R, x -> 1 + x --; SECTION("++ outer variable") { std::string_view data = R"( -let a:R, a = 4; -let non_pure : R -> R, x -> x * ++a; +let a:N, a = 4; +let non_pure : Z -> Z, x -> x * ++a; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1244,8 +1244,8 @@ let non_pure : R -> R, x -> x * ++a; SECTION("outer variable ++") { std::string_view data = R"( -let a:R, a = 4; -let non_pure : R -> R, x -> x + a++; +let a:N, a = 4; +let non_pure : N -> N, x -> x + a++; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1255,8 +1255,8 @@ let non_pure : R -> R, x -> x + a++; SECTION("-- outer variable") { std::string_view data = R"( -let a:R, a = 4; -let non_pure : R -> R, x -> x * --a; +let a:Z, a = 4; +let non_pure : Z -> Z, x -> x * --a; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ @@ -1266,8 +1266,8 @@ let non_pure : R -> R, x -> x * --a; SECTION("outer variable --") { std::string_view data = R"( -let a:R, a = 4; -let non_pure : R -> R, x -> x + a--; +let a:Z, a = 4; +let non_pure : Z -> Z, x -> x + a--; )"; CHECK_EXPRESSION_BUILDER_THROWS_WITH(data, std::string{ diff --git a/tests/test_ASTNodeIncDecExpressionBuilder.cpp b/tests/test_ASTNodeIncDecExpressionBuilder.cpp index ac1c650a2..41297a7f0 100644 --- a/tests/test_ASTNodeIncDecExpressionBuilder.cpp +++ b/tests/test_ASTNodeIncDecExpressionBuilder.cpp @@ -105,25 +105,6 @@ let i : Z, i=0; CHECK_AST(data, result); } - - SECTION("R") - { - std::string_view data = R"( -let x : R, x=0; -++x; -)"; - - std::string_view result = R"( -(root:ASTNodeListProcessor) - +-(language::eq_op:AffectationProcessor<language::eq_op, double, long>) - | +-(language::name:x:NameProcessor) - | `-(language::integer:0:ValueProcessor) - `-(language::unary_plusplus:IncDecExpressionProcessor<language::unary_plusplus, double>) - `-(language::name:x:NameProcessor) -)"; - - CHECK_AST(data, result); - } } SECTION("Pre-decrement") @@ -165,25 +146,6 @@ let i : Z, i=0; CHECK_AST(data, result); } - - SECTION("R") - { - std::string_view data = R"( -let x : R, x=2.3; ---x; -)"; - - std::string_view result = R"( -(root:ASTNodeListProcessor) - +-(language::eq_op:AffectationProcessor<language::eq_op, double, double>) - | +-(language::name:x:NameProcessor) - | `-(language::real:2.3:ValueProcessor) - `-(language::unary_minusminus:IncDecExpressionProcessor<language::unary_minusminus, double>) - `-(language::name:x:NameProcessor) -)"; - - CHECK_AST(data, result); - } } SECTION("Post-increment") @@ -225,25 +187,6 @@ i++; CHECK_AST(data, result); } - - SECTION("R") - { - std::string_view data = R"( -let x : R, x=0; -x++; -)"; - - std::string_view result = R"( -(root:ASTNodeListProcessor) - +-(language::eq_op:AffectationProcessor<language::eq_op, double, long>) - | +-(language::name:x:NameProcessor) - | `-(language::integer:0:ValueProcessor) - `-(language::post_plusplus:IncDecExpressionProcessor<language::post_plusplus, double>) - `-(language::name:x:NameProcessor) -)"; - - CHECK_AST(data, result); - } } SECTION("Post-decrement") @@ -285,25 +228,6 @@ i--; CHECK_AST(data, result); } - - SECTION("R") - { - std::string_view data = R"( -let x : R, x=2.3; -x--; -)"; - - std::string_view result = R"( -(root:ASTNodeListProcessor) - +-(language::eq_op:AffectationProcessor<language::eq_op, double, double>) - | +-(language::name:x:NameProcessor) - | `-(language::real:2.3:ValueProcessor) - `-(language::post_minusminus:IncDecExpressionProcessor<language::post_minusminus, double>) - `-(language::name:x:NameProcessor) -)"; - - CHECK_AST(data, result); - } } SECTION("Errors") diff --git a/tests/test_IncDecExpressionProcessor.cpp b/tests/test_IncDecExpressionProcessor.cpp index 5075ee900..a69d9d951 100644 --- a/tests/test_IncDecExpressionProcessor.cpp +++ b/tests/test_IncDecExpressionProcessor.cpp @@ -75,12 +75,6 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; ++z;)", "z", 3l); CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = ++z;)", "p", 3l); } - - SECTION("R") - { - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; ++r;)", "r", 3.); - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = ++r;)", "s", 3.); - } } SECTION("pre --") @@ -96,12 +90,6 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; --z;)", "z", 1l); CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = --z;)", "p", 1l); } - - SECTION("R") - { - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; --r;)", "r", 1.); - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = --r;)", "s", 1.); - } } SECTION("post ++") @@ -117,12 +105,6 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; z++;)", "z", 3l); CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = z++;)", "p", 2l); } - - SECTION("R") - { - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; r++;)", "r", 3.); - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = r++;)", "s", 2.); - } } SECTION("post --") @@ -138,12 +120,6 @@ TEST_CASE("IncDecExpressionProcessor", "[language]") CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; z--;)", "z", 1l); CHECK_INC_DEC_RESULT(R"(let z:Z, z = 2; let p:Z, p = z--;)", "p", 2l); } - - SECTION("R") - { - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; r--;)", "r", 1.); - CHECK_INC_DEC_RESULT(R"(let r:R, r = 2; let s:R, s = r--;)", "s", 2.); - } } SECTION("errors") @@ -170,6 +146,17 @@ note: unexpected operand type )"} + CHECK_INCDEC_EXPRESSION_THROWS_WITH(R"(++true;)", error_message("B")); } + SECTION("undefined pre ++ operator") + { + auto error_message = [](std::string type_name) { + return std::string{R"(undefined increment/decrement operator +note: unexpected operand type )"} + + type_name; + }; + + CHECK_INCDEC_EXPRESSION_THROWS_WITH(R"(++1.2;)", error_message("R")); + } + SECTION("undefined post -- operator") { auto error_message = [](std::string type_name) { -- GitLab