aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-07-27 17:06:37 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-07-27 17:06:37 +0300
commit6a5a9a384842870f9a54ffeb3a828e57eafdec08 (patch)
tree3c6347502cad39283048a11fe54419465f7da196 /interpreter.py
parente990291c34aa976c12c88e3b26b45e7ac07b0ef2 (diff)
downloadmeson-6a5a9a384842870f9a54ffeb3a828e57eafdec08.zip
meson-6a5a9a384842870f9a54ffeb3a828e57eafdec08.tar.gz
meson-6a5a9a384842870f9a54ffeb3a828e57eafdec08.tar.bz2
Can do logical and.
Diffstat (limited to 'interpreter.py')
-rw-r--r--interpreter.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/interpreter.py b/interpreter.py
index ebd29e5..eb04fbb 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -841,6 +841,8 @@ class Interpreter():
return self.evaluate_arraystatement(cur)
elif isinstance(cur, nodes.IntStatement):
return cur
+ elif isinstance(cur, nodes.AndStatement):
+ return self.evaluate_andstatement(cur)
else:
raise InvalidCode("Unknown statement.")
@@ -1229,7 +1231,22 @@ class Interpreter():
return val1 != val2
else:
raise InvalidCode('You broke me.')
-
+
+ def evaluate_andstatement(self, cur):
+ l = self.evaluate_statement(cur.left)
+ if isinstance(l, nodes.BoolStatement):
+ l = l.get_value()
+ if not isinstance(l, bool):
+ raise InterpreterException('First argument to "and" is not a boolean.')
+ if not l:
+ return False
+ r = self.evaluate_statement(cur.right)
+ if isinstance(r, nodes.BoolStatement):
+ r = r.get_value()
+ if not isinstance(r, bool):
+ raise InterpreterException('Second argument to "and" is not a boolean.')
+ return r
+
def evaluate_arraystatement(self, cur):
(arguments, kwargs) = self.reduce_arguments(cur.get_args())
if len(kwargs) > 0: