Commit 426999c6 authored by Stefan Behnel's avatar Stefan Behnel

fix temp handling in 'with' transform

parent 571e3b08
......@@ -457,6 +457,7 @@ class WithTransform(CythonTransform):
EXIT = MGR.__exit__
MGR.__enter__()
EXC = True
EXCINFO = None
try:
try:
BODY
......@@ -475,6 +476,7 @@ class WithTransform(CythonTransform):
EXIT = MGR.__exit__
VALUE = MGR.__enter__()
EXC = True
EXCINFO = None
try:
try:
TARGET = VALUE
......@@ -490,7 +492,9 @@ class WithTransform(CythonTransform):
pipeline=[NormalizeTree(None)])
def visit_WithStatNode(self, node):
excinfo_temp = TempHandle(PyrexTypes.py_object_type)
# FIXME: excinfo_temp should be more local to the except
# clause that uses it, to avoid the presetting to None
excinfo_temp = TempHandle(Builtin.tuple_type)
if node.target is not None:
result = self.template_with_target.substitute({
u'EXPR' : node.manager,
......@@ -498,17 +502,15 @@ class WithTransform(CythonTransform):
u'TARGET' : node.target,
u'EXCINFO' : excinfo_temp.ref(node.pos)
}, pos=node.pos)
# Set except excinfo target to EXCINFO
result.body.stats[4].body.stats[0].except_clauses[0].excinfo_target = (
excinfo_temp.ref(node.pos))
else:
result = self.template_without_target.substitute({
u'EXPR' : node.manager,
u'BODY' : node.body,
u'EXCINFO' : excinfo_temp.ref(node.pos)
}, pos=node.pos)
# Set except excinfo target to EXCINFO
result.body.stats[4].body.stats[0].except_clauses[0].excinfo_target = (
result.body.stats[5].body.stats[0].except_clauses[0].excinfo_target = (
excinfo_temp.ref(node.pos))
return TempsBlockNode(node.pos, temps=[excinfo_temp], body=result)
......
......@@ -99,6 +99,7 @@ class TestWithTransform(TransformTest):
$1_2 = $1_0.__exit__
$1_0.__enter__()
$1_1 = True
$0_0 = None
try:
try:
y = z ** 3
......@@ -123,6 +124,7 @@ class TestWithTransform(TransformTest):
$1_2 = $1_0.__exit__
$1_3 = $1_0.__enter__()
$1_1 = True
$0_0 = None
try:
try:
y = $1_3
......
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