1    private@
2    
3    type A @mem =
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   
15       a1.x = 9
16   
17       assert a2.x == 9
18   
19   type B @mem =
20       let a = A 5
21   
22   do
23       let b1 = B.new
24       assert b1.a.f == 10
25   
26   do
27       let b1 = B.new
28       let a2 = b1.a
29   
30       b1.a.x = 9
31   
32       assert a2.x == 9
33   
34   do
35       let a1 = A@ref 9
36       assert a1.x == 9
37       assert a1.f == 18
38   
39   type Inner @mem =
40       let x : i32
41   
42   type Outer =
43       let inner = Inner 5
44   
45   do
46       let outer = Outer.new
47       assert outer.inner.x == 5
48   
49   type OuterMove @mem =
50       let inner = Inner 9
51   
52   do
53       let outer = OuterMove.new
54       assert outer.inner.x == 9
55