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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
|
[CCode (array_length_type = "guint8")]
delegate int[] FooFunc ([CCode (array_length_type = "guint8")] owned int[] p);
interface IFoo {
[CCode (array_length_type = "guint8")]
public abstract int[] manam { get; set; }
[CCode (array_length_type = "guint8")]
public abstract int[] get_foo ();
public abstract void set_foo ([CCode (array_length_type = "guint8")] out int[] p);
}
class Foo : IFoo {
public int[] manam { get; set; }
[CCode (array_length_type = "guint8")]
public virtual int[] manar { get; set; }
public int[] get_foo () {
var res = new int[255];
res[254] = 4711;
return res;
}
public void set_foo (out int[] p) {
p = new int[255];
p[254] = 4711;
}
[CCode (array_length_type = "guint8")]
public virtual int[] get_bar () {
var res = new int[255];
res[254] = 4711;
return res;
}
public virtual void set_bar ([CCode (array_length_type = "guint8")] out int[] p) {
p = new int[255];
p[254] = 4711;
}
public Foo () {
{
var a = get_foo ();
assert (a.length == 255);
assert (a[254] == 4711);
}
{
int[] a = null;
set_foo (out a);
assert (a.length == 255);
assert (a[254] == 4711);
}
}
}
class Bar : Foo {
public override int[] manar { get; set; }
public override int[] get_bar () {
var res = new int[255];
res[254] = 4711;
return res;
}
public override void set_bar (out int[] p) {
p = new int[255];
p[254] = 4711;
}
public Bar () {
{
var a = get_foo ();
assert (a.length == 255);
assert (a[254] == 4711);
}
{
int[] a = null;
set_foo (out a);
assert (a.length == 255);
assert (a[254] == 4711);
}
{
var a = get_bar ();
assert (a.length == 255);
assert (a[254] == 4711);
}
{
int[] a = null;
set_bar (out a);
assert (a.length == 255);
assert (a[254] == 4711);
}
}
}
[CCode (array_length_type = "guint8")]
int[] get_foo () {
var res = new int[255];
res[254] = 4711;
return res;
}
void set_foo ([CCode (array_length_type = "guint8")] out int[] p) {
p = new int[255];
p[254] = 4711;
}
[CCode (array_length_type = "guint8")]
int[] foo_func ([CCode (array_length_type = "guint8")] owned int[] p) {
return p;
}
void main () {
{
FooFunc f = (a) => { return a; };
int[] a = new int[255];
a[254] = 4711;
a = f ((owned) a);
assert (a.length == 255);
assert (a[254] == 4711);
}
{
FooFunc f = (FooFunc) foo_func;
int[] a = new int[255];
a[254] = 4711;
a = f ((owned) a);
assert (a.length == 255);
assert (a[254] == 4711);
}
{
var a = get_foo ();
assert (a.length == 255);
assert (a[254] == 4711);
}
{
int[] a = null;
set_foo (out a);
assert (a.length == 255);
assert (a[254] == 4711);
}
{
var foo = new Foo ();
foo.manam = new int[255];
foo.manam[254] = 4711;
assert (foo.manam.length == 255);
assert (foo.manam[254] == 4711);
}
{
var bar = new Bar ();
bar.manar = new int[255];
bar.manar[254] = 4711;
assert (bar.manar.length == 255);
assert (bar.manar[254] == 4711);
}
}
|