From 48af72b0f3e0ef85bda0db48992c3deef0a7675d Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Fri, 15 May 2009 20:24:43 +0200 Subject: [PATCH] remove unused ComprehensionTransform class (which doesn't work anyway) --- Cython/Compiler/Main.py | 3 +- Cython/Compiler/ParseTreeTransforms.py | 56 -------------------------- 2 files changed, 1 insertion(+), 58 deletions(-) diff --git a/Cython/Compiler/Main.py b/Cython/Compiler/Main.py index a2cb780c..7b8b7efd 100644 --- a/Cython/Compiler/Main.py +++ b/Cython/Compiler/Main.py @@ -80,7 +80,7 @@ class Context(object): from ParseTreeTransforms import AnalyseDeclarationsTransform, AnalyseExpressionsTransform from ParseTreeTransforms import CreateClosureClasses, MarkClosureVisitor, DecoratorTransform from ParseTreeTransforms import InterpretCompilerDirectives, TransformBuiltinMethods - from ParseTreeTransforms import ComprehensionTransform, AlignFunctionDefinitions + from ParseTreeTransforms import AlignFunctionDefinitions from AutoDocTransforms import EmbedSignature from Optimize import FlattenInListTransform, SwitchTransform, IterationTransform from Optimize import FlattenBuiltinTypeCreation, ConstantFolding, FinalOptimizePhase @@ -125,7 +125,6 @@ class Context(object): AnalyseExpressionsTransform(self), FlattenBuiltinTypeCreation(), ConstantFolding(), -# ComprehensionTransform(), IterationTransform(), SwitchTransform(), FinalOptimizePhase(self), diff --git a/Cython/Compiler/ParseTreeTransforms.py b/Cython/Compiler/ParseTreeTransforms.py index eb76005c..c0961ef3 100644 --- a/Cython/Compiler/ParseTreeTransforms.py +++ b/Cython/Compiler/ParseTreeTransforms.py @@ -589,62 +589,6 @@ class WithTransform(CythonTransform, SkipDeclarations): return node -class ComprehensionTransform(VisitorTransform): - """Prevent the target of list/set/dict comprehensions from leaking by - moving it into a temp variable. This mimics the behaviour of all - comprehensions in Py3 and of generator expressions in Py2.x. - - This must run before the IterationTransform, which might replace - for-loops with while-loops. We only handle for-loops here. - """ - def visit_ModuleNode(self, node): - self.comprehension_targets = {} - self.visitchildren(node) - return node - - visit_Node = VisitorTransform.recurse_to_children - - def visit_ComprehensionNode(self, node): - if type(node.loop) not in (Nodes.ForInStatNode, - Nodes.ForFromStatNode): - # this should not happen! - self.visitchildren(node) - return node - - outer_comprehension_targets = self.comprehension_targets - self.comprehension_targets = outer_comprehension_targets.copy() - - # find all NameNodes in the loop target - target_name_collector = NameNodeCollector() - target_name_collector.visit(node.loop.target) - targets = target_name_collector.name_nodes - - # create a temp variable for each target name - temps = [] - for target in targets: - handle = TempHandle(target.type) - temps.append(handle) - self.comprehension_targets[target.entry.cname] = handle.ref(node.pos) - - # replace name references in the loop code by their temp node - self.visitchildren(node, ['loop']) - - loop = node.loop - if type(loop) is Nodes.ForFromStatNode and loop.target.type.is_numeric: - loop.loopvar_node = loop.target - - node.loop = TempsBlockNode(node.pos, body=node.loop, temps=temps) - self.comprehension_targets = outer_comprehension_targets - return node - - def visit_NameNode(self, node): - if node.entry: - replacement = self.comprehension_targets.get(node.entry.cname) - if replacement is not None: - return replacement - return node - - class DecoratorTransform(CythonTransform, SkipDeclarations): def visit_DefNode(self, func_node): -- 2.26.2