Fixes for invalid operator () in UserFunctionType 93/165893/31
authorRadoslaw Cybulski <r.cybulski@partner.samsung.com>
Thu, 4 Jan 2018 15:57:31 +0000 (16:57 +0100)
committerRadoslaw Cybulski <r.cybulski@partner.samsung.com>
Tue, 23 Jan 2018 11:37:24 +0000 (12:37 +0100)
Change-Id: I62192758216b11d0ba5ac364187b3732022e9a2e

src/batch/EvaluationValue.cpp
src/batch/EvaluationValue.hpp

index d95a485..ab8ce65 100644 (file)
@@ -44,6 +44,11 @@ TokenLocation EvaluationFailure::location()
        return *location_;
 }
 
+EvaluationValue detail::FunctionType::operator()(EvaluationContext &ec, std::vector<EvaluationValue> args) const
+{
+       return function(ec, std::move(args));
+}
+
 std::string EvaluationValue::toString(detail::Kind k)
 {
        switch (k) {
index 4ffd35e..2a9da0a 100644 (file)
@@ -181,7 +181,6 @@ namespace detail
                {
                }
        };
-
        class FunctionType
        {
        public:
@@ -195,12 +194,24 @@ namespace detail
                        return bool(function);
                }
 
-               template <typename ... ARGS> auto operator()(ARGS &&... args) const
+               template <typename ... ARGS> auto operator()(EvaluationContext &ec, ARGS &&... args) const
                {
-                       return function(std::forward<ARGS>(args)...);
+                       std::vector<EvaluationValue> tmp;
+                       pack(tmp, std::forward<ARGS>(args)...);
+                       return function(ec, std::move(tmp));
                }
+               EvaluationValue operator()(EvaluationContext &ec, std::vector<EvaluationValue> args) const;
        private:
                Type function;
+
+               template <typename T, typename ... ARGS> static void pack(std::vector<EvaluationValue> &tmp, T &&t, ARGS &&... args)
+               {
+                       tmp.push_back(std::forward<T>(t));
+                       pack(tmp, std::forward<ARGS>(args)...);
+               }
+               static void pack(std::vector<EvaluationValue> &tmp)
+               {
+               }
        };
        template <typename ... ARGS> class UserFunctionType : public FunctionType
        {