summaryrefslogtreecommitdiff
path: root/inference.py
diff options
context:
space:
mode:
authorTorsten Marek <tmarek@google.com>2013-03-27 13:43:44 +0100
committerTorsten Marek <tmarek@google.com>2013-03-27 13:43:44 +0100
commit81a37d033676e3dccaab611bb723cf9eb08ec460 (patch)
tree730bb96809dde9596d0b6b9172da5512437949b2 /inference.py
parentcef0d67e61af3f27b539c7b5492c8723f6787fe2 (diff)
downloadastroid-git-81a37d033676e3dccaab611bb723cf9eb08ec460.tar.gz
Add support for inference of subscript operations on dict literals. Closes #123074
actually fix Dict.getitem and enhance infer_subscript --HG-- branch : stable
Diffstat (limited to 'inference.py')
-rw-r--r--inference.py26
1 files changed, 17 insertions, 9 deletions
diff --git a/inference.py b/inference.py
index 49d2424a..e2d70d4d 100644
--- a/inference.py
+++ b/inference.py
@@ -1,4 +1,4 @@
-# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
# copyright 2003-2010 Sylvain Thenault, all rights reserved.
# contact mailto:thenault@gmail.com
@@ -238,15 +238,19 @@ nodes.Global.infer = path_wrapper(infer_global)
def infer_subscript(self, context=None):
"""infer simple subscription such as [1,2,3][0] or (1,2,3)[-1]"""
- if isinstance(self.slice, nodes.Index):
- index = self.slice.value.infer(context).next()
- if index is YES:
- yield YES
- return
+ value = self.value.infer(context).next()
+ if value is YES:
+ yield YES
+ return
+
+ index = self.slice.infer(context).next()
+ if index is YES:
+ yield YES
+ return
+
+ if isinstance(index, nodes.Const):
try:
- # suppose it's a Tuple/List node (attribute error else)
- # XXX infer self.value?
- assigned = self.value.getitem(index.value, context)
+ assigned = value.getitem(index.value, context)
except AttributeError:
raise InferenceError()
except (IndexError, TypeError):
@@ -381,3 +385,7 @@ def infer_empty_node(self, context=None):
yield YES
nodes.EmptyNode.infer = path_wrapper(infer_empty_node)
+
+def infer_index(self, context=None):
+ return self.value.infer(context)
+nodes.Index.infer = infer_index