summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ParseTreeTransforms.py
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2015-07-12 20:48:52 +0200
committerStefan Behnel <stefan_ml@behnel.de>2015-07-12 20:48:52 +0200
commit9acf70e2180abbe8f39842a28508d761164fe957 (patch)
tree21e7ed7a1df970816fcaf7d5568952fbfe5b9650 /Cython/Compiler/ParseTreeTransforms.py
parent84ba7336eba7c59873a6ab57751d7b743797cc15 (diff)
downloadcython-9acf70e2180abbe8f39842a28508d761164fe957.tar.gz
deep-copy finally clauses of try-finally statements earlier to properly support arbitrary statements in them (genexprs, lambdas, etc.)
Diffstat (limited to 'Cython/Compiler/ParseTreeTransforms.py')
-rw-r--r--Cython/Compiler/ParseTreeTransforms.py17
1 files changed, 3 insertions, 14 deletions
diff --git a/Cython/Compiler/ParseTreeTransforms.py b/Cython/Compiler/ParseTreeTransforms.py
index 554072d85..c72fc07f3 100644
--- a/Cython/Compiler/ParseTreeTransforms.py
+++ b/Cython/Compiler/ParseTreeTransforms.py
@@ -188,16 +188,8 @@ class PostParse(ScopeTrackingTransform):
'__cythonbufferdefaults__' : self.handle_bufferdefaults
}
- def visit_ModuleNode(self, node):
- self.lambda_counter = 1
- self.genexpr_counter = 1
- return super(PostParse, self).visit_ModuleNode(node)
-
def visit_LambdaNode(self, node):
# unpack a lambda expression into the corresponding DefNode
- lambda_id = self.lambda_counter
- self.lambda_counter += 1
- node.lambda_name = EncodedString(u'lambda%d' % lambda_id)
collector = YieldNodeCollector()
collector.visitchildren(node.result_expr)
if collector.yields or collector.awaits or isinstance(node.result_expr, ExprNodes.YieldExprNode):
@@ -207,7 +199,7 @@ class PostParse(ScopeTrackingTransform):
body = Nodes.ReturnStatNode(
node.result_expr.pos, value=node.result_expr)
node.def_node = Nodes.DefNode(
- node.pos, name=node.name, lambda_name=node.lambda_name,
+ node.pos, name=node.name,
args=node.args, star_arg=node.star_arg,
starstar_arg=node.starstar_arg,
body=body, doc=None)
@@ -216,10 +208,6 @@ class PostParse(ScopeTrackingTransform):
def visit_GeneratorExpressionNode(self, node):
# unpack a generator expression into the corresponding DefNode
- genexpr_id = self.genexpr_counter
- self.genexpr_counter += 1
- node.genexpr_name = EncodedString(u'genexpr%d' % genexpr_id)
-
node.def_node = Nodes.DefNode(node.pos, name=node.name,
doc=None,
args=[], star_arg=None,
@@ -1577,7 +1565,8 @@ if VALUE is not None:
node.body = Nodes.NogilTryFinallyStatNode(
node.body.pos,
body=node.body,
- finally_clause=Nodes.EnsureGILNode(node.body.pos))
+ finally_clause=Nodes.EnsureGILNode(node.body.pos),
+ finally_except_clause=Nodes.EnsureGILNode(node.body.pos))
def _handle_fused(self, node):
if node.is_generator and node.has_fused_arguments: