Files
swift-mirror/test/decl/ext/ordering.swift
Doug Gregor d07fa5ab69 Switch many callers of ClassDecl::getSuperclass() to ClassDecl::getSuperclassDecl().
ClassDecl::getSuperclass() produces a complete interface type describing the
superclass of a class, including any generic arguments (for a generic type).
Most callers only need the referenced ClassDecl, which is (now) cheaper
to compute: switch those callers over to ClassDecl::getSuperclassDecl().

Fixes an existing test for SR-5993.
2018-07-31 10:14:44 -07:00

188 lines
2.1 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 {}
}
/// SR-5993
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 {}
}