Commit e89ad8c8 authored by Stefan Behnel's avatar Stefan Behnel

fix 'with' statement at module scope by reactivating old temp code for it

parent 5c1ef360
......@@ -958,7 +958,7 @@ class WithTransform(CythonTransform, SkipDeclarations):
}, pos=node.pos)
# Set except excinfo target to EXCINFO
try_except = result.stats[-1].body.stats[-1]
try_except = result.body.stats[-1].body.stats[-1]
try_except.except_clauses[0].excinfo_target = exc_info
return result
......
......@@ -121,16 +121,15 @@ class TemplateTransform(VisitorTransform):
temphandles = []
for temp in temps:
TemplateTransform.temp_name_counter += 1
handle = "__tmpvar_%d" % TemplateTransform.temp_name_counter
# handle = UtilNodes.TempHandle(PyrexTypes.py_object_type)
handle = UtilNodes.TempHandle(PyrexTypes.py_object_type)
tempmap[temp] = handle
# temphandles.append(handle)
temphandles.append(handle)
self.tempmap = tempmap
result = super(TemplateTransform, self).__call__(node)
# if temps:
# result = UtilNodes.TempsBlockNode(self.get_pos(node),
# temps=temphandles,
# body=result)
if temps:
result = UtilNodes.TempsBlockNode(self.get_pos(node),
temps=temphandles,
body=result)
return result
def get_pos(self, node):
......@@ -161,9 +160,8 @@ class TemplateTransform(VisitorTransform):
def visit_NameNode(self, node):
temphandle = self.tempmap.get(node.name)
if temphandle:
return NameNode(pos=node.pos, name=temphandle)
# Replace name with temporary
#return temphandle.ref(self.get_pos(node))
return temphandle.ref(self.get_pos(node))
else:
return self.try_substitution(node, node.name)
......
......@@ -10,7 +10,6 @@ cfunc_call_tuple_args_T408
compile.cpp_operators
cpp_templated_ctypedef
cpp_structs
with_statement_module_level_T536
function_as_method_T494
closure_inside_cdef_T554
pure_mode_cmethod_inheritance_T583
......
......@@ -3,17 +3,32 @@
__doc__ = """
>>> inner_result
['ENTER']
>>> result
>>> result # doctest: +ELLIPSIS
['ENTER', "EXIT (<type 'exceptions.ValueError'>, ValueError('TEST',), <traceback object at ...)"]
>>> inner_result_no_exc
['ENTER']
>>> result_no_exc
['ENTER', 'EXIT (None, None, None)']
"""
result = []
class ContextManager(object):
def __init__(self, result):
self.result = result
def __enter__(self):
result.append("ENTER")
self.result.append("ENTER")
def __exit__(self, *values):
result.append("EXIT %r" % (values,))
self.result.append("EXIT %r" % (values,))
return True
result_no_exc = []
with ContextManager(result_no_exc) as c:
inner_result_no_exc = result_no_exc[:]
result = []
with ContextManager() as c:
with ContextManager(result) as c:
inner_result = result[:]
raise ValueError('TEST')
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