def is_subtype(left: RType, right: RType) -> bool:
    if is_object_rprimitive(right):
        return True
    elif isinstance(right, RUnion):
        if isinstance(left, RUnion):
            for left_item in left.items:
                if not any(
                        is_subtype(left_item, right_item)
                        for right_item in right.items):
                    return False
            return True
        else:
            return any(is_subtype(left, item) for item in right.items)
    return left.accept(SubtypeVisitor(right))
Exemple #2
0
def is_same_type(a: RType, b: RType) -> bool:
    return a.accept(SameTypeVisitor(b))
def is_runtime_subtype(left: RType, right: RType) -> bool:
    return left.accept(RTSubtypeVisitor(right))