1    private@
2    
3    do
4        let mut count = 0
5        let f () =
6            let x @param =
7                count += 1
8                1
9    
10       f
11       assert count == 1
12   
13       f x = 2
14       assert count == 1
15   
16   type ValA @abstract @byval =
17       let mut count = 0
18       let x : i32 @param =
19           count += 1
20           1
21   
22   type ValB @byval =
23       inherit ValA
24   
25   do
26       let b1 = ValB.new
27       assert b1.count == 1
28   
29       let b2 = ValB x = 1
30       assert b2.count == 0
31   
32   type ValC @byval =
33       inherit ValA x = 1
34   
35   do
36       let c = ValC.new
37       assert c.count == 0
38   
39   type RefA @abstract =
40       let mut count = 0
41       let x : i32 @param =
42           count += 1
43           1
44   
45   type RefB =
46       inherit RefA
47   
48   do
49       let b = RefB.new
50       assert b.count == 1
51   
52   type RefC =
53       inherit RefA x = 1
54   
55   do
56       let c = RefC.new
57       assert c.count == 0
58   
59   do
60       let f (x : i32) =
61           if x > 5 then
62               let y @param = x * 2
63               y
64           else
65               x
66   
67       assert f 8 == 16
68       assert f 8
69                y = 7
70              |> { _ == 7 }
71   
72   type D =
73       let x : i32
74       let r = if x > 5 then
75                   let y @param = x * 2
76                   y
77               else
78                   x
79   
80   do
81       let d1 = D 8
82       assert d1.r == 16
83   
84       let d2 = D 8
85                  y = 7
86   
87       assert d2.r == 7
88