#ifndef FUNCTION_H_ #define FUNCTION_H_ #include "value.h" #include class AbstractFunction { public: virtual ~AbstractFunction(); virtual Value evaluate(const class Context *ctx, const QVector &call_argnames, const QVector &call_argvalues) const; virtual QString dump(QString indent, QString name) const; }; class BuiltinFunction : public AbstractFunction { public: typedef Value (*eval_func_t)(const Context *ctx, const QVector &argnames, const QVector &args); eval_func_t eval_func; BuiltinFunction(eval_func_t f) : eval_func(f) { } virtual ~BuiltinFunction(); virtual Value evaluate(const Context *ctx, const QVector &call_argnames, const QVector &call_argvalues) const; virtual QString dump(QString indent, QString name) const; }; class Function : public AbstractFunction { public: QVector argnames; QVector argexpr; Expression *expr; Function() { } virtual ~Function(); virtual Value evaluate(const Context *ctx, const QVector &call_argnames, const QVector &call_argvalues) const; virtual QString dump(QString indent, QString name) const; }; #endif