diff options
author | Torsten Marek <tmarek@google.com> | 2013-03-27 13:43:44 +0100 |
---|---|---|
committer | Torsten Marek <tmarek@google.com> | 2013-03-27 13:43:44 +0100 |
commit | f8b6be5917502914ddff22b2635f39e4af0efae2 (patch) | |
tree | 0cae4eea80bee5e8e2e372158835ce51f6416b25 /inference.py | |
parent | e7c5eff9d016058a57813069c5bac033ed611ab0 (diff) | |
download | astroid-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.py | 26 |
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 |