diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-25 21:25:52 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-25 21:25:52 +0200 |
commit | 81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad (patch) | |
tree | 79f447dd18d636117d4b9b189ac12375472d622f /interpreter.py | |
parent | 88bd40ecf3f58414bbc2dd1ea924e90d3885116c (diff) | |
download | meson-81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad.zip meson-81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad.tar.gz meson-81fbb83f84cd7c1180d4c9d16f6e48eb8961c4ad.tar.bz2 |
Added else block support.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-x | interpreter.py | 8 |
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()) |