From 776199d4b378fd511edd5c6043adfa0f5efa8a9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Del=20Pino?= <stephane.delpino44@gmail.com> Date: Sat, 27 Mar 2021 19:32:32 +0100 Subject: [PATCH] Revert "Merge branch 'feature/builtin-function-polymorphism' into 'develop'" This reverts commit eed899346da2e9d93c59661b14e40a2c298a76be, reversing changes made to b6571c5101a52a50219fd48da7263007ac95f908. This was a premature merge: parts of the code which are not tested were broken. --- ...STNodeBuiltinFunctionExpressionBuilder.cpp | 13 +- src/language/ast/ASTNodeDataTypeBuilder.cpp | 20 +- src/language/ast/ASTNodeExpressionBuilder.cpp | 15 +- ...odeFunctionEvaluationExpressionBuilder.cpp | 5 +- .../ast/ASTNodeFunctionExpressionBuilder.cpp | 3 +- .../ast/ASTSymbolInitializationChecker.cpp | 5 +- src/language/ast/ASTSymbolTableBuilder.cpp | 29 +-- src/language/modules/BuiltinModule.cpp | 48 +--- src/language/modules/ModuleRepository.cpp | 36 +-- .../utils/BuiltinFunctionEmbedderUtils.cpp | 209 ----------------- .../utils/BuiltinFunctionEmbedderUtils.hpp | 11 - src/language/utils/CMakeLists.txt | 1 - src/language/utils/SymbolTable.hpp | 60 +---- tests/test_ASTModulesImporter.cpp | 4 +- ...STNodeBuiltinFunctionExpressionBuilder.cpp | 213 ++++++++---------- ...odeFunctionEvaluationExpressionBuilder.cpp | 2 +- tests/test_BuiltinFunctionProcessor.cpp | 44 ++-- tests/test_BuiltinFunctionRegister.hpp | 118 +++++----- tests/test_MathModule.cpp | 44 ++-- 19 files changed, 235 insertions(+), 645 deletions(-) delete mode 100644 src/language/utils/BuiltinFunctionEmbedderUtils.cpp delete mode 100644 src/language/utils/BuiltinFunctionEmbedderUtils.hpp diff --git a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp index 487259530..248511e6c 100644 --- a/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeBuiltinFunctionExpressionBuilder.cpp @@ -4,7 +4,6 @@ #include <language/ast/ASTNodeDataTypeFlattener.hpp> #include <language/node_processor/BuiltinFunctionProcessor.hpp> #include <language/utils/ASTNodeNaturalConversionChecker.hpp> -#include <language/utils/BuiltinFunctionEmbedderUtils.hpp> #include <language/utils/ParseError.hpp> #include <language/utils/SymbolTable.hpp> @@ -495,8 +494,7 @@ ASTNodeBuiltinFunctionExpressionBuilder::_buildArgumentProcessors( if (arguments_number != parameters_number) { std::ostringstream error_message; error_message << "bad number of arguments: expecting " << rang::fgB::yellow << parameters_number - << rang::style::reset << rang::style::bold << ", provided " << rang::fgB::yellow << arguments_number - << rang::style::reset; + << rang::style::reset << ", provided " << rang::fgB::yellow << arguments_number << rang::style::reset; throw ParseError(error_message.str(), argument_nodes.begin()); } @@ -507,9 +505,14 @@ ASTNodeBuiltinFunctionExpressionBuilder::_buildArgumentProcessors( ASTNodeBuiltinFunctionExpressionBuilder::ASTNodeBuiltinFunctionExpressionBuilder(ASTNode& node) { - Assert(node.children[0]->m_data_type == ASTNodeDataType::builtin_function_t); + auto [i_function_symbol, found] = node.m_symbol_table->find(node.children[0]->string(), node.begin()); + Assert(found); + Assert(i_function_symbol->attributes().dataType() == ASTNodeDataType::builtin_function_t); - std::shared_ptr builtin_function_embedder = getBuiltinFunctionEmbedder(node); + uint64_t builtin_function_id = std::get<uint64_t>(i_function_symbol->attributes().value()); + + auto& builtin_function_embedder_table = node.m_symbol_table->builtinFunctionEmbedderTable(); + std::shared_ptr builtin_function_embedder = builtin_function_embedder_table[builtin_function_id]; std::vector<ASTNodeDataType> builtin_function_parameter_type_list = builtin_function_embedder->getParameterDataTypes(); diff --git a/src/language/ast/ASTNodeDataTypeBuilder.cpp b/src/language/ast/ASTNodeDataTypeBuilder.cpp index 24841d797..b5f65437c 100644 --- a/src/language/ast/ASTNodeDataTypeBuilder.cpp +++ b/src/language/ast/ASTNodeDataTypeBuilder.cpp @@ -3,7 +3,6 @@ #include <language/PEGGrammar.hpp> #include <language/utils/ASTNodeNaturalConversionChecker.hpp> #include <language/utils/BuiltinFunctionEmbedder.hpp> -#include <language/utils/BuiltinFunctionEmbedderUtils.hpp> #include <language/utils/OperatorRepository.hpp> #include <language/utils/ParseError.hpp> #include <language/utils/SymbolTable.hpp> @@ -285,13 +284,8 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const std::shared_ptr<SymbolTable>& symbol_table = n.m_symbol_table; auto [i_symbol, found] = symbol_table->find(n.string(), n.begin()); - if (found) { - n.m_data_type = i_symbol->attributes().dataType(); - } else if (symbol_table->has(n.string(), n.begin())) { - n.m_data_type = ASTNodeDataType::build<ASTNodeDataType::builtin_function_t>(); - } else { - throw UnexpectedError("could not find symbol " + n.string()); - } + Assert(found); + n.m_data_type = i_symbol->attributes().dataType(); } } for (auto& child : n.children) { @@ -528,7 +522,15 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const n.m_data_type = image_domain_node.m_data_type.contentType(); } else if (n.children[0]->m_data_type == ASTNodeDataType::builtin_function_t) { - auto builtin_function_embedder = getBuiltinFunctionEmbedder(n); + const std::string builtin_function_name = n.children[0]->string(); + auto& symbol_table = *n.m_symbol_table; + + auto [i_symbol, success] = symbol_table.find(builtin_function_name, n.begin()); + Assert(success); + + uint64_t builtin_function_id = std::get<uint64_t>(i_symbol->attributes().value()); + auto builtin_function_embedder = symbol_table.builtinFunctionEmbedderTable()[builtin_function_id]; + Assert(builtin_function_embedder); n.m_data_type = builtin_function_embedder->getReturnDataType(); } else { diff --git a/src/language/ast/ASTNodeExpressionBuilder.cpp b/src/language/ast/ASTNodeExpressionBuilder.cpp index f8d26d197..fcdc4e1b9 100644 --- a/src/language/ast/ASTNodeExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeExpressionBuilder.cpp @@ -68,17 +68,12 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n) n.m_node_processor = std::make_unique<FakeProcessor>(); } else if (n.is_type<language::name>()) { - if (n.m_data_type == ASTNodeDataType::builtin_function_t) { - n.m_node_processor = std::make_unique<FakeProcessor>(); + // Dealing with contexts + auto [i_symbol, success] = n.m_symbol_table->find(n.string(), n.begin()); + if (i_symbol->attributes().hasLocalContext()) { + n.m_node_processor = std::make_unique<LocalNameProcessor>(n); } else { - // Dealing with contexts - auto [i_symbol, success] = n.m_symbol_table->find(n.string(), n.begin()); - Assert(success, "could not find symbol"); - if (i_symbol->attributes().hasLocalContext()) { - n.m_node_processor = std::make_unique<LocalNameProcessor>(n); - } else { - n.m_node_processor = std::make_unique<NameProcessor>(n); - } + n.m_node_processor = std::make_unique<NameProcessor>(n); } } else if (n.is_type<language::unary_minus>() or n.is_type<language::unary_not>()) { ASTNodeUnaryOperatorExpressionBuilder{n}; diff --git a/src/language/ast/ASTNodeFunctionEvaluationExpressionBuilder.cpp b/src/language/ast/ASTNodeFunctionEvaluationExpressionBuilder.cpp index 126ef86fc..13af5a812 100644 --- a/src/language/ast/ASTNodeFunctionEvaluationExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeFunctionEvaluationExpressionBuilder.cpp @@ -7,7 +7,10 @@ ASTNodeFunctionEvaluationExpressionBuilder::ASTNodeFunctionEvaluationExpressionBuilder(ASTNode& node) { - switch (node.children[0]->m_data_type) { + auto [i_function_symbol, found] = node.m_symbol_table->find(node.children[0]->string(), node.begin()); + Assert(found); + + switch (i_function_symbol->attributes().dataType()) { case ASTNodeDataType::function_t: { ASTNodeFunctionExpressionBuilder{node}; break; diff --git a/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp b/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp index 1fb23a5de..6484b85b0 100644 --- a/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp +++ b/src/language/ast/ASTNodeFunctionExpressionBuilder.cpp @@ -233,8 +233,7 @@ ASTNodeFunctionExpressionBuilder::_buildArgumentConverter(FunctionDescriptor& fu if (arguments_number != parameters_number) { std::ostringstream error_message; error_message << "bad number of arguments: expecting " << rang::fgB::yellow << parameters_number - << rang::style::reset << rang::style::bold << ", provided " << rang::fgB::yellow << arguments_number - << rang::style::reset; + << rang::style::reset << ", provided " << rang::fgB::yellow << arguments_number << rang::style::reset; throw ParseError(error_message.str(), argument_nodes.begin()); } diff --git a/src/language/ast/ASTSymbolInitializationChecker.cpp b/src/language/ast/ASTSymbolInitializationChecker.cpp index 8fe9ac4f7..c37d4ba6b 100644 --- a/src/language/ast/ASTSymbolInitializationChecker.cpp +++ b/src/language/ast/ASTSymbolInitializationChecker.cpp @@ -107,9 +107,8 @@ ASTSymbolInitializationChecker::_checkSymbolInitialization(ASTNode& node) } } else if (node.is_type<language::name>()) { auto [i_symbol, found] = node.m_symbol_table->find(node.string(), node.begin()); - Assert(node.m_symbol_table->has(node.string(), node.begin()), - "unexpected error, should have been detected through declaration checking"); - if (found and not i_symbol->attributes().isInitialized()) { + Assert(found, "unexpected error, should have been detected through declaration checking"); + if (not i_symbol->attributes().isInitialized()) { std::ostringstream error_message; error_message << "uninitialized symbol '" << rang::fg::red << node.string() << rang::fg::reset << '\''; throw ParseError(error_message.str(), std::vector{node.begin()}); diff --git a/src/language/ast/ASTSymbolTableBuilder.cpp b/src/language/ast/ASTSymbolTableBuilder.cpp index 44058de6f..feb0b0130 100644 --- a/src/language/ast/ASTSymbolTableBuilder.cpp +++ b/src/language/ast/ASTSymbolTableBuilder.cpp @@ -22,19 +22,11 @@ ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable> n.m_symbol_table = local_symbol_table; const std::string& symbol = n.children[0]->string(); - - if (symbol_table->getBuiltinFunctionSymbolList(symbol, n.children[0]->begin()).size() > 0) { - std::ostringstream error_message; - error_message << "symbol '" << rang::fg::red << symbol << rang::fg::reset - << "' already denotes a builtin function!"; - throw ParseError(error_message.str(), std::vector{n.children[0]->begin()}); - } - - auto [i_symbol, success] = symbol_table->add(symbol, n.children[0]->begin()); + auto [i_symbol, success] = symbol_table->add(symbol, n.children[0]->begin()); if (not success) { std::ostringstream error_message; error_message << "symbol '" << rang::fg::red << symbol << rang::fg::reset << "' was already defined!"; - throw ParseError(error_message.str(), std::vector{n.children[0]->begin()}); + throw ParseError(error_message.str(), std::vector{n.begin()}); } for (auto& child : n.children) { @@ -50,13 +42,6 @@ ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable> if (n.has_content()) { if (n.is_type<language::var_declaration>()) { auto register_symbol = [&](const ASTNode& argument_node) { - if (symbol_table->getBuiltinFunctionSymbolList(argument_node.string(), argument_node.begin()).size() > 0) { - std::ostringstream error_message; - error_message << "symbol '" << rang::fg::red << argument_node.string() << rang::fg::reset - << "' already denotes a builtin function!"; - throw ParseError(error_message.str(), std::vector{argument_node.begin()}); - } - auto [i_symbol, success] = symbol_table->add(argument_node.string(), argument_node.begin()); if (not success) { std::ostringstream error_message; @@ -76,13 +61,6 @@ ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable> } } else if (n.is_type<language::function_definition>()) { auto register_and_initialize_symbol = [&](const ASTNode& argument_node) { - if (symbol_table->getBuiltinFunctionSymbolList(argument_node.string(), argument_node.begin()).size() > 0) { - std::ostringstream error_message; - error_message << "symbol '" << rang::fg::red << argument_node.string() << rang::fg::reset - << "' already denotes a builtin function!"; - throw ParseError(error_message.str(), std::vector{argument_node.begin()}); - } - auto [i_symbol, success] = symbol_table->add(argument_node.string(), argument_node.begin()); if (not success) { std::ostringstream error_message; @@ -103,7 +81,8 @@ ASTSymbolTableBuilder::buildSymbolTable(ASTNode& n, std::shared_ptr<SymbolTable> } } } else if (n.is_type<language::name>()) { - if (not symbol_table->has(n.string(), n.begin())) { + auto [i_symbol, found] = symbol_table->find(n.string(), n.begin()); + if (not found) { std::ostringstream error_message; error_message << "undefined symbol '" << rang::fg::red << n.string() << rang::fg::reset << '\''; throw ParseError(error_message.str(), std::vector{n.begin()}); diff --git a/src/language/modules/BuiltinModule.cpp b/src/language/modules/BuiltinModule.cpp index e4101ee49..22d23f803 100644 --- a/src/language/modules/BuiltinModule.cpp +++ b/src/language/modules/BuiltinModule.cpp @@ -12,54 +12,8 @@ void BuiltinModule::_addBuiltinFunction(const std::string& name, std::shared_ptr<IBuiltinFunctionEmbedder> builtin_function_embedder) { - auto is_keyword = [](const std::string& s) -> bool { - if (s.size() == 0) { - return false; - } else { - if (not(std::isalpha(s[0]) or s[0] == '_')) { - return false; - } - for (size_t i = 1; i < s.size(); ++i) { - if (not(std::isalnum(s[0]) or s[0] == '_')) { - return false; - } - } - } - - return true; - }; - - if (not is_keyword(name)) { - std::ostringstream os; - os << "while defining module " << this->name() << " invalid builtin function name: '" << name << "'\n"; - throw UnexpectedError(os.str()); - } - - auto parameter_data_type_list = builtin_function_embedder->getParameterDataTypes(); - - std::string mangled_name = [&] { - std::ostringstream os; - os << name << '('; - switch (parameter_data_type_list.size()) { - case 0: { - break; - } - case 1: { - os << dataTypeName(parameter_data_type_list[0]); - break; - } - default: - os << dataTypeName(parameter_data_type_list[0]); - for (size_t i = 1; i < parameter_data_type_list.size(); ++i) { - os << ',' << dataTypeName(parameter_data_type_list[i]); - } - } - os << ')'; - return os.str(); - }(); - auto [i_builtin_function, success] = - m_name_builtin_function_map.insert(std::make_pair(mangled_name, builtin_function_embedder)); + m_name_builtin_function_map.insert(std::make_pair(name, builtin_function_embedder)); if (not success) { throw NormalError("builtin-function '" + name + "' cannot be added!\n"); } diff --git a/src/language/modules/ModuleRepository.cpp b/src/language/modules/ModuleRepository.cpp index e516ab800..d0cd8260b 100644 --- a/src/language/modules/ModuleRepository.cpp +++ b/src/language/modules/ModuleRepository.cpp @@ -20,29 +20,6 @@ void ModuleRepository::_subscribe(std::unique_ptr<IModule> m) { - auto is_keyword = [](const std::string& s) -> bool { - if (s.size() == 0) { - return false; - } else { - if (not(std::isalpha(s[0]) or s[0] == '_')) { - return false; - } - for (size_t i = 1; i < s.size(); ++i) { - if (not(std::isalnum(s[0]) or s[0] == '_')) { - return false; - } - } - } - - return true; - }; - - if (not is_keyword(std::string{m->name()})) { - std::ostringstream os; - os << "cannot subscribe module with invalid name: '" << m->name() << "'\n"; - throw UnexpectedError(os.str()); - } - auto [i_module, success] = m_module_set.emplace(m->name(), std::move(m)); Assert(success, "module has already been subscribed"); } @@ -170,15 +147,6 @@ ModuleRepository::registerOperators(const std::string& module_name) std::string ModuleRepository::getModuleInfo(const std::string& module_name) const { - auto demangleBuiltinFunction = [](const std::string& mangled_name) -> std::string { - size_t i = 0; - for (; i < mangled_name.size(); ++i) { - if (mangled_name[i] == '(') - break; - } - return mangled_name.substr(0, i); - }; - std::stringstream os; auto i_module = m_module_set.find(module_name); if (i_module != m_module_set.end()) { @@ -187,8 +155,8 @@ ModuleRepository::getModuleInfo(const std::string& module_name) const const auto& builtin_function_map = i_module->second->getNameBuiltinFunctionMap(); if (builtin_function_map.size() > 0) { os << " functions\n"; - for (auto& [mangled_name, function] : builtin_function_map) { - os << " " << rang::fgB::green << demangleBuiltinFunction(mangled_name) << rang::style::reset << ": "; + for (auto& [name, function] : builtin_function_map) { + os << " " << rang::fgB::green << name << rang::style::reset << ": "; os << dataTypeName(function->getParameterDataTypes()); os << rang::fgB::yellow << " -> " << rang::style::reset; os << dataTypeName(function->getReturnDataType()) << '\n'; diff --git a/src/language/utils/BuiltinFunctionEmbedderUtils.cpp b/src/language/utils/BuiltinFunctionEmbedderUtils.cpp deleted file mode 100644 index b9fad0864..000000000 --- a/src/language/utils/BuiltinFunctionEmbedderUtils.cpp +++ /dev/null @@ -1,209 +0,0 @@ -#include <language/utils/BuiltinFunctionEmbedderUtils.hpp> - -#include <language/PEGGrammar.hpp> -#include <language/ast/ASTNode.hpp> -#include <language/utils/BuiltinFunctionEmbedder.hpp> -#include <language/utils/ParseError.hpp> -#include <language/utils/SymbolTable.hpp> - -void -flattenDataTypes(const ASTNodeDataType& data_type, std::vector<ASTNodeDataType>& arg_type_list) -{ - if ((data_type == ASTNodeDataType::list_t) and (*data_type.contentTypeList()[0] == ASTNodeDataType::typename_t)) { - for (auto data_type : data_type.contentTypeList()) { - arg_type_list.push_back(data_type->contentType()); - } - } else { - arg_type_list.push_back(data_type); - } -} - -std::shared_ptr<IBuiltinFunctionEmbedder> -getBuiltinFunctionEmbedder(ASTNode& n) -{ - const std::string builtin_function_name = n.children[0]->string(); - auto& symbol_table = *n.m_symbol_table; - - auto& args_node = *n.children[1]; - - std::vector<ASTNodeDataType> arg_type_list; - if (args_node.is_type<language::function_argument_list>()) { - for (auto& arg : args_node.children) { - flattenDataTypes(arg->m_data_type, arg_type_list); - } - } else { - flattenDataTypes(args_node.m_data_type, arg_type_list); - } - - std::ostringstream mangled_name; - mangled_name << builtin_function_name; - if (size(arg_type_list) == 0) { - mangled_name << "()"; - } else if (size(arg_type_list) == 1) { - mangled_name << '(' << dataTypeName(arg_type_list[0]) << ')'; - } else { - mangled_name << dataTypeName(arg_type_list); - } - - std::vector builtin_function_candidate_list = - symbol_table.getBuiltinFunctionSymbolList(builtin_function_name, n.begin()); - - auto is_castable_to_vector = [](const ASTNodeDataType& arg_type, const ASTNodeDataType& target_type) { - bool is_castable = true; - if (target_type.dimension() > 1) { - switch (arg_type) { - case ASTNodeDataType::int_t: { - break; - } - case ASTNodeDataType::list_t: { - if (arg_type.contentTypeList().size() != target_type.dimension()) { - is_castable = false; - break; - } - for (auto list_arg : arg_type.contentTypeList()) { - is_castable &= isNaturalConversion(*list_arg, ASTNodeDataType::build<ASTNodeDataType::double_t>()); - } - break; - } - default: { - is_castable &= false; - } - } - } else { - is_castable &= isNaturalConversion(arg_type, ASTNodeDataType::build<ASTNodeDataType::double_t>()); - } - return is_castable; - }; - - auto is_castable_to_matrix = [](const ASTNodeDataType& arg_type, const ASTNodeDataType& target_type) { - bool is_castable = true; - if (target_type.nbRows() > 1) { - switch (arg_type) { - case ASTNodeDataType::int_t: { - break; - } - case ASTNodeDataType::list_t: { - if (arg_type.contentTypeList().size() != target_type.nbRows() * target_type.nbColumns()) { - is_castable = false; - break; - } - for (auto list_arg : arg_type.contentTypeList()) { - is_castable &= isNaturalConversion(*list_arg, ASTNodeDataType::build<ASTNodeDataType::double_t>()); - } - break; - } - default: { - is_castable &= false; - } - } - } else { - is_castable &= isNaturalConversion(arg_type, ASTNodeDataType::build<ASTNodeDataType::double_t>()); - } - return is_castable; - }; - - std::vector<uint64_t> callable_id_list; - for (auto candidate : builtin_function_candidate_list) { - uint64_t builtin_function_id = std::get<uint64_t>(candidate.attributes().value()); - - auto& builtin_function_embedder_table = n.m_symbol_table->builtinFunctionEmbedderTable(); - std::shared_ptr builtin_function_embedder = builtin_function_embedder_table[builtin_function_id]; - - if (builtin_function_embedder->numberOfParameters() == arg_type_list.size()) { - std::vector<ASTNodeDataType> builtin_function_parameter_type_list = - builtin_function_embedder->getParameterDataTypes(); - bool is_castable = true; - for (size_t i_arg = 0; i_arg < arg_type_list.size(); ++i_arg) { - const ASTNodeDataType& target_type = builtin_function_parameter_type_list[i_arg]; - std::vector<ASTNodeDataType> sub_arg_type_list; - if (arg_type_list[i_arg] == ASTNodeDataType::list_t) { - for (auto& arg_type : arg_type_list[i_arg].contentTypeList()) { - sub_arg_type_list.push_back(*arg_type); - } - } else { - sub_arg_type_list.push_back(arg_type_list[i_arg]); - } - for (auto arg_type : sub_arg_type_list) { - if (not isNaturalConversion(arg_type, target_type)) { - switch (target_type) { - case ASTNodeDataType::vector_t: { - is_castable &= is_castable_to_vector(arg_type, target_type); - break; - } - case ASTNodeDataType::matrix_t: { - is_castable &= is_castable_to_matrix(arg_type, target_type); - break; - } - case ASTNodeDataType::tuple_t: { - ASTNodeDataType tuple_content_type = target_type.contentType(); - if (not isNaturalConversion(arg_type, tuple_content_type)) { - switch (tuple_content_type) { - case ASTNodeDataType::vector_t: { - is_castable &= is_castable_to_vector(arg_type, tuple_content_type); - break; - } - case ASTNodeDataType::matrix_t: { - is_castable &= is_castable_to_matrix(arg_type, tuple_content_type); - break; - } - default: - is_castable &= false; - } - } - break; - } - default: - is_castable &= false; - } - } - } - } - if (is_castable) { - callable_id_list.push_back(builtin_function_id); - } - } - } - - uint64_t builtin_function_id = [&] { - switch (size(callable_id_list)) { - case 0: { - std::ostringstream error_msg; - error_msg << "no matching function to call " << rang::fgB::red << builtin_function_name << rang::style::reset - << rang::style::bold << ": " << rang::fgB::yellow << dataTypeName(arg_type_list) << rang::style::reset - << rang::style::bold << "\nnote: candidates are"; - - for (auto candidate : builtin_function_candidate_list) { - uint64_t builtin_function_id = std::get<uint64_t>(candidate.attributes().value()); - - auto& builtin_function_embedder_table = n.m_symbol_table->builtinFunctionEmbedderTable(); - std::shared_ptr builtin_function_embedder = builtin_function_embedder_table[builtin_function_id]; - - error_msg << "\n " << builtin_function_name << ": " - << dataTypeName(builtin_function_embedder->getParameterDataTypes()) << " -> " - << dataTypeName(builtin_function_embedder->getReturnDataType()); - } - - throw ParseError(error_msg.str(), n.begin()); - } - case 1: { - return callable_id_list[0]; - } - default: { - std::ostringstream error_msg; - error_msg << "ambiguous function to call " << mangled_name.str() << "\nnote: candidates are"; - - auto& builtin_function_embedder_table = n.m_symbol_table->builtinFunctionEmbedderTable(); - for (auto callable_id : callable_id_list) { - std::shared_ptr builtin_function_embedder = builtin_function_embedder_table[callable_id]; - - error_msg << "\n " << builtin_function_name << ": " - << dataTypeName(builtin_function_embedder->getParameterDataTypes()) << " -> " - << dataTypeName(builtin_function_embedder->getReturnDataType()); - } - throw ParseError(error_msg.str(), n.begin()); - } - } - }(); - - return n.m_symbol_table->builtinFunctionEmbedderTable()[builtin_function_id]; -} diff --git a/src/language/utils/BuiltinFunctionEmbedderUtils.hpp b/src/language/utils/BuiltinFunctionEmbedderUtils.hpp deleted file mode 100644 index 1f24acff4..000000000 --- a/src/language/utils/BuiltinFunctionEmbedderUtils.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef BUILTIN_FUNCTION_EMBEDDER_UTILS_HPP -#define BUILTIN_FUNCTION_EMBEDDER_UTILS_HPP - -class IBuiltinFunctionEmbedder; -class ASTNode; - -#include <memory> - -std::shared_ptr<IBuiltinFunctionEmbedder> getBuiltinFunctionEmbedder(ASTNode& n); - -#endif // BUILTIN_FUNCTION_EMBEDDER_UTILS_HPP diff --git a/src/language/utils/CMakeLists.txt b/src/language/utils/CMakeLists.txt index bed3da329..80640af6e 100644 --- a/src/language/utils/CMakeLists.txt +++ b/src/language/utils/CMakeLists.txt @@ -20,7 +20,6 @@ add_library(PugsLanguageUtils BinaryOperatorRegisterForRnxn.cpp BinaryOperatorRegisterForString.cpp BinaryOperatorRegisterForZ.cpp - BuiltinFunctionEmbedderUtils.cpp DataVariant.cpp EmbeddedData.cpp EmbeddedIDiscreteFunctionOperators.cpp diff --git a/src/language/utils/SymbolTable.hpp b/src/language/utils/SymbolTable.hpp index 3526e2f69..772ac6564 100644 --- a/src/language/utils/SymbolTable.hpp +++ b/src/language/utils/SymbolTable.hpp @@ -279,55 +279,6 @@ class SymbolTable } } - std::vector<Symbol> - getBuiltinFunctionSymbolList(const std::string& symbol, const TAO_PEGTL_NAMESPACE::position& use_position) - { - std::vector<Symbol> builtin_function_symbol_list; - - for (auto i_stored_symbol : m_symbol_list) { - if (use_position.byte < i_stored_symbol.attributes().position().byte) - continue; - - // Symbol must be defined before the call - std::string_view stored_symbol_name = i_stored_symbol.name(); - if ((stored_symbol_name.size() > symbol.size()) and (stored_symbol_name[symbol.size()] == '(')) { - if (stored_symbol_name.substr(0, symbol.size()) == symbol) { - builtin_function_symbol_list.push_back(i_stored_symbol); - } - } - } - - if (m_parent_table) { - return m_parent_table->getBuiltinFunctionSymbolList(symbol, use_position); - } else { - return builtin_function_symbol_list; - } - } - - bool - has(const std::string& symbol, const TAO_PEGTL_NAMESPACE::position& use_position) - { - for (auto i_stored_symbol : m_symbol_list) { - if (use_position.byte < i_stored_symbol.attributes().position().byte) - continue; - - // Symbol must be defined before the call - std::string_view stored_symbol_name = i_stored_symbol.name(); - if ((stored_symbol_name.size() == symbol.size()) or - (stored_symbol_name.size() > symbol.size() and (stored_symbol_name[symbol.size()] == '('))) { - if (stored_symbol_name.substr(0, symbol.size()) == symbol) { - return true; - } - } - } - - if (m_parent_table) { - return m_parent_table->has(symbol, use_position); - } else { - return false; - } - } - auto find(const std::string& symbol, const TAO_PEGTL_NAMESPACE::position& use_position) { @@ -355,15 +306,8 @@ class SymbolTable add(const std::string& symbol_name, const TAO_PEGTL_NAMESPACE::position& symbol_position) { for (auto i_stored_symbol = m_symbol_list.begin(); i_stored_symbol != m_symbol_list.end(); ++i_stored_symbol) { - std::string_view stored_symbol_name = i_stored_symbol->name(); - if (stored_symbol_name.size() == symbol_name.size()) { - if (stored_symbol_name == symbol_name) { - return std::make_pair(i_stored_symbol, false); - } else if (stored_symbol_name.size() > symbol_name.size() and (stored_symbol_name[symbol_name.size()] == '(')) { - if (stored_symbol_name.substr(0, symbol_name.size()) == symbol_name) { - return std::make_pair(i_stored_symbol, false); - } - } + if (i_stored_symbol->name() == symbol_name) { + return std::make_pair(i_stored_symbol, false); } } diff --git a/tests/test_ASTModulesImporter.cpp b/tests/test_ASTModulesImporter.cpp index 3dfb86d03..6d98d31fb 100644 --- a/tests/test_ASTModulesImporter.cpp +++ b/tests/test_ASTModulesImporter.cpp @@ -102,7 +102,7 @@ import unknown_module; REQUIRE_THROWS_AS(ASTModulesImporter{*ast}, ParseError); } - SECTION("symbol already defined (same builtin function)") + SECTION("symbol already defined") { std::string_view data = R"( import math; @@ -111,7 +111,7 @@ import math; TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; auto ast = ASTBuilder::build(input); - ast->m_symbol_table->add("sin(R)", ast->begin()); + ast->m_symbol_table->add("sin", ast->begin()); REQUIRE_THROWS_AS(ASTModulesImporter{*ast}, ParseError); } diff --git a/tests/test_ASTNodeBuiltinFunctionExpressionBuilder.cpp b/tests/test_ASTNodeBuiltinFunctionExpressionBuilder.cpp index 84c0fa016..a313d7c92 100644 --- a/tests/test_ASTNodeBuiltinFunctionExpressionBuilder.cpp +++ b/tests/test_ASTNodeBuiltinFunctionExpressionBuilder.cpp @@ -63,21 +63,6 @@ REQUIRE_THROWS_WITH(ASTNodeExpressionBuilder{*ast}, expected_error); \ } -#define CHECK_AST_THROWS_AT_BUILD_WITH(data, expected_error) \ - { \ - static_assert(std::is_same_v<std::decay_t<decltype(data)>, std::string_view>); \ - static_assert((std::is_same_v<std::decay_t<decltype(expected_error)>, std::string_view>) or \ - (std::is_same_v<std::decay_t<decltype(expected_error)>, std::string>)); \ - \ - TAO_PEGTL_NAMESPACE::string_input input{data, "test.pgs"}; \ - auto ast = ASTBuilder::build(input); \ - \ - test_only::test_BuiltinFunctionRegister{*ast}; \ - \ - ASTSymbolTableBuilder{*ast}; \ - REQUIRE_THROWS_WITH(ASTNodeDataTypeBuilder{*ast}, expected_error); \ - } - // clazy:excludeall=non-pod-global-static TEST_CASE("ASTNodeBuiltinFunctionExpressionBuilder", "[language]") @@ -93,7 +78,7 @@ RtoR(1.); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR:FakeProcessor) + +-(language::name:RtoR:NameProcessor) `-(language::real:1.:ValueProcessor) )"; @@ -109,7 +94,7 @@ RtoR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR:FakeProcessor) + +-(language::name:RtoR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -126,7 +111,7 @@ RtoR(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR:FakeProcessor) + +-(language::name:RtoR:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -142,7 +127,7 @@ RtoR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR:FakeProcessor) + +-(language::name:RtoR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -161,7 +146,7 @@ RtoR1(1.); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR1:FakeProcessor) + +-(language::name:RtoR1:NameProcessor) `-(language::real:1.:ValueProcessor) )"; @@ -177,7 +162,7 @@ RtoR1(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR1:FakeProcessor) + +-(language::name:RtoR1:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -194,7 +179,7 @@ RtoR1(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR1:FakeProcessor) + +-(language::name:RtoR1:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -210,7 +195,7 @@ RtoR1(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR1:FakeProcessor) + +-(language::name:RtoR1:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -229,7 +214,7 @@ RtoR11(1.); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR11:FakeProcessor) + +-(language::name:RtoR11:NameProcessor) `-(language::real:1.:ValueProcessor) )"; @@ -245,7 +230,7 @@ RtoR11(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR11:FakeProcessor) + +-(language::name:RtoR11:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -262,7 +247,7 @@ RtoR11(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR11:FakeProcessor) + +-(language::name:RtoR11:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -278,7 +263,7 @@ RtoR11(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RtoR11:FakeProcessor) + +-(language::name:RtoR11:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -298,7 +283,7 @@ R1toR(x); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R1toR:FakeProcessor) + +-(language::name:R1toR:NameProcessor) `-(language::name:x:NameProcessor) )"; @@ -314,7 +299,7 @@ R1toR(1.); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R1toR:FakeProcessor) + +-(language::name:R1toR:NameProcessor) `-(language::real:1.:ValueProcessor) )"; @@ -330,7 +315,7 @@ R1toR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R1toR:FakeProcessor) + +-(language::name:R1toR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -347,7 +332,7 @@ R1toR(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R1toR:FakeProcessor) + +-(language::name:R1toR:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -363,7 +348,7 @@ R1toR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R1toR:FakeProcessor) + +-(language::name:R1toR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -383,7 +368,7 @@ R11toR(x); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R11toR:FakeProcessor) + +-(language::name:R11toR:NameProcessor) `-(language::name:x:NameProcessor) )"; @@ -399,7 +384,7 @@ R11toR(1.); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R11toR:FakeProcessor) + +-(language::name:R11toR:NameProcessor) `-(language::real:1.:ValueProcessor) )"; @@ -415,7 +400,7 @@ R11toR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R11toR:FakeProcessor) + +-(language::name:R11toR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -432,7 +417,7 @@ R11toR(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R11toR:FakeProcessor) + +-(language::name:R11toR:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -448,7 +433,7 @@ R11toR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R11toR:FakeProcessor) + +-(language::name:R11toR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -467,7 +452,7 @@ R2toR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R2toR:FakeProcessor) + +-(language::name:R2toR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -484,7 +469,7 @@ R2toR(x); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R2toR:FakeProcessor) + +-(language::name:R2toR:NameProcessor) `-(language::name:x:NameProcessor) )"; @@ -500,7 +485,7 @@ R2toR((1,2)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R2toR:FakeProcessor) + +-(language::name:R2toR:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::integer:1:ValueProcessor) `-(language::integer:2:ValueProcessor) @@ -521,7 +506,7 @@ R22toR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R22toR:FakeProcessor) + +-(language::name:R22toR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -538,7 +523,7 @@ R22toR(x); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R22toR:FakeProcessor) + +-(language::name:R22toR:NameProcessor) `-(language::name:x:NameProcessor) )"; @@ -554,7 +539,7 @@ R22toR((1,2,3,4)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R22toR:FakeProcessor) + +-(language::name:R22toR:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::integer:1:ValueProcessor) +-(language::integer:2:ValueProcessor) @@ -577,7 +562,7 @@ R3toR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R3toR:FakeProcessor) + +-(language::name:R3toR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -594,7 +579,7 @@ R3toR(x); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R3toR:FakeProcessor) + +-(language::name:R3toR:NameProcessor) `-(language::name:x:NameProcessor) )"; @@ -610,7 +595,7 @@ R3toR((1,2,3)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R3toR:FakeProcessor) + +-(language::name:R3toR:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::integer:1:ValueProcessor) +-(language::integer:2:ValueProcessor) @@ -632,7 +617,7 @@ R33toR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R33toR:FakeProcessor) + +-(language::name:R33toR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -649,7 +634,7 @@ R33toR(x); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R33toR:FakeProcessor) + +-(language::name:R33toR:NameProcessor) `-(language::name:x:NameProcessor) )"; @@ -665,7 +650,7 @@ R33toR((1,2,3,4,5,6,7,8,9)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R33toR:FakeProcessor) + +-(language::name:R33toR:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::integer:1:ValueProcessor) +-(language::integer:2:ValueProcessor) @@ -693,7 +678,7 @@ ZtoR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:ZtoR:FakeProcessor) + +-(language::name:ZtoR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -710,7 +695,7 @@ ZtoR(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:ZtoR:FakeProcessor) + +-(language::name:ZtoR:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -726,7 +711,7 @@ ZtoR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:ZtoR:FakeProcessor) + +-(language::name:ZtoR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -745,7 +730,7 @@ NtoR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:NtoR:FakeProcessor) + +-(language::name:NtoR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -762,7 +747,7 @@ NtoR(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:NtoR:FakeProcessor) + +-(language::name:NtoR:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -778,7 +763,7 @@ NtoR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:NtoR:FakeProcessor) + +-(language::name:NtoR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -797,7 +782,7 @@ BtoR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:BtoR:FakeProcessor) + +-(language::name:BtoR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -814,7 +799,7 @@ RRtoB(1., 0.); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:RRtoB:FakeProcessor) + +-(language::name:RRtoB:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::real:1.:ValueProcessor) `-(language::real:0.:ValueProcessor) @@ -836,7 +821,7 @@ R3R2toR(x,y); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R3R2toR:FakeProcessor) + +-(language::name:R3R2toR:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::name:x:NameProcessor) `-(language::name:y:NameProcessor) @@ -854,7 +839,7 @@ R3R2toR((1,2,3),(3,4)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R3R2toR:FakeProcessor) + +-(language::name:R3R2toR:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) | +-(language::integer:1:ValueProcessor) @@ -877,7 +862,7 @@ R3R2toR((1,2,3),0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R3R2toR:FakeProcessor) + +-(language::name:R3R2toR:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) | +-(language::integer:1:ValueProcessor) @@ -903,7 +888,7 @@ R33R22toR(x,y); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R33R22toR:FakeProcessor) + +-(language::name:R33R22toR:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::name:x:NameProcessor) `-(language::name:y:NameProcessor) @@ -921,7 +906,7 @@ R33R22toR((1,2,3,4,5,6,7,8,9),(1,2,3,4)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R33R22toR:FakeProcessor) + +-(language::name:R33R22toR:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) | +-(language::integer:1:ValueProcessor) @@ -952,7 +937,7 @@ R33R22toR((1,2,3,4,5,6,7,8,9),0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:R33R22toR:FakeProcessor) + +-(language::name:R33R22toR:NameProcessor) `-(language::function_argument_list:ASTNodeExpressionListProcessor) +-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) | +-(language::integer:1:ValueProcessor) @@ -980,7 +965,7 @@ StoB("foo"); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:StoB:FakeProcessor) + +-(language::name:StoB:NameProcessor) `-(language::literal:"foo":ValueProcessor) )"; @@ -996,7 +981,7 @@ builtinToBuiltin(a); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:builtinToBuiltin:FakeProcessor) + +-(language::name:builtinToBuiltin:NameProcessor) `-(language::name:a:NameProcessor) )"; @@ -1014,7 +999,7 @@ tuple_ZtoR(true); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_ZtoR:FakeProcessor) + +-(language::name:tuple_ZtoR:NameProcessor) `-(language::true_kw:ValueProcessor) )"; @@ -1031,7 +1016,7 @@ tuple_ZtoR(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_ZtoR:FakeProcessor) + +-(language::name:tuple_ZtoR:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1048,7 +1033,7 @@ tuple_ZtoR(n); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_ZtoR:FakeProcessor) + +-(language::name:tuple_ZtoR:NameProcessor) `-(language::name:n:NameProcessor) )"; @@ -1065,7 +1050,7 @@ tuple_BtoR(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_BtoR:FakeProcessor) + +-(language::name:tuple_BtoR:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1082,7 +1067,7 @@ tuple_NtoR(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_NtoR:FakeProcessor) + +-(language::name:tuple_NtoR:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1099,7 +1084,7 @@ tuple_ZtoR(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_ZtoR:FakeProcessor) + +-(language::name:tuple_ZtoR:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1115,7 +1100,7 @@ tuple_ZtoR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_ZtoR:FakeProcessor) + +-(language::name:tuple_ZtoR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -1132,7 +1117,7 @@ tuple_ZtoR(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_ZtoR:FakeProcessor) + +-(language::name:tuple_ZtoR:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1148,7 +1133,7 @@ tuple_RtoB(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_RtoB:FakeProcessor) + +-(language::name:tuple_RtoB:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -1165,7 +1150,7 @@ tuple_RtoB(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_RtoB:FakeProcessor) + +-(language::name:tuple_RtoB:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1181,7 +1166,7 @@ tuple_RtoB(1.2); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_RtoB:FakeProcessor) + +-(language::name:tuple_RtoB:NameProcessor) `-(language::real:1.2:ValueProcessor) )"; @@ -1198,7 +1183,7 @@ tuple_RtoB(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_RtoB:FakeProcessor) + +-(language::name:tuple_RtoB:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1215,7 +1200,7 @@ tuple_RtoB((1.2, 2, true, n)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_RtoB:FakeProcessor) + +-(language::name:tuple_RtoB:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::real:1.2:ValueProcessor) +-(language::integer:2:ValueProcessor) @@ -1235,7 +1220,7 @@ tuple_stringtoB(1.2); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_stringtoB:FakeProcessor) + +-(language::name:tuple_stringtoB:NameProcessor) `-(language::real:1.2:ValueProcessor) )"; @@ -1252,7 +1237,7 @@ tuple_stringtoB(s); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_stringtoB:FakeProcessor) + +-(language::name:tuple_stringtoB:NameProcessor) `-(language::name:s:NameProcessor) )"; @@ -1269,7 +1254,7 @@ tuple_stringtoB(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_stringtoB:FakeProcessor) + +-(language::name:tuple_stringtoB:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1286,7 +1271,7 @@ tuple_stringtoB(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_stringtoB:FakeProcessor) + +-(language::name:tuple_stringtoB:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1302,7 +1287,7 @@ tuple_stringtoB("foo"); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_stringtoB:FakeProcessor) + +-(language::name:tuple_stringtoB:NameProcessor) `-(language::literal:"foo":ValueProcessor) )"; @@ -1318,7 +1303,7 @@ tuple_stringtoB(("foo",2,"bar")); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_stringtoB:FakeProcessor) + +-(language::name:tuple_stringtoB:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::literal:"foo":ValueProcessor) +-(language::integer:2:ValueProcessor) @@ -1337,7 +1322,7 @@ tuple_builtinToB(a); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_builtinToB:FakeProcessor) + +-(language::name:tuple_builtinToB:NameProcessor) `-(language::name:a:NameProcessor) )"; @@ -1353,7 +1338,7 @@ tuple_builtinToB((a,b,a)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_builtinToB:FakeProcessor) + +-(language::name:tuple_builtinToB:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::name:a:NameProcessor) +-(language::name:b:NameProcessor) @@ -1373,7 +1358,7 @@ tuple_builtinToB(t); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_builtinToB:FakeProcessor) + +-(language::name:tuple_builtinToB:NameProcessor) `-(language::name:t:NameProcessor) )"; @@ -1389,7 +1374,7 @@ tuple_R1ToR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R1ToR:FakeProcessor) + +-(language::name:tuple_R1ToR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -1405,7 +1390,7 @@ tuple_R1ToR(1.2); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R1ToR:FakeProcessor) + +-(language::name:tuple_R1ToR:NameProcessor) `-(language::real:1.2:ValueProcessor) )"; @@ -1422,7 +1407,7 @@ tuple_R1ToR(r); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R1ToR:FakeProcessor) + +-(language::name:tuple_R1ToR:NameProcessor) `-(language::name:r:NameProcessor) )"; @@ -1438,7 +1423,7 @@ tuple_R11ToR(1); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R11ToR:FakeProcessor) + +-(language::name:tuple_R11ToR:NameProcessor) `-(language::integer:1:ValueProcessor) )"; @@ -1454,7 +1439,7 @@ tuple_R11ToR(1.2); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R11ToR:FakeProcessor) + +-(language::name:tuple_R11ToR:NameProcessor) `-(language::real:1.2:ValueProcessor) )"; @@ -1471,7 +1456,7 @@ tuple_R11ToR(r); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R11ToR:FakeProcessor) + +-(language::name:tuple_R11ToR:NameProcessor) `-(language::name:r:NameProcessor) )"; @@ -1487,7 +1472,7 @@ tuple_R2ToR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R2ToR:FakeProcessor) + +-(language::name:tuple_R2ToR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -1504,7 +1489,7 @@ tuple_R2ToR(r); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R2ToR:FakeProcessor) + +-(language::name:tuple_R2ToR:NameProcessor) `-(language::name:r:NameProcessor) )"; @@ -1521,7 +1506,7 @@ tuple_R2ToR((r,r)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R2ToR:FakeProcessor) + +-(language::name:tuple_R2ToR:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::name:r:NameProcessor) `-(language::name:r:NameProcessor) @@ -1539,7 +1524,7 @@ tuple_R22ToR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R22ToR:FakeProcessor) + +-(language::name:tuple_R22ToR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -1556,7 +1541,7 @@ tuple_R22ToR(r); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R22ToR:FakeProcessor) + +-(language::name:tuple_R22ToR:NameProcessor) `-(language::name:r:NameProcessor) )"; @@ -1573,7 +1558,7 @@ tuple_R22ToR((r,r)); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R22ToR:FakeProcessor) + +-(language::name:tuple_R22ToR:NameProcessor) `-(language::tuple_expression:TupleToVectorProcessor<ASTNodeExpressionListProcessor>) +-(language::name:r:NameProcessor) `-(language::name:r:NameProcessor) @@ -1591,7 +1576,7 @@ tuple_R3ToR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R3ToR:FakeProcessor) + +-(language::name:tuple_R3ToR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -1608,7 +1593,7 @@ tuple_R3ToR(r); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R3ToR:FakeProcessor) + +-(language::name:tuple_R3ToR:NameProcessor) `-(language::name:r:NameProcessor) )"; @@ -1624,7 +1609,7 @@ tuple_R33ToR(0); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R33ToR:FakeProcessor) + +-(language::name:tuple_R33ToR:NameProcessor) `-(language::integer:0:ValueProcessor) )"; @@ -1641,7 +1626,7 @@ tuple_R33ToR(r); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:tuple_R33ToR:FakeProcessor) + +-(language::name:tuple_R33ToR:NameProcessor) `-(language::name:r:NameProcessor) )"; @@ -1658,7 +1643,7 @@ fidToR(f); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:fidToR:FakeProcessor) + +-(language::name:fidToR:NameProcessor) `-(language::name:f:NameProcessor) )"; @@ -1673,12 +1658,7 @@ fidToR(f); std::string_view data = R"( BtoR(true, false); )"; - - const std::string error_msg = "no matching function to call BtoR: (B,B)\n" - "note: candidates are\n" - " BtoR: B -> R"; - - CHECK_AST_THROWS_AT_BUILD_WITH(data, error_msg); + CHECK_AST_THROWS_WITH(data, std::string{"bad number of arguments: expecting 1, provided 2"}); } SECTION("bad number of arguments 2") @@ -1686,12 +1666,7 @@ BtoR(true, false); std::string_view data = R"( RRtoB(3); )"; - - const std::string error_msg = "no matching function to call RRtoB: Z\n" - "note: candidates are\n" - " RRtoB: (R,R) -> B"; - - CHECK_AST_THROWS_AT_BUILD_WITH(data, error_msg); + CHECK_AST_THROWS_WITH(data, std::string{"bad number of arguments: expecting 2, provided 1"}); } SECTION("invalid argument type") @@ -1699,11 +1674,7 @@ RRtoB(3); std::string_view data = R"( RtoR("foo"); )"; - - const std::string error_msg = "no matching function to call RtoR: string\n" - "note: candidates are\n" - " RtoR: R -> R"; - CHECK_AST_THROWS_AT_BUILD_WITH(data, error_msg); + CHECK_AST_THROWS_WITH(data, std::string{"invalid implicit conversion: string -> R"}); } } } diff --git a/tests/test_ASTNodeFunctionEvaluationExpressionBuilder.cpp b/tests/test_ASTNodeFunctionEvaluationExpressionBuilder.cpp index 289eb44be..6fbb82cf8 100644 --- a/tests/test_ASTNodeFunctionEvaluationExpressionBuilder.cpp +++ b/tests/test_ASTNodeFunctionEvaluationExpressionBuilder.cpp @@ -51,7 +51,7 @@ sin(3); std::string_view result = R"( (root:ASTNodeListProcessor) `-(language::function_evaluation:BuiltinFunctionProcessor) - +-(language::name:sin:FakeProcessor) + +-(language::name:sin:NameProcessor) `-(language::integer:3:ValueProcessor) )"; diff --git a/tests/test_BuiltinFunctionProcessor.cpp b/tests/test_BuiltinFunctionProcessor.cpp index 2f9d049eb..e1b9bb4ed 100644 --- a/tests/test_BuiltinFunctionProcessor.cpp +++ b/tests/test_BuiltinFunctionProcessor.cpp @@ -81,7 +81,7 @@ TEST_CASE("BuiltinFunctionProcessor", "[language]") std::set<std::string> tested_function_set; { // sqrt - tested_function_set.insert("sqrt(R)"); + tested_function_set.insert("sqrt"); std::string_view data = R"( import math; let x:R, x = sqrt(4); @@ -90,7 +90,7 @@ let x:R, x = sqrt(4); } { // abs - tested_function_set.insert("abs(R)"); + tested_function_set.insert("abs"); std::string_view data = R"( import math; let x:R, x = abs(-3.4); @@ -99,7 +99,7 @@ let x:R, x = abs(-3.4); } { // sin - tested_function_set.insert("sin(R)"); + tested_function_set.insert("sin"); std::string_view data = R"( import math; let x:R, x = sin(1.3); @@ -108,7 +108,7 @@ let x:R, x = sin(1.3); } { // cos - tested_function_set.insert("cos(R)"); + tested_function_set.insert("cos"); std::string_view data = R"( import math; let x:R, x = cos(1.3); @@ -117,7 +117,7 @@ let x:R, x = cos(1.3); } { // tan - tested_function_set.insert("tan(R)"); + tested_function_set.insert("tan"); std::string_view data = R"( import math; let x:R, x = tan(1.3); @@ -126,7 +126,7 @@ let x:R, x = tan(1.3); } { // asin - tested_function_set.insert("asin(R)"); + tested_function_set.insert("asin"); std::string_view data = R"( import math; let x:R, x = asin(0.7); @@ -135,7 +135,7 @@ let x:R, x = asin(0.7); } { // acos - tested_function_set.insert("acos(R)"); + tested_function_set.insert("acos"); std::string_view data = R"( import math; let x:R, x = acos(0.7); @@ -144,7 +144,7 @@ let x:R, x = acos(0.7); } { // atan - tested_function_set.insert("atan(R)"); + tested_function_set.insert("atan"); std::string_view data = R"( import math; let x:R, x = atan(0.7); @@ -153,7 +153,7 @@ let x:R, x = atan(0.7); } { // atan2 - tested_function_set.insert("atan2(R,R)"); + tested_function_set.insert("atan2"); std::string_view data = R"( import math; let x:R, x = atan2(0.7, 0.4); @@ -162,7 +162,7 @@ let x:R, x = atan2(0.7, 0.4); } { // sinh - tested_function_set.insert("sinh(R)"); + tested_function_set.insert("sinh"); std::string_view data = R"( import math; let x:R, x = sinh(0.6); @@ -171,7 +171,7 @@ let x:R, x = sinh(0.6); } { // cosh - tested_function_set.insert("cosh(R)"); + tested_function_set.insert("cosh"); std::string_view data = R"( import math; let x:R, x = cosh(1.7); @@ -180,7 +180,7 @@ let x:R, x = cosh(1.7); } { // tanh - tested_function_set.insert("tanh(R)"); + tested_function_set.insert("tanh"); std::string_view data = R"( import math; let x:R, x = tanh(0.6); @@ -189,7 +189,7 @@ let x:R, x = tanh(0.6); } { // asinh - tested_function_set.insert("asinh(R)"); + tested_function_set.insert("asinh"); std::string_view data = R"( import math; let x:R, x = asinh(0.6); @@ -198,7 +198,7 @@ let x:R, x = asinh(0.6); } { // acosh - tested_function_set.insert("acosh(R)"); + tested_function_set.insert("acosh"); std::string_view data = R"( import math; let x:R, x = acosh(1.7); @@ -207,7 +207,7 @@ let x:R, x = acosh(1.7); } { // tanh - tested_function_set.insert("atanh(R)"); + tested_function_set.insert("atanh"); std::string_view data = R"( import math; let x:R, x = atanh(0.6); @@ -216,7 +216,7 @@ let x:R, x = atanh(0.6); } { // exp - tested_function_set.insert("exp(R)"); + tested_function_set.insert("exp"); std::string_view data = R"( import math; let x:R, x = exp(1.7); @@ -225,7 +225,7 @@ let x:R, x = exp(1.7); } { // log - tested_function_set.insert("log(R)"); + tested_function_set.insert("log"); std::string_view data = R"( import math; let x:R, x = log(1.6); @@ -234,7 +234,7 @@ let x:R, x = log(1.6); } { // pow - tested_function_set.insert("pow(R,R)"); + tested_function_set.insert("pow"); std::string_view data = R"( import math; let x:R, x = pow(1.6, 2.3); @@ -243,7 +243,7 @@ let x:R, x = pow(1.6, 2.3); } { // ceil - tested_function_set.insert("ceil(R)"); + tested_function_set.insert("ceil"); std::string_view data = R"( import math; let z:Z, z = ceil(-1.2); @@ -252,7 +252,7 @@ let z:Z, z = ceil(-1.2); } { // floor - tested_function_set.insert("floor(R)"); + tested_function_set.insert("floor"); std::string_view data = R"( import math; let z:Z, z = floor(-1.2); @@ -261,7 +261,7 @@ let z:Z, z = floor(-1.2); } { // trunc - tested_function_set.insert("trunc(R)"); + tested_function_set.insert("trunc"); std::string_view data = R"( import math; let z:Z, z = trunc(-0.2) + trunc(0.7); @@ -270,7 +270,7 @@ let z:Z, z = trunc(-0.2) + trunc(0.7); } { // round - tested_function_set.insert("round(R)"); + tested_function_set.insert("round"); std::string_view data = R"( import math; let z:Z, z = round(-1.2); diff --git a/tests/test_BuiltinFunctionRegister.hpp b/tests/test_BuiltinFunctionRegister.hpp index 8788d04e4..bc36e2ea2 100644 --- a/tests/test_BuiltinFunctionRegister.hpp +++ b/tests/test_BuiltinFunctionRegister.hpp @@ -22,141 +22,135 @@ class test_BuiltinFunctionRegister _populateNameBuiltinFunctionMap() { m_name_builtin_function_map.insert( - std::make_pair("runtimeError()", std::make_shared<BuiltinFunctionEmbedder<void(void)>>( - [](void) -> void { throw NormalError("runtime error"); }))); + std::make_pair("runtimeError", std::make_shared<BuiltinFunctionEmbedder<void(void)>>( + [](void) -> void { throw NormalError("runtime error"); }))); - m_name_builtin_function_map.insert( - std::make_pair("RtoR(R)", std::make_shared<BuiltinFunctionEmbedder<double(double)>>( - [](double x) -> double { return x + 1; }))); + m_name_builtin_function_map.insert(std::make_pair("RtoR", std::make_shared<BuiltinFunctionEmbedder<double(double)>>( + [](double x) -> double { return x + 1; }))); m_name_builtin_function_map.insert( - std::make_pair("ZtoR(Z)", std::make_shared<BuiltinFunctionEmbedder<double(int64_t)>>( - [](int64_t z) -> double { return 0.5 * z; }))); + std::make_pair("ZtoR", std::make_shared<BuiltinFunctionEmbedder<double(int64_t)>>( + [](int64_t z) -> double { return 0.5 * z; }))); m_name_builtin_function_map.insert( - std::make_pair("NtoR(N)", std::make_shared<BuiltinFunctionEmbedder<double(uint64_t)>>( - [](uint64_t n) -> double { return 0.5 * n; }))); + std::make_pair("NtoR", std::make_shared<BuiltinFunctionEmbedder<double(uint64_t)>>( + [](uint64_t n) -> double { return 0.5 * n; }))); - m_name_builtin_function_map.insert( - std::make_pair("BtoR(B)", - std::make_shared<BuiltinFunctionEmbedder<double(bool)>>([](bool b) -> double { return b; }))); + m_name_builtin_function_map.insert(std::make_pair("BtoR", std::make_shared<BuiltinFunctionEmbedder<double(bool)>>( + [](bool b) -> double { return b; }))); m_name_builtin_function_map.insert( - std::make_pair("RRtoB(R,R)", std::make_shared<BuiltinFunctionEmbedder<bool(double, double)>>( - [](double x, double y) -> bool { return x > y; }))); + std::make_pair("RRtoB", std::make_shared<BuiltinFunctionEmbedder<bool(double, double)>>( + [](double x, double y) -> bool { return x > y; }))); m_name_builtin_function_map.insert( - std::make_pair("StoB(string)", std::make_shared<BuiltinFunctionEmbedder<bool(std::string)>>( - [](const std::string& s) -> bool { return s.size() > 0; }))); + std::make_pair("StoB", std::make_shared<BuiltinFunctionEmbedder<bool(std::string)>>( + [](const std::string& s) -> bool { return s.size() > 0; }))); m_name_builtin_function_map.insert( - std::make_pair("RtoR1(R)", std::make_shared<BuiltinFunctionEmbedder<TinyVector<1>(double)>>( - [](double r) -> TinyVector<1> { return {r}; }))); + std::make_pair("RtoR1", std::make_shared<BuiltinFunctionEmbedder<TinyVector<1>(double)>>( + [](double r) -> TinyVector<1> { return {r}; }))); m_name_builtin_function_map.insert( - std::make_pair("R1toR(R^1)", std::make_shared<BuiltinFunctionEmbedder<double(TinyVector<1>)>>( - [](TinyVector<1> x) -> double { return x[0]; }))); + std::make_pair("R1toR", std::make_shared<BuiltinFunctionEmbedder<double(TinyVector<1>)>>( + [](TinyVector<1> x) -> double { return x[0]; }))); m_name_builtin_function_map.insert( - std::make_pair("R2toR(R^2)", std::make_shared<BuiltinFunctionEmbedder<double(TinyVector<2>)>>( - [](TinyVector<2> x) -> double { return x[0] + x[1]; }))); + std::make_pair("R2toR", std::make_shared<BuiltinFunctionEmbedder<double(TinyVector<2>)>>( + [](TinyVector<2> x) -> double { return x[0] + x[1]; }))); m_name_builtin_function_map.insert( - std::make_pair("R3toR(R^3)", std::make_shared<BuiltinFunctionEmbedder<double(const TinyVector<3>&)>>( - [](const TinyVector<3>& x) -> double { return x[0] + x[1] + x[2]; }))); + std::make_pair("R3toR", std::make_shared<BuiltinFunctionEmbedder<double(const TinyVector<3>&)>>( + [](const TinyVector<3>& x) -> double { return x[0] + x[1] + x[2]; }))); m_name_builtin_function_map.insert( - std::make_pair("R3R2toR(R^3,R^2)", + std::make_pair("R3R2toR", std::make_shared<BuiltinFunctionEmbedder<double(TinyVector<3>, TinyVector<2>)>>( [](TinyVector<3> x, TinyVector<2> y) -> double { return x[0] * y[1] + (y[0] - x[2]) * x[1]; }))); m_name_builtin_function_map.insert( - std::make_pair("RtoR11(R)", std::make_shared<BuiltinFunctionEmbedder<TinyMatrix<1>(double)>>( - [](double r) -> TinyMatrix<1> { return {r}; }))); + std::make_pair("RtoR11", std::make_shared<BuiltinFunctionEmbedder<TinyMatrix<1>(double)>>( + [](double r) -> TinyMatrix<1> { return {r}; }))); m_name_builtin_function_map.insert( - std::make_pair("R11toR(R^1x1)", std::make_shared<BuiltinFunctionEmbedder<double(TinyMatrix<1>)>>( - [](TinyMatrix<1> x) -> double { return x(0, 0); }))); + std::make_pair("R11toR", std::make_shared<BuiltinFunctionEmbedder<double(TinyMatrix<1>)>>( + [](TinyMatrix<1> x) -> double { return x(0, 0); }))); m_name_builtin_function_map.insert( - std::make_pair("R22toR(R^2x2)", - std::make_shared<BuiltinFunctionEmbedder<double(TinyMatrix<2>)>>( - [](TinyMatrix<2> x) -> double { return x(0, 0) + x(0, 1) + x(1, 0) + x(1, 1); }))); + std::make_pair("R22toR", std::make_shared<BuiltinFunctionEmbedder<double(TinyMatrix<2>)>>( + [](TinyMatrix<2> x) -> double { return x(0, 0) + x(0, 1) + x(1, 0) + x(1, 1); }))); m_name_builtin_function_map.insert( - std::make_pair("R33toR(R^3x3)", std::make_shared<BuiltinFunctionEmbedder<double(const TinyMatrix<3>&)>>( - [](const TinyMatrix<3>& x) -> double { return x(0, 0) + x(1, 1) + x(2, 2); }))); + std::make_pair("R33toR", std::make_shared<BuiltinFunctionEmbedder<double(const TinyMatrix<3>&)>>( + [](const TinyMatrix<3>& x) -> double { return x(0, 0) + x(1, 1) + x(2, 2); }))); m_name_builtin_function_map.insert( - std::make_pair("R33R22toR(R^3x3,R^2x2)", - std::make_shared<BuiltinFunctionEmbedder<double(TinyMatrix<3>, TinyMatrix<2>)>>( - [](TinyMatrix<3> x, TinyMatrix<2> y) -> double { - return (x(0, 0) + x(1, 1) + x(2, 2)) * (y(0, 0) + y(0, 1) + y(1, 0) + y(1, 1)); - }))); + std::make_pair("R33R22toR", std::make_shared<BuiltinFunctionEmbedder<double(TinyMatrix<3>, TinyMatrix<2>)>>( + [](TinyMatrix<3> x, TinyMatrix<2> y) -> double { + return (x(0, 0) + x(1, 1) + x(2, 2)) * (y(0, 0) + y(0, 1) + y(1, 0) + y(1, 1)); + }))); m_name_builtin_function_map.insert( - std::make_pair("fidToR(function)", std::make_shared<BuiltinFunctionEmbedder<double(const FunctionSymbolId&)>>( - [](const FunctionSymbolId&) -> double { return 0; }))); + std::make_pair("fidToR", std::make_shared<BuiltinFunctionEmbedder<double(const FunctionSymbolId&)>>( + [](const FunctionSymbolId&) -> double { return 0; }))); m_name_builtin_function_map.insert( - std::make_pair("builtinToBuiltin(builtin_t)", + std::make_pair("builtinToBuiltin", std::make_shared< BuiltinFunctionEmbedder<std::shared_ptr<const double>(std::shared_ptr<const double>)>>( [](std::shared_ptr<const double> x) -> std::shared_ptr<const double> { return x; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_BtoR(tuple(B))", std::make_shared<BuiltinFunctionEmbedder<double(std::vector<bool>)>>( - [](const std::vector<bool>&) -> double { return 0.5; }))); + std::make_pair("tuple_BtoR", std::make_shared<BuiltinFunctionEmbedder<double(std::vector<bool>)>>( + [](const std::vector<bool>&) -> double { return 0.5; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_NtoR(tuple(N))", std::make_shared<BuiltinFunctionEmbedder<double(std::vector<uint64_t>)>>( - [](const std::vector<uint64_t>&) -> double { return 0.5; }))); + std::make_pair("tuple_NtoR", std::make_shared<BuiltinFunctionEmbedder<double(std::vector<uint64_t>)>>( + [](const std::vector<uint64_t>&) -> double { return 0.5; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_ZtoR(tuple(Z))", std::make_shared<BuiltinFunctionEmbedder<double(std::vector<int64_t>)>>( - [](const std::vector<int64_t>&) -> double { return 0.5; }))); + std::make_pair("tuple_ZtoR", std::make_shared<BuiltinFunctionEmbedder<double(std::vector<int64_t>)>>( + [](const std::vector<int64_t>&) -> double { return 0.5; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_RtoB(tuple(R))", std::make_shared<BuiltinFunctionEmbedder<bool(std::vector<double>)>>( - [](const std::vector<double>&) -> bool { return false; }))); + std::make_pair("tuple_RtoB", std::make_shared<BuiltinFunctionEmbedder<bool(std::vector<double>)>>( + [](const std::vector<double>&) -> bool { return false; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_stringtoB(tuple(string))", - std::make_shared<BuiltinFunctionEmbedder<bool(std::vector<std::string>)>>( - [](const std::vector<std::string>&) -> bool { return true; }))); + std::make_pair("tuple_stringtoB", std::make_shared<BuiltinFunctionEmbedder<bool(std::vector<std::string>)>>( + [](const std::vector<std::string>&) -> bool { return true; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_builtinToB(tuple(builtin_t))", + std::make_pair("tuple_builtinToB", std::make_shared<BuiltinFunctionEmbedder<bool(std::vector<std::shared_ptr<const double>>)>>( [](const std::vector<std::shared_ptr<const double>>&) -> bool { return true; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_R1ToR(tuple(R^1))", + std::make_pair("tuple_R1ToR", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyVector<1>>&)>>( [](const std::vector<TinyVector<1>>&) -> double { return 1; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_R2ToR(tuple(R^2))", + std::make_pair("tuple_R2ToR", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyVector<2>>&)>>( [](const std::vector<TinyVector<2>>&) -> double { return 1; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_R3ToR(tuple(R^3))", - std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyVector<3>>)>>( - [](const std::vector<TinyVector<3>>&) -> double { return 0; }))); + std::make_pair("tuple_R3ToR", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyVector<3>>)>>( + [](const std::vector<TinyVector<3>>&) -> double { return 0; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_R11ToR(tuple(R^1x1))", + std::make_pair("tuple_R11ToR", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyMatrix<1>>&)>>( [](const std::vector<TinyMatrix<1>>&) -> double { return 1; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_R22ToR(tuple(R^2x2))", + std::make_pair("tuple_R22ToR", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyMatrix<2>>&)>>( [](const std::vector<TinyMatrix<2>>&) -> double { return 1; }))); m_name_builtin_function_map.insert( - std::make_pair("tuple_R33ToR(tuple(R^3x3))", + std::make_pair("tuple_R33ToR", std::make_shared<BuiltinFunctionEmbedder<double(const std::vector<TinyMatrix<3>>)>>( [](const std::vector<TinyMatrix<3>>&) -> double { return 0; }))); } diff --git a/tests/test_MathModule.cpp b/tests/test_MathModule.cpp index 92e648538..86696dfab 100644 --- a/tests/test_MathModule.cpp +++ b/tests/test_MathModule.cpp @@ -23,7 +23,7 @@ TEST_CASE("MathModule", "[language]") SECTION("sqrt") { - auto i_function = name_builtin_function.find("sqrt(R)"); + auto i_function = name_builtin_function.find("sqrt"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -35,7 +35,7 @@ TEST_CASE("MathModule", "[language]") SECTION("abs") { - auto i_function = name_builtin_function.find("abs(R)"); + auto i_function = name_builtin_function.find("abs"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -62,7 +62,7 @@ TEST_CASE("MathModule", "[language]") SECTION("sin") { - auto i_function = name_builtin_function.find("sin(R)"); + auto i_function = name_builtin_function.find("sin"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -74,7 +74,7 @@ TEST_CASE("MathModule", "[language]") SECTION("cos") { - auto i_function = name_builtin_function.find("cos(R)"); + auto i_function = name_builtin_function.find("cos"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -86,7 +86,7 @@ TEST_CASE("MathModule", "[language]") SECTION("tan") { - auto i_function = name_builtin_function.find("tan(R)"); + auto i_function = name_builtin_function.find("tan"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -98,7 +98,7 @@ TEST_CASE("MathModule", "[language]") SECTION("asin") { - auto i_function = name_builtin_function.find("asin(R)"); + auto i_function = name_builtin_function.find("asin"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -110,7 +110,7 @@ TEST_CASE("MathModule", "[language]") SECTION("acos") { - auto i_function = name_builtin_function.find("acos(R)"); + auto i_function = name_builtin_function.find("acos"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -122,7 +122,7 @@ TEST_CASE("MathModule", "[language]") SECTION("atan") { - auto i_function = name_builtin_function.find("atan(R)"); + auto i_function = name_builtin_function.find("atan"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -137,7 +137,7 @@ TEST_CASE("MathModule", "[language]") arg = 1.3; arg_variant = arg; - auto i_function = name_builtin_function.find("sinh(R)"); + auto i_function = name_builtin_function.find("sinh"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -149,7 +149,7 @@ TEST_CASE("MathModule", "[language]") SECTION("cosh") { - auto i_function = name_builtin_function.find("cosh(R)"); + auto i_function = name_builtin_function.find("cosh"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -161,7 +161,7 @@ TEST_CASE("MathModule", "[language]") SECTION("tanh") { - auto i_function = name_builtin_function.find("tanh(R)"); + auto i_function = name_builtin_function.find("tanh"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -173,7 +173,7 @@ TEST_CASE("MathModule", "[language]") SECTION("asinh") { - auto i_function = name_builtin_function.find("asinh(R)"); + auto i_function = name_builtin_function.find("asinh"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -188,7 +188,7 @@ TEST_CASE("MathModule", "[language]") arg = 10; arg_variant = arg; - auto i_function = name_builtin_function.find("acosh(R)"); + auto i_function = name_builtin_function.find("acosh"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -200,7 +200,7 @@ TEST_CASE("MathModule", "[language]") SECTION("atanh") { - auto i_function = name_builtin_function.find("atanh(R)"); + auto i_function = name_builtin_function.find("atanh"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -212,7 +212,7 @@ TEST_CASE("MathModule", "[language]") SECTION("exp") { - auto i_function = name_builtin_function.find("exp(R)"); + auto i_function = name_builtin_function.find("exp"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -224,7 +224,7 @@ TEST_CASE("MathModule", "[language]") SECTION("log") { - auto i_function = name_builtin_function.find("log(R)"); + auto i_function = name_builtin_function.find("log"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -243,7 +243,7 @@ TEST_CASE("MathModule", "[language]") SECTION("ceil") { - auto i_function = name_builtin_function.find("ceil(R)"); + auto i_function = name_builtin_function.find("ceil"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -255,7 +255,7 @@ TEST_CASE("MathModule", "[language]") SECTION("floor") { - auto i_function = name_builtin_function.find("floor(R)"); + auto i_function = name_builtin_function.find("floor"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -267,7 +267,7 @@ TEST_CASE("MathModule", "[language]") SECTION("trunc") { - auto i_function = name_builtin_function.find("trunc(R)"); + auto i_function = name_builtin_function.find("trunc"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -279,7 +279,7 @@ TEST_CASE("MathModule", "[language]") SECTION("round") { - auto i_function = name_builtin_function.find("round(R)"); + auto i_function = name_builtin_function.find("round"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -300,7 +300,7 @@ TEST_CASE("MathModule", "[language]") SECTION("atan2") { - auto i_function = name_builtin_function.find("atan2(R,R)"); + auto i_function = name_builtin_function.find("atan2"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; @@ -312,7 +312,7 @@ TEST_CASE("MathModule", "[language]") SECTION("pow") { - auto i_function = name_builtin_function.find("pow(R,R)"); + auto i_function = name_builtin_function.find("pow"); REQUIRE(i_function != name_builtin_function.end()); IBuiltinFunctionEmbedder& function_embedder = *i_function->second; -- GitLab