mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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:
@@ -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
|
||||
|
||||
@@ -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!")
|
||||
|
||||
Reference in New Issue
Block a user