blob: 704363d29ded17750e49248a2fbd84e6ead159ab (
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
|
int i;
int#[3] arr;
int^ normal_const1 = @i;
int+> flexi_const1 = @arr#[0];
int*> raw_const1 = @i;
int+*> rawflexi_const1 = @arr#[0];
int var^ normal1 = @i;
int var+> flexi1 = @arr#[0];
int var*> raw1 = @i;
int var+*> rawflexi1 = @arr#[0];
// This is allowed (but *>? is not)
int+>? allowed;
() test()
{
int^ normal_const2 = @i;
int+> flexi_const2 = @arr#[0];
int*> raw_const2 = @i;
int+*> rawflexi_const2 = @arr#[0];
int var^ normal2 = @i;
int var+> flexi2 = @arr#[0];
int var*> raw2 = @i;
int var+*> rawflexi2 = @arr#[0];
int var^? optptr;
var int j;
j = normal1^;
j = normal2^;
j = flexi1^;
j = flexi2^;
j = raw1^;
j = raw2^;
j = rawflexi1^;
j = rawflexi2^;
rawflexi1 = normal1;
normal1 = rawflexi1;
// TODO implement arithmetic operators for flexi pointers?
/*flexi1 += 1;
flexi2 += 1;
rawflexi1 += 1;
rawflexi2 += 1;*/
j = flexi1#[1];
j = flexi2#[1];
j = rawflexi1#[1];
j = rawflexi2#[1];
flexi1 = @flexi1#[1];
flexi2 = @flexi2#[1];
rawflexi1 = @rawflexi1#[1];
rawflexi2 = @rawflexi2#[1];
raw1 = none;
raw2 = none;
rawflexi1 = none;
rawflexi2 = none;
optptr = raw1;
optptr = raw2;
optptr = rawflexi1;
optptr = rawflexi2;
raw1 = optptr;
raw2 = optptr;
rawflexi1 = optptr;
rawflexi2 = optptr;
}
|