mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Instead of parisng identifiers and fallthrough to self, treat `kw_self` the same as identifiers. This enables binding to self.
61 lines
1.4 KiB
Swift
61 lines
1.4 KiB
Swift
// RUN: %target-typecheck-verify-swift
|
|
|
|
class Writer {
|
|
private var articleWritten = 47
|
|
|
|
func stop() {
|
|
let rest: () -> Void = { [weak self] in
|
|
let articleWritten = self?.articleWritten ?? 0
|
|
guard let `self` = self else {
|
|
return
|
|
}
|
|
|
|
self.articleWritten = articleWritten
|
|
}
|
|
|
|
fatalError("I'm running out of time")
|
|
rest()
|
|
}
|
|
|
|
func nonStop() {
|
|
let write: () -> Void = { [weak self] in
|
|
self?.articleWritten += 1
|
|
|
|
if let self = self {
|
|
self.articleWritten += 1
|
|
}
|
|
|
|
if let `self` = self {
|
|
self.articleWritten += 1
|
|
}
|
|
|
|
guard let self = self else {
|
|
return
|
|
}
|
|
|
|
self.articleWritten += 1
|
|
}
|
|
|
|
write()
|
|
}
|
|
}
|
|
|
|
struct T {
|
|
var mutable: Int = 0
|
|
func f() {
|
|
// expected-error @+2 {{keyword 'self' cannot be used as an identifier here}}
|
|
// expected-note @+1 {{if this name is unavoidable, use backticks to escape it}}
|
|
let self = self
|
|
}
|
|
}
|
|
|
|
class MyCls {
|
|
func something() {}
|
|
|
|
func test() {
|
|
// expected-warning @+1 {{initialization of immutable value 'self' was never used}}
|
|
let `self` = Writer() // Even if `self` is shadowed,
|
|
something() // this should still refer `MyCls.something`.
|
|
}
|
|
}
|