Commit 025cc6d7 authored by Dag Sverre Seljebotn's avatar Dag Sverre Seljebotn

Further kludging for #151

parent c74fc36e
...@@ -3,7 +3,7 @@ from Cython.Compiler.ModuleNode import ModuleNode ...@@ -3,7 +3,7 @@ from Cython.Compiler.ModuleNode import ModuleNode
from Cython.Compiler.Nodes import * from Cython.Compiler.Nodes import *
from Cython.Compiler.ExprNodes import * from Cython.Compiler.ExprNodes import *
from Cython.Compiler.UtilNodes import * from Cython.Compiler.UtilNodes import *
from Cython.Compiler.TreeFragment import TreeFragment from Cython.Compiler.TreeFragment import TreeFragment, TemplateTransform
from Cython.Compiler.StringEncoding import EncodedString from Cython.Compiler.StringEncoding import EncodedString
from Cython.Compiler.Errors import CompileError from Cython.Compiler.Errors import CompileError
try: try:
...@@ -545,31 +545,33 @@ class WithTransform(CythonTransform, SkipDeclarations): ...@@ -545,31 +545,33 @@ class WithTransform(CythonTransform, SkipDeclarations):
pipeline=[NormalizeTree(None)]) pipeline=[NormalizeTree(None)])
def visit_WithStatNode(self, node): def visit_WithStatNode(self, node):
# TODO: Cleanup badly needed
TemplateTransform.temp_name_counter += 1
handle = "__tmpvar_%d" % TemplateTransform.temp_name_counter
self.visitchildren(node, ['body']) self.visitchildren(node, ['body'])
# FIXME: excinfo_temp should be more local to the except excinfo_temp = NameNode(node.pos, name=handle)#TempHandle(Builtin.tuple_type)
# clause that uses it, to avoid the presetting to None
excinfo_temp = TempHandle(Builtin.tuple_type)
if node.target is not None: if node.target is not None:
result = self.template_with_target.substitute({ result = self.template_with_target.substitute({
u'EXPR' : node.manager, u'EXPR' : node.manager,
u'BODY' : node.body, u'BODY' : node.body,
u'TARGET' : node.target, u'TARGET' : node.target,
u'EXCINFO' : excinfo_temp.ref(node.pos) u'EXCINFO' : excinfo_temp
}, pos=node.pos) }, pos=node.pos)
else: else:
result = self.template_without_target.substitute({ result = self.template_without_target.substitute({
u'EXPR' : node.manager, u'EXPR' : node.manager,
u'BODY' : node.body, u'BODY' : node.body,
u'EXCINFO' : excinfo_temp.ref(node.pos) u'EXCINFO' : excinfo_temp
}, pos=node.pos) }, pos=node.pos)
# Set except excinfo target to EXCINFO # Set except excinfo target to EXCINFO
try_except = result.stats[-1].body.stats[-1] try_except = result.stats[-1].body.stats[-1]
try_except.except_clauses[0].excinfo_target = ( try_except.except_clauses[0].excinfo_target = NameNode(node.pos, name=handle)
excinfo_temp.ref(node.pos)) # excinfo_temp.ref(node.pos))
result.stats[-1].body.stats[-1] = TempsBlockNode( # result.stats[-1].body.stats[-1] = TempsBlockNode(
node.pos, temps=[excinfo_temp], body=try_except) # node.pos, temps=[excinfo_temp], body=try_except)
return result return result
......
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