aboutsummaryrefslogtreecommitdiff
path: root/interpreter.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2015-05-09 19:52:10 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2015-05-09 19:52:10 +0300
commit3f7f984a3910565887fcd530ed5c7323dd16708c (patch)
tree86ace362696e31b83a83a99d389ba324892f91f3 /interpreter.py
parent8be84a4a7cb3ed81ef06c9d536ec7223150c9373 (diff)
downloadmeson-3f7f984a3910565887fcd530ed5c7323dd16708c.zip
meson-3f7f984a3910565887fcd530ed5c7323dd16708c.tar.gz
meson-3f7f984a3910565887fcd530ed5c7323dd16708c.tar.bz2
Handle then unary negation operator.
Diffstat (limited to 'interpreter.py')
-rw-r--r--interpreter.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/interpreter.py b/interpreter.py
index 8c16518..0ab7291 100644
--- a/interpreter.py
+++ b/interpreter.py
@@ -945,6 +945,8 @@ class Interpreter():
return self.evaluate_orstatement(cur)
elif isinstance(cur, mparser.NotNode):
return self.evaluate_notstatement(cur)
+ elif isinstance(cur, mparser.UMinusNode):
+ return self.evaluate_uminusstatement(cur)
elif isinstance(cur, mparser.ArithmeticNode):
return self.evaluate_arithmeticstatement(cur)
elif isinstance(cur, mparser.ForeachClauseNode):
@@ -1791,6 +1793,14 @@ class Interpreter():
raise InterpreterException('Argument to "not" is not a boolean.')
return not v
+ def evaluate_uminusstatement(self, cur):
+ v = self.evaluate_statement(cur.value)
+ if isinstance(v, mparser.NumberNode):
+ v = v.value
+ if not isinstance(v, int):
+ raise InterpreterException('Argument to negation is not an integer.')
+ return -v
+
def evaluate_arithmeticstatement(self, cur):
l = self.to_native(self.evaluate_statement(cur.left))
r = self.to_native(self.evaluate_statement(cur.right))