mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
This improvement was reported in [SR-852](https://bugs.swift.org/browse/SR-852). before: ``` $ cat t.swift class A { init(x: Int) {} convenience init() { init(x: 1) } } $ swiftc -c t.swift t.swift:6:13: error: initializers may only be declared within a type init(x: 1) ^ t.swift:6:17: error: expected parameter type following ':' init(x: 1) ^ t.swift:6:17: error: expected ',' separator init(x: 1) ^ , t.swift:6:17: error: expected parameter type following ':' init(x: 1) ^ t.swift:6:17: error: expected ',' separator init(x: 1) ^ , ``` after: ``` t.swift:6:9: error: missing 'self.' at initializer invocation init(x: 1) ^ self. ```
114 lines
3.0 KiB
Swift
114 lines
3.0 KiB
Swift
// RUN: %target-parse-verify-swift
|
|
|
|
struct FooStructConstructorA {
|
|
init // expected-error {{expected '('}}
|
|
}
|
|
|
|
struct FooStructConstructorB {
|
|
init() // expected-error {{initializer requires a body}}
|
|
}
|
|
|
|
struct FooStructConstructorC {
|
|
init {} // expected-error {{expected '('}}{{8-8=() }}
|
|
}
|
|
|
|
|
|
struct FooStructDeinitializerA {
|
|
deinit // expected-error {{expected '{' for deinitializer}}
|
|
}
|
|
|
|
struct FooStructDeinitializerB {
|
|
deinit // expected-error {{expected '{' for deinitializer}}
|
|
}
|
|
|
|
struct FooStructDeinitializerC {
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
class FooClassDeinitializerA {
|
|
deinit(a : Int) {} // expected-error{{no parameter clause allowed on deinitializer}}{{9-18=}}
|
|
}
|
|
|
|
class FooClassDeinitializerB {
|
|
deinit { }
|
|
}
|
|
|
|
init {} // expected-error {{initializers may only be declared within a type}} expected-error {{expected '('}} {{6-6=() }}
|
|
init() // expected-error {{initializers may only be declared within a type}}
|
|
init() {} // expected-error {{initializers may only be declared within a type}}
|
|
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
deinit // expected-error {{expected '{' for deinitializer}}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
|
|
struct BarStruct {
|
|
init() {}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
extension BarStruct {
|
|
init(x : Int) {}
|
|
|
|
// When/if we allow 'var' in extensions, then we should also allow dtors
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
enum BarUnion {
|
|
init() {}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
extension BarUnion {
|
|
init(x : Int) {}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
class BarClass {
|
|
init() {}
|
|
deinit {}
|
|
}
|
|
|
|
extension BarClass {
|
|
convenience init(x : Int) { self.init() }
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
protocol BarProtocol {
|
|
init() {} // expected-error {{protocol initializers may not have bodies}}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
extension BarProtocol {
|
|
init(x : Int) {}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
func fooFunc() {
|
|
init() {} // expected-error {{initializers may only be declared within a type}}
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
}
|
|
|
|
func barFunc() {
|
|
var x : () = { () -> () in
|
|
init() {} // expected-error {{initializers may only be declared within a type}}
|
|
return
|
|
} ()
|
|
|
|
var y : () = { () -> () in
|
|
deinit {} // expected-error {{deinitializers may only be declared within a class}}
|
|
return
|
|
} ()
|
|
}
|
|
|
|
// SR-852
|
|
class Aaron {
|
|
init(x: Int) {}
|
|
convenience init() { init(x: 1) } // expected-error {{missing 'self.' at initializer invocation}}
|
|
}
|
|
|
|
class Theodosia: Aaron {
|
|
init() {
|
|
init(x: 2) // expected-error {{missing 'super.' at initializer invocation}}
|
|
}
|
|
}
|