Files
swift-mirror/test/Inputs/resilient_objc_class.swift
Slava Pestov 68c07620cd IRGen: Emit Objective-C resilient class stubs if experimental flag is on
Non-generic classes with resilient ancestry do not have statically-emitted
metadata, so we can now emit an Objective-C resilient class stub instead.

Also, when emitting an Objective-C category, reference the class stub if
the class has resilient ancestry; previously this case would hit an assert.

Note that class stubs always start with a zero word, with the address point
pointing immediately after. This works around a linker issue, where the
linker tries to coalesce categories and gets confused upon encountering a
class stub.
2019-03-26 18:53:09 -04:00

73 lines
1.7 KiB
Swift

import resilient_struct
import Foundation
// Resilient base class
open class ResilientNSObjectOutsideParent: NSObject {
open var property: String = "ResilientNSObjectOutsideParent.property"
public final var finalProperty: String = "ResilientNSObjectOutsideParent.finalProperty"
open class var classProperty: String {
return "ResilientNSObjectOutsideParent.classProperty"
}
override public init() {
print("ResilientNSObjectOutsideParent.init()")
}
open func method() {
print("ResilientNSObjectOutsideParent.method()")
}
open class func classMethod() {
print("ResilientNSObjectOutsideParent.classMethod()")
}
open func getValue() -> Int {
return 0
}
}
// Resilient generic base class
open class ResilientGenericNSObjectOutsideParent<A>: NSObject {
open var property: A
public init(property: A) {
self.property = property
print("ResilientGenericNSObjectOutsideParent.init()")
}
open func method() {
print("ResilientGenericNSObjectOutsideParent.method()")
}
open class func classMethod() {
print("ResilientGenericNSObjectOutsideParent.classMethod()")
}
}
// Resilient subclass of generic class
open class ResilientConcreteNSObjectOutsideChild : ResilientGenericNSObjectOutsideParent<String> {
public override init(property: String) {
print("ResilientConcreteNSObjectOutsideChild.init(property: String)")
super.init(property: property)
}
open override func method() {
print("ResilientConcreteNSObjectOutsideChild.method()")
super.method()
}
open override class func classMethod() {
print("ResilientConcreteNSObjectOutsideChild.classMethod()")
super.classMethod()
}
}
// Fixed-layout base class
@_fixed_layout
open class FixedLayoutNSObjectOutsideParent: NSObject {}