From 51d2adcd843ae3829d71383aab63c1be10fc4cf4 Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Thu, 19 Sep 2019 10:19:46 +0200
Subject: [PATCH] Plug function evaluation so that the following example
 compiles

``
let f : N-> R, x -> ((x*x));
R y = f(0);
``
---
 src/language/ASTNodeDataTypeBuilder.cpp   | 3 +++
 src/language/ASTNodeExpressionBuilder.cpp | 8 +++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/language/ASTNodeDataTypeBuilder.cpp b/src/language/ASTNodeDataTypeBuilder.cpp
index cfdc0187c..b30adf664 100644
--- a/src/language/ASTNodeDataTypeBuilder.cpp
+++ b/src/language/ASTNodeDataTypeBuilder.cpp
@@ -170,6 +170,9 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n)
                 << ") and " << n.children[1]->string() << " (" << dataTypeName(type_1) << ')' << std::ends;
         throw parse_error(message.str(), n.begin());
       }
+    } else if (n.is<language::function_evaluation>()) {
+      std::cout << rang::fgB::red << "returned type of function evaluation is incorrect" << rang::style::reset << "\n";
+      n.m_data_type = ASTNodeDataType::double_t;
     }
   }
 }
diff --git a/src/language/ASTNodeExpressionBuilder.cpp b/src/language/ASTNodeExpressionBuilder.cpp
index f7157005e..9f0a6f7eb 100644
--- a/src/language/ASTNodeExpressionBuilder.cpp
+++ b/src/language/ASTNodeExpressionBuilder.cpp
@@ -28,7 +28,13 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n)
     ASTNodeAffectationExpressionBuilder{n};
 
   } else if (n.is<language::let_declaration>()) {
-    std::cerr << rang::fgB::red << "\"Let expression\" is not defined correctly" << rang::style::reset << '\n';
+    std::cerr << rang::fgB::red << "\"let expression\" is not defined correctly (declaration should be removed)"
+              << rang::style::reset << '\n';
+    n.m_node_processor = std::make_unique<FakeProcessor>();
+    return;
+
+  } else if (n.is<language::function_evaluation>()) {
+    std::cerr << rang::fgB::red << "\"function evaluation\" is not defined yet" << rang::style::reset << '\n';
     n.m_node_processor = std::make_unique<FakeProcessor>();
     return;
 
-- 
GitLab