mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
I broke writeback of byref arguments to functions with my RValue refactor, but assignment writeback (including destructuring assignments like (a, b) = (b, a)) should work. Add a test for it. Swift SVN r4731
86 lines
1.2 KiB
Swift
86 lines
1.2 KiB
Swift
// RUN: %swift %s -i | FileCheck %s
|
|
|
|
struct Foo {
|
|
var _x : (Int, Char, String)
|
|
|
|
var x : (Int, String, Char) {
|
|
get:
|
|
var (a, b, c) = _x
|
|
return (a, c, b)
|
|
|
|
set:
|
|
var (a, b, c) = value
|
|
_x = (a, c, b)
|
|
}
|
|
|
|
constructor(a:Int, b:String, c:Char) {
|
|
_x = (a, c, b)
|
|
}
|
|
}
|
|
|
|
var foo = Foo(1, "two", '3')
|
|
|
|
foo.x.0 = 4
|
|
foo.x.1 = "five"
|
|
foo.x.2 = '6'
|
|
|
|
// CHECK: 4
|
|
// CHECK: five
|
|
// CHECK: 6
|
|
println(foo.x.0)
|
|
println(foo.x.1)
|
|
println(foo.x.2)
|
|
|
|
struct Bar {
|
|
var _foo : Foo
|
|
|
|
var foo : Foo {
|
|
get:
|
|
return _foo
|
|
|
|
set:
|
|
_foo = value
|
|
}
|
|
}
|
|
|
|
var bar = Bar(Foo(1, "two", '3'))
|
|
|
|
bar.foo.x.0 = 7
|
|
bar.foo.x.1 = "eight"
|
|
bar.foo.x.2 = '9'
|
|
|
|
// CHECK: 7
|
|
// CHECK: eight
|
|
// CHECK: 9
|
|
println(bar.foo.x.0)
|
|
println(bar.foo.x.1)
|
|
println(bar.foo.x.2)
|
|
|
|
(foo, bar.foo) = (bar.foo, foo)
|
|
|
|
// CHECK: 4
|
|
// CHECK: five
|
|
// CHECK: 6
|
|
println(bar.foo.x.0)
|
|
println(bar.foo.x.1)
|
|
println(bar.foo.x.2)
|
|
|
|
(foo.x, bar.foo.x) = (bar.foo.x, foo.x)
|
|
|
|
// CHECK: 7
|
|
// CHECK: eight
|
|
// CHECK: 9
|
|
println(bar.foo.x.0)
|
|
println(bar.foo.x.1)
|
|
println(bar.foo.x.2)
|
|
|
|
(foo.x.0, bar.foo.x.0) = (bar.foo.x.0, foo.x.0)
|
|
|
|
// CHECK: 4
|
|
// CHECK: eight
|
|
// CHECK: 9
|
|
println(bar.foo.x.0)
|
|
println(bar.foo.x.1)
|
|
println(bar.foo.x.2)
|
|
|