aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-01-25 21:25:52 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-01-25 21:25:52 +0200
commit81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad (patch)
tree79f447dd18d636117d4b9b189ac12375472d622f /interpreter.py
parent88bd40ecf3f58414bbc2dd1ea924e90d3885116c (diff)
downloadmeson-81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad.zip
meson-81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad.tar.gz
meson-81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad.tar.bz2
Added else block support.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-xinterpreter.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/interpreter.py b/interpreter.py
index f0d2606..497498f 100755
--- a/interpreter.py
+++ b/interpreter.py
@@ -255,6 +255,8 @@ class Interpreter():
self.evaluate_codeblock(self.ast)
def evaluate_codeblock(self, node):
+ if node is None:
+ return
if not isinstance(node, nodes.CodeBlock):
raise InvalidCode('Tried to execute a non-codeblock. Possibly a bug in the parser.')
statements = node.get_statements()
@@ -439,6 +441,8 @@ class Interpreter():
reduced = []
for arg in args.arguments:
if isinstance(arg, nodes.AtomExpression) or isinstance(arg, nodes.AtomStatement):
+ if arg.value not in self.variables:
+ raise InvalidCode('Line %d: variable "%s" is not set' % (arg.lineno(), arg.value))
r = self.variables[arg.value]
elif isinstance(arg, nodes.StringExpression) or isinstance(arg, nodes.StringStatement):
r = arg.get_string()
@@ -468,7 +472,9 @@ class Interpreter():
if isinstance(result, nodes.BoolExpression) or \
isinstance(result, nodes.BoolStatement):
if result.get_value():
- self.evaluate_codeblock(node.get_codeblock())
+ self.evaluate_codeblock(node.get_trueblock())
+ else:
+ self.evaluate_codeblock(node.get_falseblock())
else:
raise InvalidCode('Line %d: If clause does not evaluate to true or false.' % node.lineno())