blob: 86fff40645542f7ffaae9f283cad99b229d65709 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
struct Foo {
public int i;
}
Foo? foo;
Foo? foo_heap_owned () {
foo = { 23 };
return foo;
}
unowned Foo? foo_heap_unowned () {
foo = { 42 };
return foo;
}
void test_without_destroy () {
{
Foo f = foo_heap_owned ();
assert (f.i == 23);
}
{
Foo f = (Foo) foo_heap_owned ();
assert (f.i == 23);
}
{
Foo f = (!) foo_heap_owned ();
assert (f.i == 23);
}
{
Foo f = foo_heap_unowned ();
assert (f.i == 42);
}
{
Foo f = (Foo) foo_heap_unowned ();
assert (f.i == 42);
}
{
Foo f = (!) foo_heap_unowned ();
assert (f.i == 42);
}
}
struct Bar {
public string s;
}
Bar? bar;
Bar? bar_heap_owned () {
bar = { "bar" };
return bar;
}
unowned Bar? bar_heap_unowned () {
bar = { "manam" };
return bar;
}
void test_with_destroy () {
{
Bar b = bar_heap_owned ();
assert (b.s == "bar");
}
{
Bar b = (Bar) bar_heap_owned ();
assert (b.s == "bar");
}
{
Bar b = (!) bar_heap_owned ();
assert (b.s == "bar");
}
{
Bar b = bar_heap_unowned ();
assert (b.s == "manam");
}
{
Bar b = (Bar) bar_heap_unowned ();
assert (b.s == "manam");
}
{
Bar b = (!) bar_heap_unowned ();
assert (b.s == "manam");
}
{
unowned Bar b = bar_heap_unowned ();
assert (b.s == "manam");
}
{
unowned Bar b = (Bar) bar_heap_unowned ();
assert (b.s == "manam");
}
{
unowned Bar b = (!) bar_heap_unowned ();
assert (b.s == "manam");
}
}
void main () {
test_without_destroy ();
test_with_destroy ();
}
|