summaryrefslogtreecommitdiff
path: root/expr.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 /expr.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 'expr.cc')
-rw-r--r--expr.cc40
1 files changed, 38 insertions, 2 deletions
diff --git a/expr.cc b/expr.cc
index ddc0135..ce0d462 100644
--- a/expr.cc
+++ b/expr.cc
@@ -31,7 +31,7 @@ Expression::~Expression()
delete children[i];
}
-Value Expression::evaluate(Context *context)
+Value Expression::evaluate(const Context *context) const
{
switch (type)
{
@@ -50,6 +50,8 @@ Value Expression::evaluate(Context *context)
case 'C':
return const_value;
case 'V':
+ return Value(children[0]->evaluate(context), children[1]->evaluate(context), children[2]->evaluate(context));
+ case 'L':
return context->lookup_variable(var_name);
case 'F':
{
@@ -59,7 +61,41 @@ Value Expression::evaluate(Context *context)
return context->evaluate_function(call_funcname, call_argnames, argvalues);
}
default:
- return Value();
+ abort();
+ }
+}
+
+QString Expression::dump() const
+{
+ switch (type)
+ {
+ case '*':
+ case '/':
+ case '%':
+ case '+':
+ case '-':
+ return QString("(%1%2%3)").arg(children[0]->dump(), QString(type), children[1]->dump());
+ case 'I':
+ return QString("(-%1)").arg(children[0]->dump());
+ case 'C':
+ return const_value.dump();
+ case 'V':
+ return QString("[%1, %2, %3]").arg(children[0]->dump(), children[1]->dump(), children[2]->dump());
+ case 'L':
+ return var_name;
+ case 'F':
+ {
+ QString text = call_funcname + QString("(");
+ for (int i=0; i < children.size(); i++) {
+ if (i > 0)
+ text += QString(", ");
+ if (!call_argnames[i].isEmpty())
+ text += call_argnames[i] + QString(" = ");
+ text += children[i]->dump();
+ }
+ }
+ default:
+ abort();
}
}
contact: Jan Huwald // Impressum