1 private@ 2 3 type A @move = 4 let mut x : i32 5 def f = x * 2 6 7 do 8 let a1 = A 1 9 assert a1.f == 2 10 11 do 12 let a1 = A 1 13 let a2 = a1 14 let a3 = a1@copy 15 16 a1.x = 9 17 18 assert a2.x == 9 19 assert a3.x == 1 20 21 type B @move = 22 let a = A 5 23 24 do 25 let b1 = B.new 26 assert b1.a.f == 10 27 28 do 29 let b1 = B.new 30 let a2 = b1.a 31 let a3 = b1.a@copy 32 33 b1.a.x = 9 34 35 assert a2.x == 9 36 assert a3.x == 5 37 38 do 39 let a1 = A@ref 9 40 assert a1.x == 9 41 assert a1.f == 18 42 43 do 44 let g (u : mem A) (v : i32) = 45 assert u.x == v 46 47 let a1 = A 9 48 let b1 = B.new 49 50 g a1@copy 9 51 g b1.a@copy 5 52 53 type Inner @move = 54 let x : i32 55 56 type Outer = 57 let inner = Inner 5 58 59 do 60 let outer = Outer.new 61 assert outer.inner.x == 5 62 63 type OuterMove @move = 64 let inner = Inner 9 65 66 do 67 let outer = OuterMove.new 68 assert outer.inner.x == 9 69