Commit a133a6fd by devttys0

Fixed MathExpression bugs

parent 68812ce2
...@@ -178,11 +178,13 @@ class MathExpression(object): ...@@ -178,11 +178,13 @@ class MathExpression(object):
''' '''
OPERATORS = { OPERATORS = {
ast.Add: op.add, ast.Add: op.add,
ast.Sub: op.sub, ast.UAdd: op.add,
ast.Mult: op.mul, ast.USub: op.sub,
ast.Div: op.truediv, ast.Sub: op.sub,
ast.Pow: op.pow, ast.Mult: op.mul,
ast.Div: op.truediv,
ast.Pow: op.pow,
ast.BitXor: op.xor ast.BitXor: op.xor
} }
...@@ -195,7 +197,7 @@ class MathExpression(object): ...@@ -195,7 +197,7 @@ class MathExpression(object):
self.value = self.evaluate(self.expression) self.value = self.evaluate(self.expression)
except KeyboardInterrupt as e: except KeyboardInterrupt as e:
raise e raise e
except Exception: except Exception as e:
pass pass
def evaluate(self, expr): def evaluate(self, expr):
...@@ -205,9 +207,11 @@ class MathExpression(object): ...@@ -205,9 +207,11 @@ class MathExpression(object):
if isinstance(node, ast.Num): # <number> if isinstance(node, ast.Num): # <number>
return node.n return node.n
elif isinstance(node, ast.operator): # <operator> elif isinstance(node, ast.operator): # <operator>
return self.OPERATORS[type(node)] return self.OPERATORS[type(node.op)]
elif isinstance(node, ast.UnaryOp):
return self.OPERATORS[type(node.op)](0, self._eval(node.operand))
elif isinstance(node, ast.BinOp): # <left> <operator> <right> elif isinstance(node, ast.BinOp): # <left> <operator> <right>
return self._eval(node.op)(self._eval(node.left), self._eval(node.right)) return self.OPERATORS[type(node.op)](self._eval(node.left), self._eval(node.right))
else: else:
raise TypeError(node) raise TypeError(node)
......
...@@ -513,7 +513,7 @@ class Magic(object): ...@@ -513,7 +513,7 @@ class Magic(object):
# Sanity check # Sanity check
if not isinstance(line_offset, int): if not isinstance(line_offset, int):
raise ParserException("Failed to convert offset '%s' to a number" % line.offset) raise ParserException("Failed to convert offset '%s' to a number: '%s'" % (line.offset, line.text))
# The start of the data needed by this line is at offset + line_offset. # The start of the data needed by this line is at offset + line_offset.
# The end of the data will be line.size bytes later. # The end of the data will be line.size bytes later.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment