aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
Diffstat (limited to 'interpreter.py')
-rw-r--r--interpreter.py29
1 files changed, 11 insertions, 18 deletions
diff --git a/interpreter.py b/interpreter.py
index 8c7695e..54a92d7 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -721,7 +721,7 @@ class Interpreter():
return cur
elif isinstance(cur, mparser2.BooleanNode):
return cur
- elif isinstance(cur, mparser2.IfNode):
+ elif isinstance(cur, mparser2.IfClauseNode):
return self.evaluate_if(cur)
elif isinstance(cur, mparser2.IdNode):
return self.get_variable(cur.value)
@@ -1293,23 +1293,16 @@ class Interpreter():
return obj.method_call(method_name, args, kwargs)
def evaluate_if(self, node):
- result = self.evaluate_statement(node.clause)
- cond = None
- if isinstance(result, mparser2.BooleanNode):
- cond = result.get_value()
- if isinstance(result, bool):
- cond = result
- if cond is not None:
- if cond:
- self.evaluate_codeblock(node.trueblock)
- else:
- block = node.falseblock
- if isinstance(block, nodes.IfStatement):
- self.evaluate_if(block)
- else:
- self.evaluate_codeblock(block)
- else:
- raise InvalidCode('If clause does not evaluate to true or false.')
+ assert(isinstance(node, mparser2.IfClauseNode))
+ for i in node.ifs:
+ result = self.evaluate_statement(i.condition)
+ if not(isinstance(result, bool)):
+ raise InvalidCode('If clause does not evaluate to true or false.')
+ if result:
+ self.evaluate_codeblock(i.block)
+ return
+ if not isinstance(node.elseblock, mparser2.EmptyNode):
+ self.evaluate_codeblock(node.elseblock)
def is_elementary_type(self, v):
if isinstance(v, int) or isinstance(v, str) or isinstance(v, bool):