diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-25 21:06:08 +0200 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-01-25 21:06:08 +0200 |
commit | 88bd40ecf3f58414bbc2dd1ea924e90d3885116c (patch) | |
tree | 6ebac917be52975399cdce8909de8dc95fa9b42c /interpreter.py | |
parent | bd6e542f1c5be82ce24eb9374423747fa7b27a29 (diff) | |
download | meson-88bd40ecf3f58414bbc2dd1ea924e90d3885116c.zip meson-88bd40ecf3f58414bbc2dd1ea924e90d3885116c.tar.gz meson-88bd40ecf3f58414bbc2dd1ea924e90d3885116c.tar.bz2 |
Added if clause.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-x | interpreter.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/interpreter.py b/interpreter.py index 50c7a40..f0d2606 100755 --- a/interpreter.py +++ b/interpreter.py @@ -275,8 +275,15 @@ class Interpreter(): return cur elif isinstance(cur, nodes.BoolStatement): return cur + elif isinstance(cur, nodes.IfStatement): + return self.evaluate_if(cur) + elif isinstance(cur, nodes.AtomStatement): + varname = cur.get_value() + if varname in self.variables: + return self.variables[varname] + raise InvalidCode('Line %d: unknown variable "%s".' % (cur.lineno(), varname)) else: - raise InvalidCode("Unknown statement in line %d." % cur.lineno()) + raise InvalidCode("Line %d: Unknown statement." % cur.lineno()) def validate_arguments(self, args, argcount, arg_types): if argcount is not None: @@ -455,6 +462,15 @@ class Interpreter(): if not isinstance(obj, InterpreterObject): raise InvalidArguments('Line %d: variable "%s" is not callable.' % (node.lineno(), object_name)) return obj.method_call(method_name, self.reduce_arguments(args)) + + def evaluate_if(self, node): + result = self.evaluate_statement(node.get_clause()) + if isinstance(result, nodes.BoolExpression) or \ + isinstance(result, nodes.BoolStatement): + if result.get_value(): + self.evaluate_codeblock(node.get_codeblock()) + else: + raise InvalidCode('Line %d: If clause does not evaluate to true or false.' % node.lineno()) if __name__ == '__main__': code = """project('myawesomeproject') |