mirror of
https://github.com/apple/swift.git
synced 2026-02-27 18:26:24 +01:00
This does not rename all the internal variables, functions, and types whose names were based on the old syntax. I think it adds new syntax support everywhere it's needed while retaining enough of the old syntax support that early adopters will see nice deprecation messages guiding them to the new syntax.
98 lines
2.9 KiB
Swift
98 lines
2.9 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend -emit-module -swift-version 5 -enable-implicit-dynamic %S/Inputs/dynamicReplacementA.swift -o %t -module-name A
|
|
// RUN: %target-swift-frontend -emit-module -swift-version 5 -enable-implicit-dynamic -c %S/Inputs/dynamicReplacementB.swift -o %t -I %t -module-name B
|
|
// RUN: %target-swift-frontend -emit-module -swift-version 5 -enable-implicit-dynamic -c %S/Inputs/dynamicReplacementC.swift -o %t -I %t -module-name C
|
|
// RUN: %target-typecheck-verify-swift -verify-ignore-unrelated -swift-version 5 -enable-implicit-dynamic -I %t
|
|
import A
|
|
import B
|
|
import C
|
|
|
|
// rdar://problem/46737657: static properties
|
|
struct StaticProperties {
|
|
dynamic var property: Int { return 1 }
|
|
dynamic static var property: Int { return 11 }
|
|
}
|
|
|
|
extension StaticProperties {
|
|
@_dynamicReplacement(for: property)
|
|
var replacement_property: Int { return 2 }
|
|
}
|
|
|
|
// Replacements involving different types.
|
|
extension TheReplaceables {
|
|
@_dynamicReplacement(for: property1) // expected-error{{replaced accessor for 'property1' occurs in multiple places}}
|
|
var replace_property1: Int { return 0 }
|
|
|
|
@_dynamicReplacement(for: property2)
|
|
var replace_property2_int: Int { return 1 }
|
|
|
|
@_dynamicReplacement(for: property2)
|
|
var replace_property2_string: String { return "replaced" }
|
|
|
|
@_dynamicReplacement(for: subscript(_:)) // expected-error{{replaced accessor for 'subscript(_:)' occurs in multiple places}}
|
|
subscript (int_int i: Int) -> Int { return 0 }
|
|
|
|
@_dynamicReplacement(for: subscript(_:))
|
|
subscript (int_string i: Int) -> String { return "" }
|
|
|
|
@_dynamicReplacement(for: subscript(_:))
|
|
subscript (string_string i: String) -> String { return "" }
|
|
}
|
|
|
|
extension K {
|
|
@_dynamicReplacement(for: init(i:)) // expected-error{{replaced initializer 'init(i:)' is not marked as convenience}}
|
|
convenience init(ri: Int) { }
|
|
|
|
@_dynamicReplacement(for: init(c:)) // expected-error{{replaced initializer 'init(c:)' is marked as convenience}})
|
|
init(rc: Int) { }
|
|
|
|
@_dynamicReplacement(for:finalFunction())
|
|
func replacement_finalFunction() {}
|
|
}
|
|
|
|
extension undeclared { // expected-error{{cannot find type 'undeclared' in scope}}
|
|
@_dynamicReplacement(for: property)
|
|
var replacement_property: Int { return 2 }
|
|
|
|
@_dynamicReplacement(for: func)
|
|
func func2() -> Int { return 2 }
|
|
}
|
|
|
|
extension P {
|
|
@_dynamicReplacement(for: v)
|
|
var replacement_v : Int {
|
|
return 1
|
|
}
|
|
|
|
@_dynamicReplacement(for: subscript(_:))
|
|
subscript(y y: Int) -> Int {
|
|
get {
|
|
return 1
|
|
}
|
|
}
|
|
|
|
@_dynamicReplacement(for: f())
|
|
func replacement_f() {
|
|
}
|
|
}
|
|
|
|
struct ImplicitModifier {
|
|
var i: Int {
|
|
get { 1 }
|
|
set {}
|
|
}
|
|
}
|
|
|
|
extension ImplicitModifier {
|
|
@_dynamicReplacement(for: i) // expected-error{{replaced '_modify' accessor for 'i' is not explicitly defined}}
|
|
var _i: Int {
|
|
get {
|
|
0
|
|
}
|
|
_modify {
|
|
var i: Int = 0
|
|
yield &i
|
|
}
|
|
}
|
|
}
|