diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-21 06:53:46 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-21 06:53:46 (GMT) |
commit | 1c2472067c3843342f56b5833c284106ab349417 (patch) | |
tree | fd6f914e8cf19337a14b9663b6bda4a6642b8a70 /func.cc | |
parent | e416017c5e0ef689e9fbc43b520632cde7927c26 (diff) |
Clifford Wolf:
Improved backend data structures
Added dump feature to backend data
git-svn-id: http://svn.clifford.at/openscad/trunk@4 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'func.cc')
-rw-r--r-- | func.cc | 36 |
1 files changed, 31 insertions, 5 deletions
@@ -19,28 +19,49 @@ */ #include "openscad.h" -#include <math.h> AbstractFunction::~AbstractFunction() { } -Value AbstractFunction::evaluate(Context*, const QVector<QString>&, const QVector<Value>&) +Value AbstractFunction::evaluate(const Context*, const QVector<QString>&, const QVector<Value>&) const { return Value(); } +QString AbstractFunction::dump(QString indent, QString name) const +{ + return QString("%1abstract function %2();\n").arg(indent, name); +} + Function::~Function() { for (int i=0; i < argexpr.size(); i++) delete argexpr[i]; + delete expr; } -Value Function::evaluate(Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) +Value Function::evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const { Context c(ctx); c.args(argnames, argexpr, call_argnames, call_argvalues); - return expr.evaluate(&c); + if (expr) + return expr->evaluate(&c); + return Value(); +} + +QString Function::dump(QString indent, QString name) const +{ + QString text = QString("%1function %2(").arg(indent, name); + for (int i=0; i < argnames.size(); i++) { + if (i > 0) + text += QString(", "); + text += argnames[i]; + if (argexpr[i]) + text += QString(" = ") + argexpr[i]->dump(); + } + text += QString(")\n%1\t%2;\n").arg(indent, expr->dump()); + return text; } QHash<QString, AbstractFunction*> builtin_functions; @@ -49,11 +70,16 @@ BuiltinFunction::~BuiltinFunction() { } -Value BuiltinFunction::evaluate(Context*, const QVector<QString>&, const QVector<Value> &call_argvalues) +Value BuiltinFunction::evaluate(const Context*, const QVector<QString>&, const QVector<Value> &call_argvalues) const { return eval_func(call_argvalues); } +QString BuiltinFunction::dump(QString indent, QString name) const +{ + return QString("%1builtin function %2();\n").arg(indent, name); +} + Value builtin_sin(const QVector<Value> &args) { if (args[0].is_nan || args[0].is_vector) |