| Index: third_party/logilab/astng/raw_building.py
 | 
| diff --git a/third_party/logilab/astroid/raw_building.py b/third_party/logilab/astng/raw_building.py
 | 
| similarity index 76%
 | 
| rename from third_party/logilab/astroid/raw_building.py
 | 
| rename to third_party/logilab/astng/raw_building.py
 | 
| index e245f912b913692ef49b4ed442bf8ae8f965159f..395c26ec8e23e7eb5ff314e5f98f38294335abb0 100644
 | 
| --- a/third_party/logilab/astroid/raw_building.py
 | 
| +++ b/third_party/logilab/astng/raw_building.py
 | 
| @@ -1,21 +1,23 @@
 | 
| -# copyright 2003-2013 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
 | 
| +# copyright 2003-2011 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
 | 
|  # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
 | 
| +# copyright 2003-2010 Sylvain Thenault, all rights reserved.
 | 
| +# contact mailto:thenault@gmail.com
 | 
|  #
 | 
| -# This file is part of astroid.
 | 
| +# This file is part of logilab-astng.
 | 
|  #
 | 
| -# astroid is free software: you can redistribute it and/or modify it
 | 
| +# logilab-astng is free software: you can redistribute it and/or modify it
 | 
|  # under the terms of the GNU Lesser General Public License as published by the
 | 
|  # Free Software Foundation, either version 2.1 of the License, or (at your
 | 
|  # option) any later version.
 | 
|  #
 | 
| -# astroid is distributed in the hope that it will be useful, but
 | 
| +# logilab-astng is distributed in the hope that it will be useful, but
 | 
|  # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | 
|  # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 | 
|  # for more details.
 | 
|  #
 | 
|  # You should have received a copy of the GNU Lesser General Public License along
 | 
| -# with astroid. If not, see <http://www.gnu.org/licenses/>.
 | 
| -"""this module contains a set of functions to create astroid trees from scratch
 | 
| +# with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
 | 
| +"""this module contains a set of functions to create astng trees from scratch
 | 
|  (build_* functions) or from living object (object_build_* functions)
 | 
|  """
 | 
|  
 | 
| @@ -24,25 +26,18 @@ __docformat__ = "restructuredtext en"
 | 
|  import sys
 | 
|  from os.path import abspath
 | 
|  from inspect import (getargspec, isdatadescriptor, isfunction, ismethod,
 | 
| -                     ismethoddescriptor, isclass, isbuiltin, ismodule)
 | 
| +                     ismethoddescriptor, isclass, isbuiltin)
 | 
|  
 | 
| -from astroid.node_classes import CONST_CLS
 | 
| -from astroid.nodes import (Module, Class, Const, const_factory, From,
 | 
| -                           Function, EmptyNode, Name, Arguments)
 | 
| -from astroid.bases import BUILTINS, Generator
 | 
| -from astroid.manager import AstroidManager
 | 
| -MANAGER = AstroidManager()
 | 
| +from logilab.astng import BUILTINS_MODULE
 | 
| +from logilab.astng.node_classes import CONST_CLS
 | 
| +from logilab.astng.nodes import (Module, Class, Const, const_factory, From,
 | 
| +    Function, EmptyNode, Name, Arguments, Dict, List, Set, Tuple)
 | 
| +from logilab.astng.bases import Generator
 | 
| +from logilab.astng.manager import ASTNGManager
 | 
| +MANAGER = ASTNGManager()
 | 
|  
 | 
|  _CONSTANTS = tuple(CONST_CLS) # the keys of CONST_CLS eg python builtin types
 | 
|  
 | 
| -def _io_discrepancy(member):
 | 
| -    # _io module names itself `io`: http://bugs.python.org/issue18602
 | 
| -    member_self = getattr(member, '__self__', None)
 | 
| -    return (member_self and
 | 
| -            ismodule(member_self) and
 | 
| -            member_self.__name__ == '_io' and
 | 
| -            member.__module__ == 'io')
 | 
| -
 | 
|  def _attach_local_node(parent, node, name):
 | 
|      node.name = name # needed by add_local_node
 | 
|      parent.add_local_node(node)
 | 
| @@ -75,14 +70,14 @@ def attach_import_node(node, modname, membername):
 | 
|  
 | 
|  
 | 
|  def build_module(name, doc=None):
 | 
| -    """create and initialize a astroid Module node"""
 | 
| +    """create and initialize a astng Module node"""
 | 
|      node = Module(name, doc, pure_python=False)
 | 
|      node.package = False
 | 
|      node.parent = None
 | 
|      return node
 | 
|  
 | 
|  def build_class(name, basenames=(), doc=None):
 | 
| -    """create and initialize a astroid Class node"""
 | 
| +    """create and initialize a astng Class node"""
 | 
|      node = Class(name, doc)
 | 
|      for base in basenames:
 | 
|          basenode = Name()
 | 
| @@ -92,7 +87,7 @@ def build_class(name, basenames=(), doc=None):
 | 
|      return node
 | 
|  
 | 
|  def build_function(name, args=None, defaults=None, flag=0, doc=None):
 | 
| -    """create and initialize a astroid Function node"""
 | 
| +    """create and initialize a astng Function node"""
 | 
|      args, defaults = args or [], defaults or []
 | 
|      # first argument is now a list of decorators
 | 
|      func = Function(name, doc)
 | 
| @@ -115,7 +110,7 @@ def build_function(name, args=None, defaults=None, flag=0, doc=None):
 | 
|  
 | 
|  
 | 
|  def build_from_import(fromname, names):
 | 
| -    """create and initialize an astroid From import statement"""
 | 
| +    """create and initialize an astng From import statement"""
 | 
|      return From(fromname, [(name, None) for name in names])
 | 
|  
 | 
|  def register_arguments(func, args=None):
 | 
| @@ -137,13 +132,13 @@ def register_arguments(func, args=None):
 | 
|              register_arguments(func, arg.elts)
 | 
|  
 | 
|  def object_build_class(node, member, localname):
 | 
| -    """create astroid for a living class object"""
 | 
| +    """create astng for a living class object"""
 | 
|      basenames = [base.__name__ for base in member.__bases__]
 | 
|      return _base_class_object_build(node, member, basenames,
 | 
|                                      localname=localname)
 | 
|  
 | 
|  def object_build_function(node, member, localname):
 | 
| -    """create astroid for a living function object"""
 | 
| +    """create astng for a living function object"""
 | 
|      args, varargs, varkw, defaults = getargspec(member)
 | 
|      if varargs is not None:
 | 
|          args.append(varargs)
 | 
| @@ -154,11 +149,11 @@ def object_build_function(node, member, localname):
 | 
|      node.add_local_node(func, localname)
 | 
|  
 | 
|  def object_build_datadescriptor(node, member, name):
 | 
| -    """create astroid for a living data descriptor object"""
 | 
| +    """create astng for a living data descriptor object"""
 | 
|      return _base_class_object_build(node, member, [], name)
 | 
|  
 | 
|  def object_build_methoddescriptor(node, member, localname):
 | 
| -    """create astroid for a living method descriptor object"""
 | 
| +    """create astng for a living method descriptor object"""
 | 
|      # FIXME get arguments ?
 | 
|      func = build_function(getattr(member, '__name__', None) or localname,
 | 
|                            doc=member.__doc__)
 | 
| @@ -168,7 +163,7 @@ def object_build_methoddescriptor(node, member, localname):
 | 
|      node.add_local_node(func, localname)
 | 
|  
 | 
|  def _base_class_object_build(node, member, basenames, name=None, localname=None):
 | 
| -    """create astroid for a living class object, with a given set of base names
 | 
| +    """create astng for a living class object, with a given set of base names
 | 
|      (e.g. ancestors)
 | 
|      """
 | 
|      klass = build_class(name or getattr(member, '__name__', None) or localname,
 | 
| @@ -205,28 +200,23 @@ class InspectBuilder(object):
 | 
|      Function and Class nodes and some others as guessed.
 | 
|      """
 | 
|  
 | 
| -    # astroid from living objects ###############################################
 | 
| +    # astng from living objects ###############################################
 | 
|  
 | 
|      def __init__(self):
 | 
|          self._done = {}
 | 
|          self._module = None
 | 
|  
 | 
|      def inspect_build(self, module, modname=None, path=None):
 | 
| -        """build astroid from a living module (i.e. using inspect)
 | 
| +        """build astng from a living module (i.e. using inspect)
 | 
|          this is used when there is no python source code available (either
 | 
|          because it's a built-in module or because the .py is not available)
 | 
|          """
 | 
|          self._module = module
 | 
|          if modname is None:
 | 
|              modname = module.__name__
 | 
| -        try:
 | 
| -            node = build_module(modname, module.__doc__)
 | 
| -        except AttributeError:
 | 
| -            # in jython, java modules have no __doc__ (see #109562)
 | 
| -            node = build_module(modname)
 | 
| +        node = build_module(modname, module.__doc__)
 | 
|          node.file = node.path = path and abspath(path) or path
 | 
| -        node.name = modname
 | 
| -        MANAGER.cache_module(node)
 | 
| +        MANAGER.astng_cache[modname] = node
 | 
|          node.package = hasattr(module, '__path__')
 | 
|          self._done = {}
 | 
|          self.object_build(node, module)
 | 
| @@ -250,17 +240,12 @@ class InspectBuilder(object):
 | 
|                  member = member.im_func
 | 
|              if isfunction(member):
 | 
|                  # verify this is not an imported function
 | 
| -                filename = getattr(member.func_code, 'co_filename', None)
 | 
| -                if filename is None:
 | 
| -                    assert isinstance(member, object)
 | 
| -                    object_build_methoddescriptor(node, member, name)
 | 
| -                elif filename != getattr(self._module, '__file__', None):
 | 
| +                if member.func_code.co_filename != getattr(self._module, '__file__', None):
 | 
|                      attach_dummy_node(node, name, member)
 | 
| -                else:
 | 
| -                    object_build_function(node, member, name)
 | 
| +                    continue
 | 
| +                object_build_function(node, member, name)
 | 
|              elif isbuiltin(member):
 | 
| -                if (not _io_discrepancy(member) and
 | 
| -                        self.imported_member(node, member, name)):
 | 
| +                if self.imported_member(node, member, name):
 | 
|                      #if obj is object:
 | 
|                      #    print 'skippp', obj, name, member
 | 
|                      continue
 | 
| @@ -284,7 +269,7 @@ class InspectBuilder(object):
 | 
|              elif isdatadescriptor(member):
 | 
|                  assert isinstance(member, object)
 | 
|                  object_build_datadescriptor(node, member, name)
 | 
| -            elif type(member) in _CONSTANTS:
 | 
| +            elif isinstance(member, _CONSTANTS):
 | 
|                  attach_const_node(node, name, member)
 | 
|              else:
 | 
|                  # create an empty node so that the name is actually defined
 | 
| @@ -299,7 +284,7 @@ class InspectBuilder(object):
 | 
|              modname = getattr(member, '__module__', None)
 | 
|          except:
 | 
|              # XXX use logging
 | 
| -            print 'unexpected error while building astroid from living object'
 | 
| +            print 'unexpected error while building astng from living object'
 | 
|              import traceback
 | 
|              traceback.print_exc()
 | 
|              modname = None
 | 
| @@ -308,7 +293,7 @@ class InspectBuilder(object):
 | 
|                  # Python 2.5.1 (r251:54863, Sep  1 2010, 22:03:14)
 | 
|                  # >>> print object.__new__.__module__
 | 
|                  # None
 | 
| -                modname = BUILTINS
 | 
| +                modname = BUILTINS_MODULE
 | 
|              else:
 | 
|                  attach_dummy_node(node, name, member)
 | 
|                  return True
 | 
| @@ -325,28 +310,28 @@ class InspectBuilder(object):
 | 
|          return False
 | 
|  
 | 
|  
 | 
| -### astroid bootstrapping ######################################################
 | 
| -Astroid_BUILDER = InspectBuilder()
 | 
| +### astng boot strapping ################################################### ###
 | 
|  
 | 
|  _CONST_PROXY = {}
 | 
| -def astroid_bootstrapping():
 | 
| -    """astroid boot strapping the builtins module"""
 | 
| +def astng_boot_strapping():
 | 
| +    """astng boot strapping the builtins module"""
 | 
|      # this boot strapping is necessary since we need the Const nodes to
 | 
|      # inspect_build builtins, and then we can proxy Const
 | 
| +    builder = InspectBuilder()
 | 
|      from logilab.common.compat import builtins
 | 
| -    astroid_builtin = Astroid_BUILDER.inspect_build(builtins)
 | 
| +    astng_builtin = builder.inspect_build(builtins)
 | 
|      for cls, node_cls in CONST_CLS.items():
 | 
|          if cls is type(None):
 | 
|              proxy = build_class('NoneType')
 | 
| -            proxy.parent = astroid_builtin
 | 
| +            proxy.parent = astng_builtin
 | 
|          else:
 | 
| -            proxy = astroid_builtin.getattr(cls.__name__)[0]
 | 
| +            proxy = astng_builtin.getattr(cls.__name__)[0] # XXX
 | 
|          if cls in (dict, list, set, tuple):
 | 
|              node_cls._proxied = proxy
 | 
|          else:
 | 
|              _CONST_PROXY[cls] = proxy
 | 
|  
 | 
| -astroid_bootstrapping()
 | 
| +astng_boot_strapping()
 | 
|  
 | 
|  # TODO : find a nicer way to handle this situation;
 | 
|  # However __proxied introduced an
 | 
| @@ -355,7 +340,6 @@ def _set_proxied(const):
 | 
|      return _CONST_PROXY[const.value.__class__]
 | 
|  Const._proxied = property(_set_proxied)
 | 
|  
 | 
| -from types import GeneratorType
 | 
| -Generator._proxied = Class(GeneratorType.__name__, GeneratorType.__doc__)
 | 
| -Astroid_BUILDER.object_build(Generator._proxied, GeneratorType)
 | 
| +# FIXME : is it alright that Generator._proxied is not a astng node?
 | 
| +Generator._proxied = MANAGER.infer_astng_from_something(type(a for a in ()))
 | 
|  
 | 
| 
 |