mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-08 06:44:46 +08:00
Make CompiledValue lazy
This definitely reduces debug output and it might be slightly faster, because some values are never asked for
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
from jedi._compatibility import unicode
|
from jedi._compatibility import unicode
|
||||||
from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \
|
from jedi.evaluate.compiled.context import CompiledObject, CompiledName, \
|
||||||
CompiledObjectFilter, CompiledContextName, create_from_access_path
|
CompiledObjectFilter, CompiledContextName, create_from_access_path
|
||||||
from jedi.evaluate.base_context import ContextWrapper
|
from jedi.evaluate.base_context import ContextWrapper, LazyContextWrapper
|
||||||
|
|
||||||
|
|
||||||
def builtin_from_name(evaluator, string):
|
def builtin_from_name(evaluator, string):
|
||||||
@@ -16,9 +16,9 @@ def builtin_from_name(evaluator, string):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
class CompiledValue(ContextWrapper):
|
class CompiledValue(LazyContextWrapper):
|
||||||
def __init__(self, instance, compiled_obj):
|
def __init__(self, compiled_obj):
|
||||||
super(CompiledValue, self).__init__(instance)
|
self.evaluator = compiled_obj.evaluator
|
||||||
self._compiled_obj = compiled_obj
|
self._compiled_obj = compiled_obj
|
||||||
|
|
||||||
def __getattribute__(self, name):
|
def __getattribute__(self, name):
|
||||||
@@ -27,6 +27,11 @@ class CompiledValue(ContextWrapper):
|
|||||||
return getattr(self._compiled_obj, name)
|
return getattr(self._compiled_obj, name)
|
||||||
return super(CompiledValue, self).__getattribute__(name)
|
return super(CompiledValue, self).__getattribute__(name)
|
||||||
|
|
||||||
|
def _get_wrapped_context(self):
|
||||||
|
instance, = builtin_from_name(
|
||||||
|
self.evaluator, self._compiled_obj.name.string_name).execute_evaluated()
|
||||||
|
return instance
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return '<%s: %s>' % (self.__class__.__name__, self._compiled_obj)
|
return '<%s: %s>' % (self.__class__.__name__, self._compiled_obj)
|
||||||
|
|
||||||
@@ -41,8 +46,7 @@ def create_simple_object(evaluator, obj):
|
|||||||
evaluator,
|
evaluator,
|
||||||
evaluator.compiled_subprocess.create_simple_object(obj)
|
evaluator.compiled_subprocess.create_simple_object(obj)
|
||||||
)
|
)
|
||||||
instance, = builtin_from_name(evaluator, compiled_obj.name.string_name).execute_evaluated()
|
return CompiledValue(compiled_obj)
|
||||||
return CompiledValue(instance, compiled_obj)
|
|
||||||
|
|
||||||
|
|
||||||
def get_string_context_set(evaluator):
|
def get_string_context_set(evaluator):
|
||||||
|
|||||||
Reference in New Issue
Block a user