aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-01-25 21:06:08 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2013-01-25 21:06:08 +0200
commit88bd40ecf3f58414bbc2dd1ea924e90d3885116c (patch)
tree6ebac917be52975399cdce8909de8dc95fa9b42c /interpreter.py
parentbd6e542f1c5be82ce24eb9374423747fa7b27a29 (diff)
downloadmeson-88bd40ecf3f58414bbc2dd1ea924e90d3885116c.zip
meson-88bd40ecf3f58414bbc2dd1ea924e90d3885116c.tar.gz
meson-88bd40ecf3f58414bbc2dd1ea924e90d3885116c.tar.bz2
Added if clause.
Diffstat (limited to 'interpreter.py')
-rwxr-xr-xinterpreter.py18
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')