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
commitf8b6be5917502914ddff22b2635f39e4af0efae2 (patch)
tree0cae4eea80bee5e8e2e372158835ce51f6416b25 /inference.py
parente7c5eff9d016058a57813069c5bac033ed611ab0 (diff)
downloadastroid-f8b6be5917502914ddff22b2635f39e4af0efae2.tar.gz
Add support for inference of subscript operations on dict literals. Closes #123074
actually fix Dict.getitem and enhance infer_subscript
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 49d2424..e2d70d4 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