blob: ff76a2e97fdfa83fb7c9c98cb3877381e3786361 [file] [log] [blame]
// Check JIT mode
// RUN: %target-jit-run %s | %FileCheck %s
// REQUIRES: swift_interpreter
// REQUIRES: objc_interop
import Foundation
@objc protocol Fungible: Runcible {
func funge()
}
@objc protocol Runcible {
func runce()
}
class C: Fungible {
@objc func runce() {}
@objc func funge() {}
}
class D {}
extension D: Fungible {
@objc func runce() {}
@objc func funge() {}
}
extension NSString: Fungible {
func runce() {}
func funge() {}
}
func check(_ x: AnyObject) {
print("\(x is Fungible) \(x is Runcible)")
}
check(NSString()) // CHECK: true true
check(C()) // CHECK: true true
check(D()) // CHECK: true true
// Make sure partial application of methods with @autoreleased
// return values works
var count = 0
class Juice : NSObject {
override init() {
count += 1
}
deinit {
count -= 1
}
}
@objc protocol Fruit {
@objc optional var juice: Juice { get }
}
class Durian : NSObject, Fruit {
init(juice: Juice) {
self.juice = juice
}
var juice: Juice
}
func consume(_ fruit: Fruit) {
_ = fruit.juice
}
autoreleasepool {
let tasty = Durian(juice: Juice())
print(count) // CHECK: 1
consume(tasty)
}
do {
print(count) // CHECK: 0
}