1
0
forked from VimPlug/jedi

reversed and for loops now produce strings in the correct order.

This commit is contained in:
Dave Halter
2015-10-14 16:50:26 +02:00
parent b27be47811
commit 62468fb402
4 changed files with 49 additions and 15 deletions

View File

@@ -23,17 +23,19 @@ COMPARISON_OPERATORS = {
}
def _literals_to_types(evaluator, result):
def literals_to_types(evaluator, result):
# Changes literals ('a', 1, 1.0, etc) to its type instances (str(),
# int(), float(), etc).
result = list(result)
for i, r in enumerate(result):
if is_literal(r):
new_result = set()
for typ in result:
if is_literal(typ):
# Literals are only valid as long as the operations are
# correct. Otherwise add a value-free instance.
cls = builtin.get_by_name(r.name.get_code())
result[i] = list(evaluator.execute(cls))[0]
return set(result)
cls = builtin.get_by_name(typ.name.get_code())
new_result.add(list(evaluator.execute(cls))[0])
else:
new_result.add(typ)
return new_result
def calculate_children(evaluator, children):
@@ -69,13 +71,13 @@ def calculate(evaluator, left_result, operator, right_result):
if not left_result or not right_result:
# illegal slices e.g. cause left/right_result to be None
result = (left_result or set()) | (right_result or set())
result = _literals_to_types(evaluator, result)
result = literals_to_types(evaluator, result)
else:
# I don't think there's a reasonable chance that a string
# operation is still correct, once we pass something like six
# objects.
if len(left_result) * len(right_result) > 6:
result = _literals_to_types(evaluator, left_result | right_result)
result = literals_to_types(evaluator, left_result | right_result)
else:
for left in left_result:
for right in right_result: