Commit e0fc3131 authored by Stefan Behnel's avatar Stefan Behnel

enable type inference in generators (but keep it disabled for variables in other closures)

parent 7386ad24
...@@ -221,9 +221,9 @@ class SimpleAssignmentTypeInferer(object): ...@@ -221,9 +221,9 @@ class SimpleAssignmentTypeInferer(object):
# TODO: Implement a real type inference algorithm. # TODO: Implement a real type inference algorithm.
# (Something more powerful than just extending this one...) # (Something more powerful than just extending this one...)
def infer_types(self, scope): def infer_types(self, scope):
closure_or_inner = scope.is_closure_scope or (scope.outer_scope and scope.outer_scope.is_closure_scope) enabled = scope.directives['infer_types']
enabled = not closure_or_inner and scope.directives['infer_types']
verbose = scope.directives['infer_types.verbose'] verbose = scope.directives['infer_types.verbose']
if enabled == True: if enabled == True:
spanning_type = aggressive_spanning_type spanning_type = aggressive_spanning_type
elif enabled is None: # safe mode elif enabled is None: # safe mode
...@@ -239,6 +239,10 @@ class SimpleAssignmentTypeInferer(object): ...@@ -239,6 +239,10 @@ class SimpleAssignmentTypeInferer(object):
ready_to_infer = [] ready_to_infer = []
for name, entry in scope.entries.items(): for name, entry in scope.entries.items():
if entry.type is unspecified_type: if entry.type is unspecified_type:
if entry.in_closure:
# cross-closure type inference is not currently supported
entry.type = py_object_type
continue
all = set() all = set()
for expr in entry.assignments: for expr in entry.assignments:
all.update(expr.type_dependencies(scope)) all.update(expr.type_dependencies(scope))
......
...@@ -18,7 +18,6 @@ genexpr_iterable_lookup_T600 ...@@ -18,7 +18,6 @@ genexpr_iterable_lookup_T600
for_from_pyvar_loop_T601 for_from_pyvar_loop_T601
decorators_T593 decorators_T593
temp_sideeffects_T654 temp_sideeffects_T654
generator_type_inference
# CPython regression tests that don't current work: # CPython regression tests that don't current work:
pyregr.test_threadsignals pyregr.test_threadsignals
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment