diff --git a/jedi/evaluate/compiled/__init__.py b/jedi/evaluate/compiled/__init__.py index 19f6e404..b3538846 100644 --- a/jedi/evaluate/compiled/__init__.py +++ b/jedi/evaluate/compiled/__init__.py @@ -74,7 +74,7 @@ class PyObject(Base): elif t == 'def': for name in self._parse_function_doc()[1].split(): try: - yield PyObject(getattr(_builtins, name), builtin, True) + yield create(getattr(_builtins, name), builtin, True) except AttributeError: pass @@ -99,7 +99,7 @@ class PyName(object): def parent(self): try: # this has a builtin_function_or_method - return PyObject(getattr(self._obj.obj, self._name), self._obj) + return create(getattr(self._obj.obj, self._name), self._obj) except AttributeError: # happens e.g. in properties of # PyQt4.QtGui.QStyleOptionComboBox.currentText diff --git a/jedi/evaluate/compiled/fake.py b/jedi/evaluate/compiled/fake.py index f2a8e442..61504159 100644 --- a/jedi/evaluate/compiled/fake.py +++ b/jedi/evaluate/compiled/fake.py @@ -65,6 +65,8 @@ def _load_fakes(module_name): def _load_module(module): module_name = module.__name__ + if module_name == '__builtin__' and not is_py3k: + module_name = 'builtins' try: return modules[module_name] except KeyError: @@ -74,7 +76,7 @@ def _load_module(module): source = f.read() except IOError: return {} - module = Parser(source).module + module = Parser(source, module_name).module modules[module_name] = module return module @@ -82,7 +84,7 @@ def _load_module(module): def get_faked(module, obj): def from_scope(scope, obj): for s in scope.subscopes: - if s.name == obj.name: + if str(s.name) == obj.__name__: return s mod = _load_module(module) diff --git a/test/test_compiled.py b/test/test_compiled.py index 930c27e4..203c76c3 100644 --- a/test/test_compiled.py +++ b/test/test_compiled.py @@ -1,4 +1,5 @@ from jedi._compatibility import builtins +from jedi.parser.representation import Function from jedi.evaluate import compiled from jedi.evaluate import Evaluator @@ -13,3 +14,7 @@ def test_simple(): assert len(objs) == 1 assert objs[0].obj is str assert objs[0].instantiated is True + + +def test_fake_loading(): + assert isinstance(compiled.create(reversed), Function)