1
0
forked from VimPlug/jedi

Function for evaluating functions with already executed arguments.

This commit is contained in:
Dave Halter
2014-11-23 19:12:25 +01:00
parent 8adfc47297
commit 267016f533
6 changed files with 35 additions and 16 deletions

View File

@@ -97,8 +97,12 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
else:
# Need to execute the __init__ function, because the dynamic param
# searching needs it.
with common.ignored(KeyError):
self.execute_subscope_by_name('__init__', self.var_args)
try:
method = self.get_subscope_by_name('__init__')
except KeyError:
pass
else:
evaluator.execute(method, self.var_args)
# Generated instances are classes that are just generated by self
# (No var_args) used.
self.is_generated = is_generated
@@ -180,16 +184,16 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
sub = self.base.get_subscope_by_name(name)
return get_instance_el(self._evaluator, self, sub, True)
def execute_subscope_by_name(self, name, args=()):
def execute_subscope_by_name(self, name, *args):
method = self.get_subscope_by_name(name)
return self._evaluator.execute(method, args)
return self._evaluator.execute_evaluated(method, *args)
def get_descriptor_return(self, obj):
""" Throws a KeyError if there's no method. """
# Arguments in __get__ descriptors are obj, class.
# `method` is the new parent of the array, don't know if that's good.
args = [obj, obj.base] if isinstance(obj, Instance) else [compiled.none_obj, obj]
return self.execute_subscope_by_name('__get__', args)
return self.execute_subscope_by_name('__get__', *args)
def scope_names_generator(self, position=None):
"""
@@ -211,7 +215,7 @@ class Instance(use_metaclass(CachedMetaClass, Executed)):
indexes = []
try:
return self.execute_subscope_by_name('__getitem__', [indexes])
return self.execute_subscope_by_name('__getitem__', indexes)
except KeyError:
debug.warning('No __getitem__, cannot access the array.')
return []
@@ -494,8 +498,7 @@ class Function(use_metaclass(CachedMetaClass, Wrapper)):
# Create param array.
old_func = Function(self._evaluator, f, is_decorated=True)
arg = iterable.AlreadyEvaluated([old_func])
wrappers = self._evaluator.execute(decorator, (arg,))
wrappers = self._evaluator.execute_evaluated(decorator, old_func)
if not len(wrappers):
debug.warning('no wrappers found %s', self.base_func)
return self