From: Stefan Behnel Date: Sat, 24 Oct 2009 13:55:29 +0000 (+0200) Subject: merged in latest cython-devel X-Git-Tag: 0.13.beta0~2^2~119 X-Git-Url: http://git.tremily.us/gitweb.cgi?a=commitdiff_plain;h=91d8ecbc495fec3b8244c7fef06780b0454eeeed;p=cython.git merged in latest cython-devel --- 91d8ecbc495fec3b8244c7fef06780b0454eeeed diff --cc Cython/Compiler/Nodes.py index e9206ca8,8b37eb86..8990f186 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@@ -1013,12 -1019,12 +1019,12 @@@ class FuncDefNode(StatNode, BlockNode) def create_local_scope(self, env): genv = env - while env.is_py_class_scope or env.is_c_class_scope: - env = env.outer_scope + while genv.is_py_class_scope or genv.is_c_class_scope: + genv = env.outer_scope if self.needs_closure: - lenv = GeneratorLocalScope(name = self.entry.name, outer_scope = genv, parent_scope = env) + lenv = ClosureScope(name = self.entry.name, scope_name = self.entry.cname, outer_scope = genv) else: - lenv = LocalScope(name = self.entry.name, outer_scope = genv) + lenv = LocalScope(name = self.entry.name, outer_scope = genv, parent_scope = env) lenv.return_type = self.return_type type = self.entry.type if type.is_cfunction: diff --cc Cython/Compiler/ParseTreeTransforms.py index 93c8574e,34883967..204bcec8 --- a/Cython/Compiler/ParseTreeTransforms.py +++ b/Cython/Compiler/ParseTreeTransforms.py @@@ -718,12 -698,13 +718,18 @@@ property NAME self.visitchildren(node) self.seen_vars_stack.pop() return node - + + def visit_LambdaNode(self, node): + node.analyse_declarations(self.env_stack[-1]) + self.visitchildren(node) + return node + + def visit_ClassDefNode(self, node): + self.env_stack.append(node.scope) + self.visitchildren(node) + self.env_stack.pop() + return node + def visit_FuncDefNode(self, node): self.seen_vars_stack.append(set()) lenv = node.create_local_scope(self.env_stack[-1]) diff --cc Cython/Compiler/Symtab.py index 9e30e6c1,5bc9c3c5..d744b11b --- a/Cython/Compiler/Symtab.py +++ b/Cython/Compiler/Symtab.py @@@ -1077,10 -1064,12 +1077,12 @@@ class ModuleScope(Scope) from TypeInference import PyObjectTypeInferer PyObjectTypeInferer().infer_types(self) -class LocalScope(Scope): +class LocalScope(Scope): - def __init__(self, name, outer_scope): - Scope.__init__(self, name, outer_scope, outer_scope) + def __init__(self, name, outer_scope, parent_scope = None): + if parent_scope is None: + parent_scope = outer_scope + Scope.__init__(self, name, outer_scope, parent_scope) def mangle(self, prefix, name): return prefix + name