mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
146 lines
4.4 KiB
Swift
146 lines
4.4 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %{python} %utils/split_file.py -o %t %s
|
|
|
|
// RUN: %target-swift-frontend -module-name Utils1 %t/Utils.swift -emit-module -emit-module-path %t/Utils1.swiftmodule -package-name myLib -swift-version 5
|
|
// RUN: test -f %t/Utils1.swiftmodule
|
|
|
|
// RUN: %target-swift-frontend -module-name Utils %t/Utils.swift -emit-module -emit-module-interface-path %t/Utils.swiftinterface -package-name myLib -enable-library-evolution -swift-version 5
|
|
// RUN: test -f %t/Utils.swiftinterface
|
|
// RUN: %target-swift-typecheck-module-from-interface(%t/Utils.swiftinterface) -I%t
|
|
|
|
// RUN: %FileCheck %s -check-prefix CHECK-UTILS < %t/Utils.swiftinterface
|
|
// CHECK-UTILS: -module-name Utils
|
|
// CHECK-UTILS: -package-name myLib
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: package class PackageKlassProto {
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: package init()
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: package var pkgVar: Swift.Double
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: deinit
|
|
// CHECK-UTILS: }
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: package class PackageKlassForInline {
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: package init()
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: package func foo1()
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: deinit
|
|
// CHECK-UTILS: }
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: internal class InternalKlassProto {
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: internal init()
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: internal var internalVar: Swift.Double
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: deinit
|
|
// CHECK-UTILS: }
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: internal class InternalKlassForInline {
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: internal init()
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: internal func bar1()
|
|
// CHECK-UTILS: @usableFromInline
|
|
// CHECK-UTILS: deinit
|
|
// CHECK-UTILS: }
|
|
// CHECK-UTILS: @inlinable public func publicFunc() {
|
|
// CHECK-UTILS: let a = PackageKlassProto().pkgVar
|
|
// CHECK-UTILS: let b = InternalKlassProto().internalVar
|
|
// CHECK-UTILS: PackageKlassForInline().foo1()
|
|
// CHECK-UTILS: InternalKlassForInline().bar1()
|
|
// CHECK-UTILS: print(a, b)
|
|
// CHECK-UTILS: }
|
|
// CHECK-UTILS: @inlinable internal func internalFunc() {
|
|
// CHECK-UTILS: let a = PackageKlassProto().pkgVar
|
|
// CHECK-UTILS: let b = InternalKlassProto().internalVar
|
|
// CHECK-UTILS: PackageKlassForInline().foo1()
|
|
// CHECK-UTILS: InternalKlassForInline().bar1()
|
|
// CHECK-UTILS: print(a, b)
|
|
// CHECK-UTILS: }
|
|
// CHECK-UTILS: @inlinable package func packageFunc() {
|
|
// CHECK-UTILS: let a = PackageKlassProto().pkgVar
|
|
// CHECK-UTILS: let b = InternalKlassProto().internalVar
|
|
// CHECK-UTILS: PackageKlassForInline().foo1()
|
|
// CHECK-UTILS: InternalKlassForInline().bar1()
|
|
// CHECK-UTILS: print(a, b)
|
|
// CHECK-UTILS: }
|
|
|
|
|
|
// BEGIN Utils.swift
|
|
package protocol PackageProto {
|
|
var pkgVar: Double { get set }
|
|
func pkgFunc()
|
|
}
|
|
|
|
package class PackageKlass {
|
|
package init() {}
|
|
package private(set) var pkgVar: Double = 1.0
|
|
package func pkgFunc() {}
|
|
}
|
|
|
|
@usableFromInline
|
|
package class PackageKlassProto: PackageProto {
|
|
@usableFromInline package init() {}
|
|
@usableFromInline package var pkgVar = 1.0
|
|
package func pkgFunc() {}
|
|
}
|
|
|
|
@usableFromInline
|
|
package class PackageKlassForInline {
|
|
@usableFromInline package init() {}
|
|
@usableFromInline package func foo1() {}
|
|
package func foo2() {}
|
|
}
|
|
|
|
protocol InternalProto {
|
|
var internalVar: Double { get set }
|
|
func internalFunc()
|
|
}
|
|
class InternalKlass {
|
|
init() {}
|
|
}
|
|
@usableFromInline
|
|
class InternalKlassProto: InternalProto {
|
|
@usableFromInline init() {}
|
|
@usableFromInline var internalVar = 1.0
|
|
func internalFunc() {}
|
|
}
|
|
|
|
@usableFromInline
|
|
class InternalKlassForInline {
|
|
@usableFromInline init() {}
|
|
@usableFromInline func bar1() {}
|
|
func bar2() {}
|
|
}
|
|
|
|
@inlinable
|
|
public func publicFunc() {
|
|
let a = PackageKlassProto().pkgVar
|
|
let b = InternalKlassProto().internalVar
|
|
PackageKlassForInline().foo1()
|
|
InternalKlassForInline().bar1()
|
|
print(a, b)
|
|
}
|
|
|
|
@inlinable
|
|
func internalFunc() {
|
|
let a = PackageKlassProto().pkgVar
|
|
let b = InternalKlassProto().internalVar
|
|
PackageKlassForInline().foo1()
|
|
InternalKlassForInline().bar1()
|
|
print(a, b)
|
|
}
|
|
|
|
@inlinable
|
|
package func packageFunc() {
|
|
let a = PackageKlassProto().pkgVar
|
|
let b = InternalKlassProto().internalVar
|
|
PackageKlassForInline().foo1()
|
|
InternalKlassForInline().bar1()
|
|
print(a, b)
|
|
}
|