diff options
| author | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2009-07-29 13:45:04 +0200 |
|---|---|---|
| committer | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2009-07-29 13:45:04 +0200 |
| commit | 4cdfc82457a0962c2dcb1ebc2a1129d4e4863170 (patch) | |
| tree | 0aff8c96c55736fedf22d32c75b0118ac10a33b0 /raw_building.py | |
| parent | 110acf80d6f1c199ebcc7ebe57c61d8fde312dcb (diff) | |
| download | astroid-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.py | 24 |
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...) |
