Skip to content

Commit 4cdfc82

Browse files
author
Sylvain Thénault
committed
distinguish between local name on object class name, add a fallback to local name in case member.__name__ is unset, as reported by Derek Harland on python-project (june 2009)
1 parent 110acf8 commit 4cdfc82

File tree

2 files changed

+17
-15
lines changed

2 files changed

+17
-15
lines changed

builder.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,13 +173,13 @@ def object_build(self, node, obj):
173173
if member.func_code.co_filename != getattr(self._module, '__file__', None):
174174
attach_dummy_node(node, name, member)
175175
continue
176-
object_build_function(node, member)
176+
object_build_function(node, member, name)
177177
elif isbuiltin(member):
178178
# verify this is not an imported member
179179
if self._member_module(member) != self._module.__name__:
180180
imported_member(node, member, name)
181181
continue
182-
object_build_methoddescriptor(node, member)
182+
object_build_methoddescriptor(node, member, name)
183183
elif isclass(member):
184184
# verify this is not an imported class
185185
if self._member_module(member) != self._module.__name__:
@@ -190,12 +190,12 @@ def object_build(self, node, obj):
190190
if not class_node in node.locals.get(name, ()):
191191
node.add_local_node(class_node, name)
192192
else:
193-
class_node = object_build_class(node, member)
193+
class_node = object_build_class(node, member, name)
194194
# recursion
195195
self.object_build(class_node, member)
196196
elif ismethoddescriptor(member):
197197
assert isinstance(member, object)
198-
object_build_methoddescriptor(node, member)
198+
object_build_methoddescriptor(node, member, name)
199199
elif isdatadescriptor(member):
200200
assert isinstance(member, object)
201201
object_build_datadescriptor(node, member, name)

raw_building.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -124,42 +124,44 @@ def register_arguments(func, args=None):
124124
register_arguments(func, arg.elts)
125125

126126

127-
def object_build_class(node, member):
127+
def object_build_class(node, member, localname):
128128
"""create astng for a living class object"""
129129
basenames = [base.__name__ for base in member.__bases__]
130-
return _base_class_object_build(node, member, basenames)
130+
return _base_class_object_build(node, member, basenames,
131+
localname=localname)
131132

132-
def object_build_function(node, member):
133+
def object_build_function(node, member, localname):
133134
"""create astng for a living function object"""
134135
args, varargs, varkw, defaults = getargspec(member)
135136
if varargs is not None:
136137
args.append(varargs)
137138
if varkw is not None:
138139
args.append(varkw)
139-
func = build_function(member.__name__, args, defaults,
140+
func = build_function(member.__name__ or localname, args, defaults,
140141
member.func_code.co_flags, member.__doc__)
141-
node.add_local_node(func)
142+
node.add_local_node(func, localname)
142143

143144
def object_build_datadescriptor(node, member, name):
144145
"""create astng for a living data descriptor object"""
145146
return _base_class_object_build(node, member, [], name)
146147

147-
def object_build_methoddescriptor(node, member):
148+
def object_build_methoddescriptor(node, member, localname):
148149
"""create astng for a living method descriptor object"""
149150
# FIXME get arguments ?
150-
func = build_function(member.__name__, doc=member.__doc__)
151+
func = build_function(member.__name__ or localname, doc=member.__doc__)
151152
# set node's arguments to None to notice that we have no information, not
152153
# and empty argument list
153154
func.args.args = None
154-
node.add_local_node(func)
155+
node.add_local_node(func, localname)
155156

156-
def _base_class_object_build(node, member, basenames, name=None):
157+
def _base_class_object_build(node, member, basenames, name=None, localname=None):
157158
"""create astng for a living class object, with a given set of base names
158159
(e.g. ancestors)
159160
"""
160-
klass = build_class(name or member.__name__, basenames, member.__doc__)
161+
klass = build_class(name or member.__name__ or localname, basenames,
162+
member.__doc__)
161163
klass._newstyle = isinstance(member, type)
162-
node.add_local_node(klass)
164+
node.add_local_node(klass, localname)
163165
try:
164166
# limit the instantiation trick since it's too dangerous
165167
# (such as infinite test execution...)

0 commit comments

Comments
 (0)