Files
swift-mirror/test/Constraints/super_method.swift
Jordan Rose fac5a83bbf Allow capturing super in explicit closures and nested functions.
The previous commit enabled this; now it's just about removing the
restriction in the parser and tightening up code completion.

Using 'super' in a closure where 'self' is captured weak or unowned still
doesn't work; the reference to 'self' within the closure is treated as
strong regardless of how it's declared. Fixing this requires a cascade of
effort, so instead I just cloned rdar://problem/19755221.

rdar://problem/14883824

Swift SVN r25065
2015-02-07 03:56:11 +00:00

62 lines
1.1 KiB
Swift

// RUN: %target-parse-verify-swift -parse-as-library
struct S {
func foo() {
super.foo() // expected-error{{'super' cannot be used outside of class members}}
}
}
class D : B {
func b_foo() -> Int { return super.foo }
override func bar(a: Float) -> Int { return super.bar(a) }
func bas() -> (Int, UnicodeScalar, String) {
return (super.zim(), super.zang(), super.zung())
}
override var zippity : Int { return super.zippity }
}
extension D {
func d_ext_foo() -> Int {
return super.foo
}
}
class B {
var foo : Int = 0
func bar(a: Float) -> Int {}
func zim() -> Int {}
func zang() -> UnicodeScalar {}
func zung() -> String {}
var zippity : Int { return 123 }
func zoo() { super.zoo() } // expected-error{{'super' members cannot be referenced in a root class}}
}
class X<T> {
func method<U>(x: T, y: U) { }
}
class Y<U> : X<Int> {
func otherMethod<U>(x: Int, y: U) {
super.method(x, y: y)
}
}
func use_d(d: D) -> Int {
d.b_foo()
d.bar(1.0)
d.bas()
return d.zippity
}
func not_method() {
super.foo() // expected-error{{'super' cannot be used outside of class members}}
}