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
|
// RUN: %target-swift-frontend -dump-ast %s | %FileCheck %s
protocol P {
associatedtype A
@Builder<A>
var x1: [S] { get }
@Builder<Self>
var x2: [S] { get }
}
@resultBuilder
enum Builder<T> {
static func buildBlock(_ args: S...) -> [S] { args }
}
struct S {}
// CHECK: struct_decl{{.*}}ProtocolSubstitution
struct ProtocolSubstitution: P {
typealias A = Int
// CHECK: var_decl{{.*}}x1
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> ProtocolSubstitution.A)
var x1: [S] { S() }
// CHECK: var_decl{{.*}}x2
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> ProtocolSubstitution)
var x2: [S] { S() }
}
// CHECK: struct_decl{{.*}}ArchetypeSubstitution
struct ArchetypeSubstitution<A>: P {
// CHECK: var_decl{{.*}}x1
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> A)
var x1: [S] { S() }
// CHECK: var_decl{{.*}}x2
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> ArchetypeSubstitution<A>)
var x2: [S] { S() }
}
// CHECK-LABEL: struct_decl{{.*}}ExplicitGenericAttribute
struct ExplicitGenericAttribute<T: P> {
// CHECK: var_decl{{.*}}x1
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> T)
@Builder<T>
var x1: [S] { S() }
// CHECK: var_decl{{.*}}x2
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> T.A)
@Builder<T.A>
var x2: [S] { S() }
}
// CHECK: struct_decl{{.*}}ConcreteTypeSubstitution
struct ConcreteTypeSubstitution<Value> {}
extension ConcreteTypeSubstitution: P where Value == Int {
typealias A = Value
// CHECK: var_decl{{.*}}x1
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> ConcreteTypeSubstitution<Int>.A)
var x1: [S] { S() }
// CHECK: var_decl{{.*}}x2
// CHECK: Builder.buildBlock{{.*}}(substitution_map generic_signature=<T where T : Copyable, T : Escapable> T -> ConcreteTypeSubstitution<Int>)
var x2: [S] { S() }
}
|