summaryrefslogtreecommitdiff
path: root/raw_building.py
diff options
context:
space:
mode:
authorSylvain Thénault <sylvain.thenault@logilab.fr>2009-07-29 13:45:04 +0200
committerSylvain Thénault <sylvain.thenault@logilab.fr>2009-07-29 13:45:04 +0200
commit4cdfc82457a0962c2dcb1ebc2a1129d4e4863170 (patch)
tree0aff8c96c55736fedf22d32c75b0118ac10a33b0 /raw_building.py
parent110acf80d6f1c199ebcc7ebe57c61d8fde312dcb (diff)
downloadastroid-git-4cdfc82457a0962c2dcb1ebc2a1129d4e4863170.tar.gz
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)
Diffstat (limited to 'raw_building.py')
-rw-r--r--raw_building.py24
1 files changed, 13 insertions, 11 deletions
diff --git a/raw_building.py b/raw_building.py
index 41c1e7fc..103ce092 100644
--- a/raw_building.py
+++ b/raw_building.py
@@ -124,42 +124,44 @@ def register_arguments(func, args=None):
register_arguments(func, arg.elts)
-def object_build_class(node, member):
+def object_build_class(node, member, localname):
"""create astng for a living class object"""
basenames = [base.__name__ for base in member.__bases__]
- return _base_class_object_build(node, member, basenames)
+ return _base_class_object_build(node, member, basenames,
+ localname=localname)
-def object_build_function(node, member):
+def object_build_function(node, member, localname):
"""create astng for a living function object"""
args, varargs, varkw, defaults = getargspec(member)
if varargs is not None:
args.append(varargs)
if varkw is not None:
args.append(varkw)
- func = build_function(member.__name__, args, defaults,
+ func = build_function(member.__name__ or localname, args, defaults,
member.func_code.co_flags, member.__doc__)
- node.add_local_node(func)
+ node.add_local_node(func, localname)
def object_build_datadescriptor(node, member, name):
"""create astng for a living data descriptor object"""
return _base_class_object_build(node, member, [], name)
-def object_build_methoddescriptor(node, member):
+def object_build_methoddescriptor(node, member, localname):
"""create astng for a living method descriptor object"""
# FIXME get arguments ?
- func = build_function(member.__name__, doc=member.__doc__)
+ func = build_function(member.__name__ or localname, doc=member.__doc__)
# set node's arguments to None to notice that we have no information, not
# and empty argument list
func.args.args = None
- node.add_local_node(func)
+ node.add_local_node(func, localname)
-def _base_class_object_build(node, member, basenames, name=None):
+def _base_class_object_build(node, member, basenames, name=None, localname=None):
"""create astng for a living class object, with a given set of base names
(e.g. ancestors)
"""
- klass = build_class(name or member.__name__, basenames, member.__doc__)
+ klass = build_class(name or member.__name__ or localname, basenames,
+ member.__doc__)
klass._newstyle = isinstance(member, type)
- node.add_local_node(klass)
+ node.add_local_node(klass, localname)
try:
# limit the instantiation trick since it's too dangerous
# (such as infinite test execution...)