Fix some minor signature issues

This commit is contained in:
Dave Halter
2019-07-30 23:48:54 +02:00
parent 1fbb69b35a
commit bb852c3e85
2 changed files with 10 additions and 7 deletions

View File

@@ -232,8 +232,8 @@ class AbstractInstanceContext(Context):
return class_context return class_context
def get_signatures(self): def get_signatures(self):
init_funcs = self.py__getattribute__('__call__') call_funcs = self.py__getattribute__('__call__').py__get__(self, self.class_context)
return [sig.bind(self) for sig in init_funcs.get_signatures()] return [s.bind(self) for s in call_funcs.get_signatures()]
def __repr__(self): def __repr__(self):
return "<%s of %s(%s)>" % (self.__class__.__name__, self.class_context, return "<%s of %s(%s)>" % (self.__class__.__name__, self.class_context,
@@ -400,7 +400,7 @@ class BoundMethod(FunctionMixin, ContextWrapper):
return function_execution.infer() return function_execution.infer()
def get_signatures(self): def get_signatures(self):
return [sig.bind(self) for sig in super(BoundMethod, self).get_signatures()] return [sig.bind(self, self) for sig in self._wrapped_context.get_signatures()]
def __repr__(self): def __repr__(self):
return '<%s: %s>' % (self.__class__.__name__, self._wrapped_context) return '<%s: %s>' % (self.__class__.__name__, self._wrapped_context)

View File

@@ -50,17 +50,20 @@ class AbstractSignature(_SignatureMixin):
return param_names[1:] return param_names[1:]
return param_names return param_names
def bind(self, context): def bind(self, context, function_context=None):
raise NotImplementedError raise NotImplementedError
def __repr__(self):
return '<%s: %s, %s>' % (self.__class__.__name__, self.context, self._function_context)
class TreeSignature(AbstractSignature): class TreeSignature(AbstractSignature):
def __init__(self, context, function_context=None, is_bound=False): def __init__(self, context, function_context=None, is_bound=False):
super(TreeSignature, self).__init__(context, is_bound) super(TreeSignature, self).__init__(context, is_bound)
self._function_context = function_context or context self._function_context = function_context or context
def bind(self, context): def bind(self, context, function_context=None):
return TreeSignature(context, self._function_context, is_bound=True) return TreeSignature(context, function_context or self._function_context, is_bound=True)
@property @property
def _annotation(self): def _annotation(self):
@@ -98,7 +101,7 @@ class BuiltinSignature(AbstractSignature):
def _function_context(self): def _function_context(self):
return self.context return self.context
def bind(self, context): def bind(self, context, function_context=None):
assert not self.is_bound assert not self.is_bound
return BuiltinSignature(context, self._return_string, is_bound=True) return BuiltinSignature(context, self._return_string, is_bound=True)