Skip to content

Commit

Permalink
Close #128 by unpacking a generator during assignment.
Browse files Browse the repository at this point in the history
  • Loading branch information
donkirkby committed Jul 16, 2017
1 parent 686c367 commit 466517f
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .pydevproject
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?eclipse-pydev version="1.0"?><pydev_project>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
</pydev_project>
1 change: 1 addition & 0 deletions plugin/.settings/org.eclipse.jdt.core.prefs
Expand Up @@ -5,6 +5,7 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota
org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
Expand Down
7 changes: 7 additions & 0 deletions plugin/PySrc/code_tracer.py
Expand Up @@ -312,6 +312,13 @@ def visit_Assign(self, node):
new_nodes = []
format_string = self._wrap_assignment_targets(
existing_node.targets)
if (len(existing_node.targets) == 1 and
isinstance(existing_node.targets[0], Tuple)):
existing_node.value = Call(func=Name(id='tuple', ctx=Load()),
args=[existing_node.value],
keywords=[],
starargs=None,
kwargs=None)
existing_node.value = self._create_bare_context_call(
'set_assignment_value',
[existing_node.value])
Expand Down
36 changes: 36 additions & 0 deletions test/PySrc/tests/code_tracer_test.py
Expand Up @@ -1107,6 +1107,21 @@ def test_assign_tuple_list(self):
# VERIFY
self.assertReportEqual(expected_report, report)

def test_assign_generator_unpacked(self):
# SETUP
code = """\
a, b = (3*i for i in range(2))
"""
expected_report = """\
(a, b) = (0, 3) """
tracer = CodeTracer()

# EXEC
report = tracer.trace_code(code)

# VERIFY
self.assertReportEqual(expected_report, report)

def test_assign_assignment(self):
# SETUP
code = """\
Expand All @@ -1122,6 +1137,27 @@ def test_assign_assignment(self):
# VERIFY
self.assertReportEqual(expected_report, report)

def test_assign_generator_assignment(self):
""" Can't convert to tuple for more than one assignment. """
# SETUP
code = """\
a, b = c = (3*i for i in range(2))
d = a, b
e = list(c)
"""
expected_report = """\
d = (0, 3)
e = []
"""
tracer = CodeTracer()

# EXEC
report = tracer.trace_code(code)

# VERIFY
self.assertReportEqual(expected_report, report)

def test_assign_to_anonymous_attribute(self):
# SETUP
code = """\
Expand Down

0 comments on commit 466517f

Please sign in to comment.