summaryrefslogtreecommitdiff
path: root/transform.cc
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-29 20:30:43 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2009-06-29 20:30:43 (GMT)
commited687599bf1ca36869dc64dab2b9969f1d96b4c1 (patch)
treec0aa344d2dd28e03eddd8b5cfdb2f47cdea807d3 /transform.cc
parent934e2cef98bc16d2552641314dae1f17a8841079 (diff)
Clifford Wolf:
Restructured AST evaluation for control statements git-svn-id: http://svn.clifford.at/openscad/trunk@37 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'transform.cc')
-rw-r--r--transform.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/transform.cc b/transform.cc
index 5951a70..de29aaf 100644
--- a/transform.cc
+++ b/transform.cc
@@ -34,7 +34,7 @@ class TransformModule : public AbstractModule
public:
transform_type_e type;
TransformModule(transform_type_e type) : type(type) { }
- virtual AbstractNode *evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues, const QVector<AbstractNode*> child_nodes) const;
+ virtual AbstractNode *evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues, const QVector<ModuleInstanciation*> arg_children, const Context *arg_context) const;
};
class TransformNode : public AbstractNode
@@ -48,7 +48,7 @@ public:
virtual QString dump(QString indent) const;
};
-AbstractNode *TransformModule::evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues, const QVector<AbstractNode*> child_nodes) const
+AbstractNode *TransformModule::evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues, const QVector<ModuleInstanciation*> arg_children, const Context *arg_context) const
{
TransformNode *node = new TransformNode();
@@ -140,8 +140,11 @@ AbstractNode *TransformModule::evaluate(const Context *ctx, const QVector<QStrin
}
}
- foreach (AbstractNode *v, child_nodes)
- node->children.append(v);
+ foreach (ModuleInstanciation *v, arg_children) {
+ AbstractNode *n = v->evaluate(arg_context);
+ if (n != NULL)
+ node->children.append(n);
+ }
return node;
}
@@ -204,7 +207,7 @@ QString TransformNode::dump(QString indent) const
return text + indent + "}\n";
}
-void register_builtin_trans()
+void register_builtin_transform()
{
builtin_modules["scale"] = new TransformModule(SCALE);
builtin_modules["rotate"] = new TransformModule(ROTATE);
contact: Jan Huwald // Impressum