[InterfaceGen] Print abstract accessors in protocols (#19379)

* [InterfaceGen] Print abstract accessors in protocols

This patch slightly cleans up printing accessors and ensures we print
accessors abstractly in protocol context for textual interfaces.

It also removes some assuptions around the FunctionBody callback and
makes them more explicit.

* Print getter and setter for didSet decls

* Test _read and _modify

* Fix logic for skipping willSet/didSet

* Update 'final' test for new getter printing behavior
This commit is contained in:
Harlan
2018-09-20 15:43:01 -07:00
committed by GitHub
parent bbbf02e5f8
commit 8ba8222333
5 changed files with 128 additions and 28 deletions

View File

@@ -6,8 +6,10 @@
// CHECK: final public class FinalClass {
public final class FinalClass {
// CHECK: @inlinable final public class var a: [[INT:(Swift.)?Int]] {
// CHECK-NEXT: {{^}} get {
// CHECK-NEXT: return 3
// CHECK-NEXT: }
// CHECK-NEXT: }
@inlinable
public final class var a: Int {
return 3

View File

@@ -37,8 +37,10 @@ public struct Foo: Hashable {
// CHECK: @_transparent public var transparent: [[INT]] {
// CHECK-NEXT: get {
// CHECK-NEXT: return 34
// CHECK-NEXT: }
// CHECK-NEXT: }
@_transparent
public var transparent: Int {
return 34
@@ -102,6 +104,78 @@ public struct Foo: Hashable {
// CHECK-NEXT: }
}
// CHECK: @inlinable public var inlinableReadAndModify: [[INT]] {
@inlinable
public var inlinableReadAndModify: Int {
// CHECK: _read {
// CHECK-NEXT: yield 0
// CHECK-NEXT: }
_read {
yield 0
}
// CHECK: _modify {
// CHECK-NEXT: var x = 0
// CHECK-NEXT: yield &x
// CHECK-NEXT: }
_modify {
var x = 0
yield &x
}
// CHECK-NEXT: }
}
// CHECK: public var inlinableReadNormalModify: [[INT]] {
public var inlinableReadNormalModify: Int {
// CHECK: @inlinable _read {
// CHECK-NEXT: yield 0
// CHECK-NEXT: }
@inlinable _read {
yield 0
}
// CHECK: _modify{{$}}
// CHECK-NOT: var x = 0
// CHECK-NOT: yield &x
// CHECK-NOT: }
_modify {
var x = 0
yield &x
}
// CHECK-NEXT: }
}
// CHECK: public var normalReadInlinableModify: [[INT]] {
public var normalReadInlinableModify: Int {
// CHECK: _read{{$}}
// CHECK-NOT: yield 0
// CHECK-NOT: }
_read {
yield 0
}
// CHECK: @inlinable _modify {
// CHECK-NEXT: var x = 0
// CHECK-NEXT: yield &x
// CHECK-NEXT: }
@inlinable _modify {
var x = 0
yield &x
}
// CHECK-NEXT: }
}
// CHECK: public var normalReadAndModify: [[INT]] {
public var normalReadAndModify: Int {
// CHECK-NEXT: _read{{$}}
_read { yield 0 }
// CHECK-NEXT: _modify{{$}}
_modify {
var x = 0
yield &x
}
// CHECK-NEXT: }
}
// CHECK: @inlinable public func inlinableMethod() {
// CHECK-NOT: #if NO
// CHECK-NOT: print("Hello, world!")