Fix bug in handling of environment directives.
authorRobert Bradshaw <robertwb@math.washington.edu>
Sun, 22 Nov 2009 00:28:04 +0000 (16:28 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Sun, 22 Nov 2009 00:28:04 +0000 (16:28 -0800)
Cython/Compiler/Nodes.py
Cython/Compiler/ParseTreeTransforms.py

index 8ee5b6c6df071b0eb8ab6f055a064f0897850237..1f9f3aba381ad17da628ec973174776b1642c03a 100644 (file)
@@ -1379,6 +1379,7 @@ class CFuncDefNode(FuncDefNode):
             if not env.is_module_scope or Options.lookup_module_cpdef:
                 self.override = OverrideCheckNode(self.pos, py_func = self.py_func)
                 self.body = StatListNode(self.pos, stats=[self.override, self.body])
+        self.create_local_scope(env)
     
     def call_self_node(self, omit_optional_args=0, is_module_scope=0):
         import ExprNodes
@@ -1706,6 +1707,7 @@ class DefNode(FuncDefNode):
         self.declare_pyfunction(env)
         self.analyse_signature(env)
         self.return_type = self.entry.signature.return_type()
+        self.create_local_scope(env)
 
     def analyse_signature(self, env):
         any_type_tests_needed = 0
index 7c6c546be16b4a22cbd8eea5d719159a7a103231..c65a30b5c92a97127b3f816c785da418ae453ca8 100644 (file)
@@ -708,7 +708,7 @@ property NAME:
         
     def visit_FuncDefNode(self, node):
         self.seen_vars_stack.append(set())
-        lenv = node.create_local_scope(self.env_stack[-1])
+        lenv = node.local_scope
         node.body.analyse_control_flow(lenv) # this will be totally refactored
         node.declare_arguments(lenv)
         for var, type_node in node.directive_locals.items():