From 2730981be1b46e83cdaade13197753cbb74bdf0f Mon Sep 17 00:00:00 2001 From: Radoslaw Cybulski Date: Thu, 4 Jan 2018 16:57:31 +0100 Subject: [PATCH] Fixes for invalid operator () in UserFunctionType Change-Id: I62192758216b11d0ba5ac364187b3732022e9a2e --- src/batch/EvaluationValue.cpp | 5 +++++ src/batch/EvaluationValue.hpp | 17 ++++++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/batch/EvaluationValue.cpp b/src/batch/EvaluationValue.cpp index d95a485..ab8ce65 100644 --- a/src/batch/EvaluationValue.cpp +++ b/src/batch/EvaluationValue.cpp @@ -44,6 +44,11 @@ TokenLocation EvaluationFailure::location() return *location_; } +EvaluationValue detail::FunctionType::operator()(EvaluationContext &ec, std::vector args) const +{ + return function(ec, std::move(args)); +} + std::string EvaluationValue::toString(detail::Kind k) { switch (k) { diff --git a/src/batch/EvaluationValue.hpp b/src/batch/EvaluationValue.hpp index 4ffd35e..2a9da0a 100644 --- a/src/batch/EvaluationValue.hpp +++ b/src/batch/EvaluationValue.hpp @@ -181,7 +181,6 @@ namespace detail { } }; - class FunctionType { public: @@ -195,12 +194,24 @@ namespace detail return bool(function); } - template auto operator()(ARGS &&... args) const + template auto operator()(EvaluationContext &ec, ARGS &&... args) const { - return function(std::forward(args)...); + std::vector tmp; + pack(tmp, std::forward(args)...); + return function(ec, std::move(tmp)); } + EvaluationValue operator()(EvaluationContext &ec, std::vector args) const; private: Type function; + + template static void pack(std::vector &tmp, T &&t, ARGS &&... args) + { + tmp.push_back(std::forward(t)); + pack(tmp, std::forward(args)...); + } + static void pack(std::vector &tmp) + { + } }; template class UserFunctionType : public FunctionType { -- 2.7.4