diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2013-07-27 17:06:37 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2013-07-27 17:06:37 +0300 |
commit | 6a5a9a384842870f9a54ffeb3a828e57eafdec08 (patch) | |
tree | 3c6347502cad39283048a11fe54419465f7da196 /interpreter.py | |
parent | e990291c34aa976c12c88e3b26b45e7ac07b0ef2 (diff) | |
download | meson-6a5a9a384842870f9a54ffeb3a828e57eafdec08.zip meson-6a5a9a384842870f9a54ffeb3a828e57eafdec08.tar.gz meson-6a5a9a384842870f9a54ffeb3a828e57eafdec08.tar.bz2 |
Can do logical and.
Diffstat (limited to 'interpreter.py')
-rw-r--r-- | interpreter.py | 19 |
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: |