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)
+ lenv = GeneratorLocalScope(name = self.entry.name, outer_scope = genv, parent_scope = env)
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:
buffer_defaults = buffer_defaults)
if home_scope is not env and self.visibility == 'extern':
env.add_imported_entry(self.class_name, self.entry, pos)
- scope = self.entry.type.scope
+ self.scope = scope = self.entry.type.scope
if scope is not None:
scope.directives = env.directives
self.visitchildren(node)
self.seen_vars_stack.pop()
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())
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