-
Notifications
You must be signed in to change notification settings - Fork 10.4k
/
Copy pathaccessibility_package_inline_interface.swift
145 lines (132 loc) · 4.45 KB
/
accessibility_package_inline_interface.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
// 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)
}