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