Fix remaining issues with FakeDict.

This commit is contained in:
Dave Halter
2015-12-05 22:33:41 +01:00
parent 2008775370
commit ffeedb32de
3 changed files with 27 additions and 5 deletions

View File

@@ -168,7 +168,7 @@ class Comprehension(IterableWrapper):
evaluator = self._evaluator
comp_fors = list(self._get_comp_for().get_comp_fors())
input_node = comp_fors[0].children[-1]
input_node = comp_fors[0].children[3]
input_types = evaluator.eval_element(input_node)
for result in nested(input_types, comp_fors, input_node):
yield result
@@ -206,6 +206,10 @@ class ListComprehension(Comprehension, ArrayMixin):
def iter_content(self):
return self._evaluator.eval_element(self.eval_node())
def py__getitem__(self, index):
all_types = list(self.py__iter__())
return all_types[index]
@property
def name(self):
return FakeSequence(self._evaluator, [], 'list').name
@@ -272,7 +276,9 @@ class Array(IterableWrapper, ArrayMixin):
"""Here the index is an int/str. Raises IndexError/KeyError."""
if self.type == 'dict':
for key, values in self._items():
if index == key:
for k in self._evaluator.eval_element(key):
if isinstance(k, compiled.CompiledObject) \
and index == k.obj:
for value in values:
return self._evaluator.eval_element(value)
raise KeyError('No key found in dictionary %s.' % self)
@@ -406,7 +412,10 @@ class FakeDict(_FakeArray):
super(FakeDict, self).__init__(evaluator, dct, 'dict')
self._dct = dct
def get_exact_index_types(self, index):
def py__iter__(self):
yield set(compiled.create(self._evaluator, key) for key in self._dct)
def py__getitem__(self, index):
return unite(self._evaluator.eval_element(v) for v in self._dct[index])
def _items(self):

View File

@@ -30,8 +30,12 @@ a[0]
arr = [1,'']
a = [a for a in arr]
#? int() str()
#? int()
a[0]
#? str()
a[1]
#? int() str()
a[2]
a = [a if 1.0 else '' for a in [1] if [1.0]]
#? int() str()
@@ -54,7 +58,7 @@ def listen(arg):
x
listen(['' for x in [1]])
#? str
#?
([str for x in []])[0]

View File

@@ -327,6 +327,15 @@ exe[3]
#? set
exe[3]['c']
def kwargs_iteration(**kwargs):
return kwargs
for x in kwargs_iteration(d=3):
#? float()
{'d': 1.0, 'c': '1'}[x]
# -----------------
# nested *args
# -----------------