Skip to content
Snippets Groups Projects

Fix issue #18

2 files
+ 17
0
Compare changes
  • Side-by-side
  • Inline

Files

  • a3c1fb0d
    Fix issue #18 · a3c1fb0d
    Stéphane Del Pino authored
    ++ and -- operators are now forbidden in function definitions.
    This is the correct behavior for mathematical functions
    
    - concerning function arguments, it was already not supported but
      resulted in a crash
    - with regard to outer variables, the behavior is changed since now
      these cannot be modified anymore while calling the
      function. (observe these external parameters can still be modified
      outside of the function definition itself)
@@ -25,6 +25,19 @@
#include <language/node_processor/WhileProcessor.hpp>
#include <language/utils/ParseError.hpp>
void
ASTNodeExpressionBuilder::_checkIsPureFunction(const ASTNode& node) const
{
if (node.is_type<language::unary_plusplus>() or node.is_type<language::unary_minusminus>() or
node.is_type<language::post_plusplus>() or node.is_type<language::post_minusminus>()) {
throw ParseError("invalid function definition. Function data must be constant!", node.begin());
}
for (auto&& child : node.children) {
this->_checkIsPureFunction(*child);
}
}
void
ASTNodeExpressionBuilder::_buildExpression(ASTNode& n)
{
@@ -42,6 +55,8 @@ ASTNodeExpressionBuilder::_buildExpression(ASTNode& n)
} else if (n.is_type<language::tuple_expression>()) {
n.m_node_processor = std::make_unique<TupleToVectorProcessor<ASTNodeExpressionListProcessor>>(n);
} else if (n.is_type<language::function_definition>()) {
this->_checkIsPureFunction(n);
n.m_node_processor = std::make_unique<FakeProcessor>();
} else if (n.is_type<language::function_evaluation>()) {
Loading