summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaudiu Popa <cpopa@cloudbasesolutions.com>2015-07-03 12:41:52 +0300
committerClaudiu Popa <cpopa@cloudbasesolutions.com>2015-07-03 12:41:52 +0300
commit24209b633bc0465e5a078ef626711547211ca820 (patch)
tree18fd35e8f7ac9ef88075655e60d61e348325e214
parent40cff07aad309c94aa62e9eb26347e24294732b6 (diff)
downloadastroid-24209b633bc0465e5a078ef626711547211ca820.tar.gz
Infer the unary method retrieved from classes.
-rw-r--r--astroid/inference.py5
-rw-r--r--astroid/tests/unittest_inference.py13
2 files changed, 16 insertions, 2 deletions
diff --git a/astroid/inference.py b/astroid/inference.py
index fda5f2e..05428de 100644
--- a/astroid/inference.py
+++ b/astroid/inference.py
@@ -397,8 +397,9 @@ def _infer_unaryop(self, context=None):
try:
meth = operand.getattr(meth, context=context)[0]
- result = next(meth.infer_call_result(self, context=context),
- None)
+ inferred = next(meth.infer(context=context))
+ call_results = inferred.infer_call_result(self, context=context)
+ result = next(call_results, None)
if result is None:
# Failed to infer, return the same type.
yield operand
diff --git a/astroid/tests/unittest_inference.py b/astroid/tests/unittest_inference.py
index 87e6993..eba665c 100644
--- a/astroid/tests/unittest_inference.py
+++ b/astroid/tests/unittest_inference.py
@@ -2658,6 +2658,19 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
self.assertIsInstance(inferred, nodes.Const)
self.assertEqual(inferred.value, "lala")
+ def test_unary_op_assignment(self):
+ ast_node = test_utils.extract_node('''
+ class A(object): pass
+ def pos(self):
+ return 42
+ A.__pos__ = pos
+ f = A()
+ +f #@
+ ''')
+ inferred = next(ast_node.infer())
+ self.assertIsInstance(inferred, nodes.Const)
+ self.assertEqual(inferred.value, 42)
+
class GetattrTest(unittest.TestCase):