summaryrefslogtreecommitdiff
path: root/func.cc
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-21 06:53:46 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-21 06:53:46 (GMT)
commit1c2472067c3843342f56b5833c284106ab349417 (patch)
treefd6f914e8cf19337a14b9663b6bda4a6642b8a70 /func.cc
parente416017c5e0ef689e9fbc43b520632cde7927c26 (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.cc36
1 files changed, 31 insertions, 5 deletions
diff --git a/func.cc b/func.cc
index db8dea9..7bac786 100644
--- a/func.cc
+++ b/func.cc
@@ -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)
contact: Jan Huwald // Impressum