Implememnt dict.values for FakeDict to avoid a recursion error. Fixes #1014.

This commit is contained in:
Dave Halter
2018-02-02 09:31:53 +01:00
parent e50609c48b
commit 8028138e8c
2 changed files with 14 additions and 0 deletions

View File

@@ -438,6 +438,7 @@ class FakeSequence(_FakeArray):
return "<%s of %s>" % (type(self).__name__, self._lazy_context_list) return "<%s of %s>" % (type(self).__name__, self._lazy_context_list)
@has_builtin_methods
class FakeDict(_FakeArray): class FakeDict(_FakeArray):
def __init__(self, evaluator, dct): def __init__(self, evaluator, dct):
super(FakeDict, self).__init__(evaluator, dct, u'dict') super(FakeDict, self).__init__(evaluator, dct, u'dict')
@@ -465,6 +466,13 @@ class FakeDict(_FakeArray):
return self._dct[index].infer() return self._dct[index].infer()
@register_builtin_method('values')
def _values(self):
return ContextSet(FakeSequence(
self.evaluator, 'tuple',
[LazyKnownContext(v) for v in self.dict_values()]
))
def dict_values(self): def dict_values(self):
return ContextSet.from_sets(lazy_context.infer() for lazy_context in self._dct.values()) return ContextSet.from_sets(lazy_context.infer() for lazy_context in self._dct.values())

View File

@@ -35,6 +35,12 @@ next(open(''))
#? ['__itemsize__'] #? ['__itemsize__']
tuple.__itemsize__ tuple.__itemsize__
#? ['__iter__']
dict().values().__iter__
#? int()
dict(a=3).values()[0]
# ----------------- # -----------------
# type() calls with one parameter # type() calls with one parameter
# ----------------- # -----------------