return NoneTyp() else: if is_subtype(t, self.s): return t elif is_subtype(self.s, t): # See also above comment. return self.s else: return NoneTyp() else: return self.default(self.s) Typ visit_callable(self, Callable t): if isinstance(self.s, Callable) and is_similar_callables( t, (Callable)self.s): return combine_similar_callables(t, (Callable)self.s, self.basic) else: return self.default(self.s) Typ visit_tuple_type(self, TupleType t): if isinstance(self.s, TupleType) and (((TupleType)self.s).length() == t.length()): Typ[] items = [] for i in range(t.length()): items.append(self.meet(t.items[i], ((TupleType)self.s).items[i])) return TupleType(items) else: return self.default(self.s) def visit_intersection(self, t):
def visit_callable(self, t): if isinstance(self.s, Callable) and is_similar_callables( t, self.s): return combine_similar_callables(t, self.s, self.basic) else: return self.default(self.s)