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) {
{
}
};
-
class FunctionType
{
public:
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
{