mirror of
https://github.com/davidhalter/jedi.git
synced 2026-05-19 14:59:41 +08:00
Use a different way of executing functions.
This commit is contained in:
+12
-14
@@ -428,26 +428,24 @@ class Evaluator(object):
|
|||||||
context = iterable.SequenceLiteralContext(self, context, atom)
|
context = iterable.SequenceLiteralContext(self, context, atom)
|
||||||
return ContextSet(context)
|
return ContextSet(context)
|
||||||
|
|
||||||
def eval_trailer(self, context, types, trailer):
|
def eval_trailer(self, context, base_contexts, trailer):
|
||||||
trailer_op, node = trailer.children[:2]
|
trailer_op, node = trailer.children[:2]
|
||||||
if node == ')': # `arglist` is optional.
|
if node == ')': # `arglist` is optional.
|
||||||
node = ()
|
node = ()
|
||||||
|
|
||||||
if trailer_op == '[':
|
if trailer_op == '[':
|
||||||
return iterable.py__getitem__(self, context, types, trailer)
|
return iterable.py__getitem__(self, context, base_contexts, trailer)
|
||||||
else:
|
else:
|
||||||
context_set = ContextSet()
|
debug.dbg('eval_trailer: %s in %s', trailer, base_contexts)
|
||||||
for typ in types:
|
if trailer_op == '.':
|
||||||
debug.dbg('eval_trailer: %s in scope %s', trailer, typ)
|
return base_contexts.py__getattribute__(
|
||||||
if trailer_op == '.':
|
name_context=context,
|
||||||
context_set |= typ.py__getattribute__(
|
name_or_str=node
|
||||||
name_context=context,
|
)
|
||||||
name_or_str=node
|
else:
|
||||||
)
|
assert trailer_op == '('
|
||||||
elif trailer_op == '(':
|
arguments = param.TreeArguments(self, context, node, trailer)
|
||||||
arguments = param.TreeArguments(self, context, node, trailer)
|
return base_contexts.execute(arguments)
|
||||||
context_set |= self.execute(typ, arguments)
|
|
||||||
return context_set
|
|
||||||
|
|
||||||
@debug.increase_indent
|
@debug.increase_indent
|
||||||
def execute(self, obj, arguments):
|
def execute(self, obj, arguments):
|
||||||
|
|||||||
@@ -61,9 +61,16 @@ class BuiltinMethod(object):
|
|||||||
self._method = method
|
self._method = method
|
||||||
self._builtin_func = builtin_func
|
self._builtin_func = builtin_func
|
||||||
|
|
||||||
|
# TODO it seems kind of stupid that we have to overwrite 3 methods here.
|
||||||
def py__call__(self, params):
|
def py__call__(self, params):
|
||||||
return self._method(self._builtin_context)
|
return self._method(self._builtin_context)
|
||||||
|
|
||||||
|
def execute(self, *args, **kwargs):
|
||||||
|
return self._builtin_context.evaluator.execute(self, *args, **kwargs)
|
||||||
|
|
||||||
|
def execute_evaluated(self, *args, **kwargs):
|
||||||
|
return self._builtin_context.evaluator.execute_evaluated(self, *args, **kwargs)
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return getattr(self._builtin_func, name)
|
return getattr(self._builtin_func, name)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user