diff options
author | kintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-12 13:20:15 (GMT) |
---|---|---|
committer | kintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-12 13:20:15 (GMT) |
commit | 572631746157766359a878c7b52d0c26ae731496 (patch) | |
tree | 4bdcfc0176a0cf4e455a78c6e35cf2ff706ce7c9 /src/control.cc | |
parent | 501fc8d3a3503c88b54d37ede5388ac81814a330 (diff) |
Support for if-else statements
git-svn-id: http://svn.clifford.at/openscad/trunk@436 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src/control.cc')
-rw-r--r-- | src/control.cc | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/control.cc b/src/control.cc index d0b96a1..5b7e1b1 100644 --- a/src/control.cc +++ b/src/control.cc @@ -149,12 +149,21 @@ AbstractNode *ControlModule::evaluate(const Context*, const ModuleInstantiation if (type == IF) { - if (inst->argvalues.size() > 0 && inst->argvalues[0].type == Value::BOOL && inst->argvalues[0].b) - foreach (ModuleInstantiation *v, inst->children) { - AbstractNode *n = v->evaluate(inst->ctx); + const IfElseModuleInstantiation *ifelse = dynamic_cast<const IfElseModuleInstantiation*>(inst); + if (ifelse->argvalues.size() > 0 && ifelse->argvalues[0].type == Value::BOOL && ifelse->argvalues[0].b) { + foreach (ModuleInstantiation *v, ifelse->children) { + AbstractNode *n = v->evaluate(ifelse->ctx); if (n != NULL) node->children.append(n); } + } + else { + foreach (ModuleInstantiation *v, ifelse->else_children) { + AbstractNode *n = v->evaluate(ifelse->ctx); + if (n != NULL) + node->children.append(n); + } + } } return node; |