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): ...@@ -1019,12 +1019,12 @@ class FuncDefNode(StatNode, BlockNode):
def create_local_scope(self, env): def create_local_scope(self, env):
genv = env genv = env
while env.is_py_class_scope or env.is_c_class_scope: while genv.is_py_class_scope or genv.is_c_class_scope:
env = env.outer_scope genv = env.outer_scope
if self.needs_closure: 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: 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 lenv.return_type = self.return_type
type = self.entry.type type = self.entry.type
if type.is_cfunction: if type.is_cfunction:
...@@ -2730,7 +2730,7 @@ class CClassDefNode(ClassDefNode): ...@@ -2730,7 +2730,7 @@ class CClassDefNode(ClassDefNode):
buffer_defaults = buffer_defaults) buffer_defaults = buffer_defaults)
if home_scope is not env and self.visibility == 'extern': if home_scope is not env and self.visibility == 'extern':
env.add_imported_entry(self.class_name, self.entry, pos) 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: if scope is not None:
scope.directives = env.directives scope.directives = env.directives
......
...@@ -699,6 +699,12 @@ property NAME: ...@@ -699,6 +699,12 @@ property NAME:
self.seen_vars_stack.pop() self.seen_vars_stack.pop()
return 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): def visit_FuncDefNode(self, node):
self.seen_vars_stack.append(set()) self.seen_vars_stack.append(set())
lenv = node.create_local_scope(self.env_stack[-1]) lenv = node.create_local_scope(self.env_stack[-1])
......
...@@ -1066,8 +1066,10 @@ class ModuleScope(Scope): ...@@ -1066,8 +1066,10 @@ class ModuleScope(Scope):
class LocalScope(Scope): class LocalScope(Scope):
def __init__(self, name, outer_scope): def __init__(self, name, outer_scope, parent_scope = None):
Scope.__init__(self, name, outer_scope, outer_scope) if parent_scope is None:
parent_scope = outer_scope
Scope.__init__(self, name, outer_scope, parent_scope)
def mangle(self, prefix, name): def mangle(self, prefix, name):
return 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