summaryrefslogtreecommitdiff
path: root/module.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 /module.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 'module.cc')
-rw-r--r--module.cc43
1 files changed, 18 insertions, 25 deletions
diff --git a/module.cc b/module.cc
index 489e3a4..70ce97f 100644
--- a/module.cc
+++ b/module.cc
@@ -26,14 +26,16 @@ AbstractModule::~AbstractModule()
{
}
-AbstractNode *AbstractModule::evaluate(const Context*, const QVector<QString>&, const QVector<Value>&, const QVector<AbstractNode*> child_nodes) const
+AbstractNode *AbstractModule::evaluate(const Context*, const QVector<QString>&, const QVector<Value>&, const QVector<ModuleInstanciation*> arg_children, const Context *arg_context) const
{
- if (child_nodes.size() == 1)
- return child_nodes[0];
-
AbstractNode *node = new AbstractNode();
- foreach (AbstractNode *v, child_nodes)
- node->children.append(v);
+
+ foreach (ModuleInstanciation *v, arg_children) {
+ AbstractNode *n = v->evaluate(arg_context);
+ if (n)
+ node->children.append(n);
+ }
+
return node;
}
@@ -84,13 +86,7 @@ AbstractNode *ModuleInstanciation::evaluate(const Context *ctx) const
foreach (Expression *v, argexpr) {
argvalues.append(v->evaluate(ctx));
}
- QVector<AbstractNode*> child_nodes;
- foreach (ModuleInstanciation *v, children) {
- AbstractNode *n = v->evaluate(ctx);
- if (n != NULL)
- child_nodes.append(n);
- }
- return ctx->evaluate_module(modname, argnames, argvalues, child_nodes);
+ return ctx->evaluate_module(modname, argnames, argvalues, children);
}
Module::~Module()
@@ -105,7 +101,7 @@ Module::~Module()
delete v;
}
-AbstractNode *Module::evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues, const QVector<AbstractNode*> child_nodes) const
+AbstractNode *Module::evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues, const QVector<ModuleInstanciation*> arg_children, const Context *arg_context) const
{
Context c(ctx);
c.args(argnames, argexpr, call_argnames, call_argvalues);
@@ -124,14 +120,10 @@ AbstractNode *Module::evaluate(const Context *ctx, const QVector<QString> &call_
node->children.append(n);
}
- foreach (AbstractNode *v, child_nodes)
- node->children.append(v);
-
- if (node->children.size() == 1) {
- AbstractNode *c = node->children[0];
- node->children.clear();
- delete node;
- return c;
+ foreach(ModuleInstanciation *v, arg_children) {
+ AbstractNode *n = v->evaluate(arg_context);
+ if (n != NULL)
+ node->children.append(n);
}
return node;
@@ -184,9 +176,10 @@ void initialize_builtin_modules()
{
builtin_modules["group"] = new AbstractModule();
- register_builtin_csg();
- register_builtin_trans();
- register_builtin_primitive();
+ register_builtin_csgops();
+ register_builtin_transform();
+ register_builtin_primitives();
+ register_builtin_control();
}
void destroy_builtin_modules()
contact: Jan Huwald // Impressum