Commit 8246c868 authored by Stefan Behnel's avatar Stefan Behnel

minor fixes to the with statement transform

parent 6a08a780
...@@ -497,9 +497,9 @@ class WithTransform(CythonTransform, SkipDeclarations): ...@@ -497,9 +497,9 @@ class WithTransform(CythonTransform, SkipDeclarations):
EXIT = MGR.__exit__ EXIT = MGR.__exit__
MGR.__enter__() MGR.__enter__()
EXC = True EXC = True
EXCINFO = None
try: try:
try: try:
EXCINFO = None
BODY BODY
except: except:
EXC = False EXC = False
...@@ -516,9 +516,9 @@ class WithTransform(CythonTransform, SkipDeclarations): ...@@ -516,9 +516,9 @@ class WithTransform(CythonTransform, SkipDeclarations):
EXIT = MGR.__exit__ EXIT = MGR.__exit__
VALUE = MGR.__enter__() VALUE = MGR.__enter__()
EXC = True EXC = True
EXCINFO = None
try: try:
try: try:
EXCINFO = None
TARGET = VALUE TARGET = VALUE
BODY BODY
except: except:
...@@ -532,6 +532,7 @@ class WithTransform(CythonTransform, SkipDeclarations): ...@@ -532,6 +532,7 @@ class WithTransform(CythonTransform, SkipDeclarations):
pipeline=[NormalizeTree(None)]) pipeline=[NormalizeTree(None)])
def visit_WithStatNode(self, node): def visit_WithStatNode(self, node):
self.visitchildren(node, ['body'])
# FIXME: excinfo_temp should be more local to the except # FIXME: excinfo_temp should be more local to the except
# clause that uses it, to avoid the presetting to None # clause that uses it, to avoid the presetting to None
excinfo_temp = TempHandle(Builtin.tuple_type) excinfo_temp = TempHandle(Builtin.tuple_type)
...@@ -550,10 +551,14 @@ class WithTransform(CythonTransform, SkipDeclarations): ...@@ -550,10 +551,14 @@ class WithTransform(CythonTransform, SkipDeclarations):
}, pos=node.pos) }, pos=node.pos)
# Set except excinfo target to EXCINFO # Set except excinfo target to EXCINFO
result.body.stats[5].body.stats[0].except_clauses[0].excinfo_target = ( try_except = result.body.stats[-1].body.stats[-1]
try_except.except_clauses[0].excinfo_target = (
excinfo_temp.ref(node.pos)) excinfo_temp.ref(node.pos))
return TempsBlockNode(node.pos, temps=[excinfo_temp], body=result) result.body.stats[-1].body.stats[-1] = TempsBlockNode(
node.pos, temps=[excinfo_temp], body=try_except)
return result
def visit_ExprNode(self, node): def visit_ExprNode(self, node):
# With statements are never inside expressions. # With statements are never inside expressions.
......
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