Files
swift-mirror/test/decl/ext/ordering.swift
2022-08-26 03:26:32 +03:00

188 lines
2.2 KiB
Swift

// RUN: %target-typecheck-verify-swift
/// First try different permutations.
struct Outer1 { }
extension Outer1.Inner.Inner { }
extension Outer1.Inner {
struct Inner { }
}
extension Outer1 {
struct Inner { }
}
///
struct Outer1A { }
extension Outer1A.Inner {
struct Inner { }
}
extension Outer1A.Inner.Inner { }
extension Outer1A {
struct Inner { }
}
///
struct Outer1B { }
extension Outer1B.Inner {
struct Inner { }
}
extension Outer1B {
struct Inner { }
}
extension Outer1B.Inner.Inner { }
///
struct Outer1C { }
extension Outer1C {
struct Inner { }
}
extension Outer1C.Inner {
struct Inner { }
}
extension Outer1C.Inner.Inner { }
///
struct Outer1D { }
extension Outer1D {
struct Inner { }
}
extension Outer1D.Inner.Inner { }
extension Outer1D.Inner {
struct Inner { }
}
/// Now try some generics.
struct Outer2 { }
extension Outer2.Inner.Inner { }
extension Outer2.Inner {
struct Inner { }
}
extension Outer2 {
struct Inner<T> { }
}
///
struct Outer3<T> { }
extension Outer3.Inner { }
extension Outer3 {
struct Inner<U> { }
}
/// Extending a typealias inside an extension.
struct Outer4 { }
extension Outer4.Inner { }
struct Outer4Inner { }
extension Outer4 {
typealias Inner = Outer4Inner
}
/// Subclassing.
enum Outer5 {}
enum OtherOuter5 {}
extension Outer5.Inner {}
extension Outer5 {
class Inner : OtherOuter5.Super {}
}
extension OtherOuter5 {
class Super {}
}
/// https://github.com/apple/swift/issues/48550
enum Outer5A {}
enum OtherOuter5A {}
extension Outer5A {
class Inner : OtherOuter5A.Super {}
}
extension Outer5A.Inner {}
extension OtherOuter5A {
class Super {}
}
///
enum Outer5B {}
enum OtherOuter5B {}
extension Outer5B {
class Inner : OtherOuter5B.Super {}
}
extension OtherOuter5B {
class Super {}
}
extension Outer5B.Inner {}
///
enum Outer5C {}
enum OtherOuter5C {}
extension OtherOuter5C {
class Super {}
}
extension Outer5C {
class Inner : OtherOuter5C.Super {}
}
extension Outer5C.Inner {}
///
enum Outer5D {}
enum OtherOuter5D {}
extension OtherOuter5D {
class Super {}
}
extension Outer5D.Inner {}
extension Outer5D {
class Inner : OtherOuter5D.Super {}
}