Remove ordered_elements_of_iterable and get_iterator_types, because they are not used anymore.

This commit is contained in:
Dave Halter
2015-12-03 09:25:11 +01:00
parent 76bbc91ff9
commit f66b8138b7
2 changed files with 4 additions and 61 deletions

View File

@@ -435,28 +435,6 @@ class MergedArray(_FakeArray):
return sum(len(a) for a in self._arrays) return sum(len(a) for a in self._arrays)
def ordered_elements_of_iterable(evaluator, iterable_type, all_values):
"""
This function returns the ordered types of an iterable.
"""
ordered = []
# Unpack the iterator values
for sequence in iterable_type:
try:
# TODO every type should have a py__iter__ method.
method = sequence.py__iter__
except AttributeError:
ordered = [literals_to_types(evaluator, all_values)]
break
else:
for i, types in enumerate(method()):
try:
ordered[i] |= types
except IndexError:
ordered.append(set(types))
return ordered
def unpack_tuple_to_dict(evaluator, types, exprlist): def unpack_tuple_to_dict(evaluator, types, exprlist):
""" """
Unpacking tuple assignments in for statements and expr_stmts. Unpacking tuple assignments in for statements and expr_stmts.
@@ -495,6 +473,8 @@ def py__iter__(evaluator, types):
iter_method = typ.py__iter__ iter_method = typ.py__iter__
except AttributeError: except AttributeError:
raise NotImplementedError raise NotImplementedError
analysis.add(evaluator, 'type-error-not-iterable', element)
debug.warning('iterator/for loop input wrong: %s', it)
else: else:
for result in iter_method(): for result in iter_method():
yield result yield result
@@ -508,45 +488,6 @@ def py__iter__types(evaluator, types):
return unite(py__iter__(evaluator, types)) return unite(py__iter__(evaluator, types))
def get_iterator_types(evaluator, element):
"""Returns the types of any iterator (arrays, yields, __iter__, etc)."""
iterators = []
# Take the first statement (for has always only
# one, remember `in`). And follow it.
for it in evaluator.eval_element(element):
if isinstance(it, (Generator, Array, _ArrayInstance, Comprehension)):
iterators.append(it)
else:
if not hasattr(it, 'execute_subscope_by_name'):
analysis.add(evaluator, 'type-error-not-iterable', element)
debug.warning('iterator/for loop input wrong: %s', it)
continue
try:
iterators += it.execute_subscope_by_name('__iter__')
except KeyError:
debug.warning('iterators: No __iter__ method found.')
result = set()
from jedi.evaluate.representation import Instance
for it in iterators:
if isinstance(it, Array):
# Array is a little bit special, since this is an internal array,
# but there's also the list builtin, which is another thing.
result |= it.values()
elif isinstance(it, Instance):
# __iter__ returned an instance.
name = '__next__' if is_py3 else 'next'
try:
result |= it.execute_subscope_by_name(name)
except KeyError:
debug.warning('Instance has no __next__ function in %s.', it)
else:
# TODO this is not correct, __iter__ can return arbitrary input!
# Is a generator.
result |= it.iter_content()
return result
def check_array_additions(evaluator, array): def check_array_additions(evaluator, array):
""" Just a mapper function for the internal _check_array_additions """ """ Just a mapper function for the internal _check_array_additions """
if array.type not in ('list', 'set'): if array.type not in ('list', 'set'):

View File

@@ -187,6 +187,8 @@ def builtins_isinstance(evaluator, objects, types, arguments):
if cls_or_tup.is_class(): if cls_or_tup.is_class():
bool_results.add(cls_or_tup in mro) bool_results.add(cls_or_tup in mro)
else: else:
# TODO Actually we should check for non iterables here (the
# type should be object or tuple of object)
# Check for tuples. # Check for tuples.
classes = iterable.py__iter__types(evaluator, set([cls_or_tup])) classes = iterable.py__iter__types(evaluator, set([cls_or_tup]))
bool_results.add(any(cls in mro for cls in classes)) bool_results.add(any(cls in mro for cls in classes))