From: Robert Bradshaw Date: Thu, 15 Oct 2009 05:06:59 +0000 (-0700) Subject: Fix bug #409 with temps and sequence unpacking. X-Git-Tag: 0.13.beta0~2^2~121^2~57 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=a07db9ebf509212eed315379e16ba69e7c6eb69e;p=cython.git Fix bug #409 with temps and sequence unpacking. --- diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index 62e96974..b16c9e8d 100644 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -412,7 +412,7 @@ class ExprNode(Node): def allocate_temp_result(self, code): if self.temp_code: - raise RuntimeError("Temp allocated multiple times") + raise RuntimeError("Temp allocated multiple times in %r: %r" % (self.__class__.__name__, self.pos)) type = self.type if not type.is_void: if type.is_pyobject: diff --git a/Cython/Compiler/Parsing.py b/Cython/Compiler/Parsing.py index 175a7e71..c42a419e 100644 --- a/Cython/Compiler/Parsing.py +++ b/Cython/Compiler/Parsing.py @@ -924,7 +924,7 @@ def flatten_parallel_assignments(input, output): # individual elements. This transformation is applied # recursively, so that nested structures get matched as well. rhs = input[-1] - if not rhs.is_sequence_constructor: + if not rhs.is_sequence_constructor or not sum(lhs.is_sequence_constructor for lhs in input[:-1]): output.append(input) return diff --git a/tests/run/temp_alloc_T409.pyx b/tests/run/temp_alloc_T409.pyx new file mode 100644 index 00000000..d7927230 --- /dev/null +++ b/tests/run/temp_alloc_T409.pyx @@ -0,0 +1,11 @@ +__doc__ = """ + >>> foo() + ([0, 0], [0, 0]) +""" + +# Extracted from sage/plot/plot3d/index_face_set.pyx:502 +# Turns out to be a bug in implementation of PEP 3132 (Extended Iterable Unpacking) + +def foo(): + a = b = [0,0] + return a, b