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): ...@@ -958,7 +958,7 @@ class WithTransform(CythonTransform, SkipDeclarations):
}, 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.body.stats[-1].body.stats[-1]
try_except.except_clauses[0].excinfo_target = exc_info try_except.except_clauses[0].excinfo_target = exc_info
return result return result
......
...@@ -121,16 +121,15 @@ class TemplateTransform(VisitorTransform): ...@@ -121,16 +121,15 @@ class TemplateTransform(VisitorTransform):
temphandles = [] temphandles = []
for temp in temps: for temp in temps:
TemplateTransform.temp_name_counter += 1 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 tempmap[temp] = handle
# temphandles.append(handle) temphandles.append(handle)
self.tempmap = tempmap self.tempmap = tempmap
result = super(TemplateTransform, self).__call__(node) result = super(TemplateTransform, self).__call__(node)
# if temps: if temps:
# result = UtilNodes.TempsBlockNode(self.get_pos(node), result = UtilNodes.TempsBlockNode(self.get_pos(node),
# temps=temphandles, temps=temphandles,
# body=result) body=result)
return result return result
def get_pos(self, node): def get_pos(self, node):
...@@ -161,9 +160,8 @@ class TemplateTransform(VisitorTransform): ...@@ -161,9 +160,8 @@ class TemplateTransform(VisitorTransform):
def visit_NameNode(self, node): def visit_NameNode(self, node):
temphandle = self.tempmap.get(node.name) temphandle = self.tempmap.get(node.name)
if temphandle: if temphandle:
return NameNode(pos=node.pos, name=temphandle)
# Replace name with temporary # Replace name with temporary
#return temphandle.ref(self.get_pos(node)) return temphandle.ref(self.get_pos(node))
else: else:
return self.try_substitution(node, node.name) return self.try_substitution(node, node.name)
......
...@@ -10,7 +10,6 @@ cfunc_call_tuple_args_T408 ...@@ -10,7 +10,6 @@ cfunc_call_tuple_args_T408
compile.cpp_operators compile.cpp_operators
cpp_templated_ctypedef cpp_templated_ctypedef
cpp_structs cpp_structs
with_statement_module_level_T536
function_as_method_T494 function_as_method_T494
closure_inside_cdef_T554 closure_inside_cdef_T554
pure_mode_cmethod_inheritance_T583 pure_mode_cmethod_inheritance_T583
......
...@@ -3,17 +3,32 @@ ...@@ -3,17 +3,32 @@
__doc__ = """ __doc__ = """
>>> inner_result >>> inner_result
['ENTER'] ['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)'] ['ENTER', 'EXIT (None, None, None)']
""" """
result = []
class ContextManager(object): class ContextManager(object):
def __init__(self, result):
self.result = result
def __enter__(self): def __enter__(self):
result.append("ENTER") self.result.append("ENTER")
def __exit__(self, *values): 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[:] 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