forked from swiftlang/swift
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeneric-classes2.swift
94 lines (73 loc) · 1.72 KB
/
generic-classes2.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
// RUN: %target-run-simple-swift(-enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
// RUN: %target-run-simple-swift(-Osize -enable-experimental-feature Embedded -parse-as-library -runtime-compatibility-version none -wmo -Xfrontend -disable-objc-interop) | %FileCheck %s
// REQUIRES: swift_in_compiler
// REQUIRES: executable_test
// REQUIRES: optimized_stdlib
// REQUIRES: swift_feature_Embedded
classB<T>{
}
classD<T>:B<T>{
}
func callee<T>(_ t:T.Type){
_ =D<T>()
}
publicfunc test(){
callee(Int.self)
print("OK!")
}
publicclassBase<T:BinaryInteger>{
publicfunc foo(_ t:T){
print(t)
}
}
publicclassDerived:Base<Int>{
}
func testNonGenericDerived(_ d:Derived){
d.foo(27)
}
publicprotocolP{
func mask()
}
publicstructConcreteP:P{
varx:Int
publicfunc mask(){
print(x)
}
}
classBaseClass<SomeP:P>{
func foo(_ p:SomeP){
p.mask()
}
}
finalclassSubClass<T, SomeP:P>:BaseClass<SomeP>{
}
publicclassBaseWithClassMethod<T:BinaryInteger>{
classfunc foo(_ t:T){
print("BaseWithClassMethod")
print(t)
}
}
publicclassDerivedWithClassMethod<T:BinaryInteger>:BaseWithClassMethod<T>{
overrideclassfunc foo(_ t:T){
print("DerivedWithClassMethod")
print(t)
}
}
func testClassMethod()->BaseWithClassMethod<Int>.Type{
return DerivedWithClassMethod<Int>.self
}
@main
structMain{
staticfunc main(){
// CHECK: OK!
test()
// CHECK: 27
testNonGenericDerived(Derived())
letx=SubClass<Int,ConcreteP>()
// CHECK: 42
x.foo(ConcreteP(x:42))
lett=testClassMethod()
// CHECK: 123
t.foo(123)
}
}