Files
swift-mirror/test/Parse/self_rebinding.swift
Daniel Duan 7a682a46b9 [Parse] Allow self rebinding
Instead of parisng identifiers and fallthrough to self, treat `kw_self` the same
as identifiers. This enables binding to self.
2018-03-26 10:24:54 -07:00

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`.
}
}