Commit af67b788 authored by Robert Bradshaw's avatar Robert Bradshaw

Fix #250, Traceback method name is wrong for exceptions caught in methods

parent ee9a0730
......@@ -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)
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:
......@@ -2730,7 +2730,7 @@ class CClassDefNode(ClassDefNode):
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
......
......@@ -699,6 +699,12 @@ property NAME:
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())
lenv = node.create_local_scope(self.env_stack[-1])
......
......@@ -1066,8 +1066,10 @@ class ModuleScope(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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment