blob: 638d4447db44bb14690569ec255382a71c4fe72a (
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
|
[Compact]
abstract class AbstractFoo {
public int field = 23;
public abstract int prop { get; set; }
public abstract unowned string foo ();
}
[Compact]
class Foo : AbstractFoo {
public override int prop {
get { return field + 1; }
set { field = value - 1; }
}
public Foo () {
assert (field == 23);
field = 37;
assert (prop == 38);
}
public override unowned string foo () {
return "Foo";
}
}
[Compact]
class Bar : Foo {
public override int prop {
get { return field * 2; }
set { field = value / 2; }
}
public Bar () {
assert (field == 37);
field = 42;
assert (prop == 84);
}
public override unowned string foo () {
return "Bar";
}
}
[Compact]
class Manam {
public int field = 23;
public virtual int prop {
get { return field + 1; }
set { field = value - 1; }
}
public virtual unowned string foo () {
return "Manam";
}
[NoWrapper]
public virtual int foo_plain () {
return 13;
}
}
[Compact]
class Baz : Manam {
public override unowned string foo () {
return "Baz";
}
public override int foo_plain () {
return 23;
}
}
void main () {
var foo = new Foo ();
assert (foo.foo () == "Foo");
assert (foo.prop == 38);
foo.prop = 4711;
assert (foo.field == 4710);
var bar = new Bar ();
assert (bar.foo () == "Bar");
assert (bar.prop == 84);
bar.prop = 32;
assert (bar.field == 16);
var manam = new Manam ();
assert (manam.foo () == "Manam");
assert (manam.prop == 24);
assert (manam.foo_plain () == 13);
var baz = new Baz ();
assert (baz.foo () == "Baz");
baz.prop = 42;
assert (baz.prop == 42);
assert (baz.foo_plain () == 23);
}
|