source: src/tests/memberCtors.c@ 96fc67b

ADT arm-eh ast-experimental cleanup-dtors enum forall-pointer-decay jacob/cs343-translation jenkins-sandbox new-ast new-ast-unique-expr pthread-emulation qualifiedEnum
Last change on this file since 96fc67b was 72f85de, checked in by Rob Schluntz <rschlunt@…>, 8 years ago

Update memberCtors test

  • Property mode set to 100644
File size: 2.3 KB
Line 
1struct WrappedInt {
2 int x;
3};
4
5void ?{}(WrappedInt & this) {
6 printf("constructing int\n");
7 this.x = 0;
8}
9
10void ?{}(WrappedInt & this, WrappedInt other) {
11 printf("copy constructing int: %d\n", other.x);
12 this.x = other.x;
13}
14
15void ?{}(WrappedInt & this, int x) {
16 printf("constructing int: %d\n", x);
17 this.x = x;
18}
19
20void ^?{}(WrappedInt & this) {
21 printf("destructing int: %d\n", this.x);
22}
23
24/* WrappedInt */ void ?=?(WrappedInt & this, int x) {
25 printf("assigning int: %d %d\n", this.x, x);
26 this.x = x;
27 // return this;
28}
29
30// WrappedInt ?=?(WrappedInt & this, WrappedInt other) {
31// printf("assigning int: %d %d\n", this.x, other.x);
32// this.x = other.x;
33// return this;
34// }
35
36struct A {
37 WrappedInt x, y, z;
38};
39
40void ?{}(A & a) {
41 // currently must define default ctor, since there's no "= default" syntax
42}
43
44void ?{}(A & a, int x) {
45 printf("begin construct A\n");
46 printf("construct a.x\n");
47 (a.x){ x+999 };
48 printf("assign a.y\n");
49 a.y = 0; // not a constructor - default constructor will be inserted
50 printf("end construct A\n");
51} // z never constructed - will be automatically default constructed
52
53void ?{}(A & this, A other) {
54 printf("begin copy construct A\n");
55 printf("copy construct this.x\n");
56 (this.x){ other.x };
57 printf("assign this.y\n");
58 this.y = other.y; // not a constructor - copy constructor will be inserted
59 printf("end copy construct A\n");
60} // z never constructed - will be automatically copy constructed
61
62A ?=?(A & this, A other) {
63 printf("begin ?=? A\n");
64 this.x = other.x;
65 this.y = other.y;
66 this.z = other.z;
67 printf("end ?=? A\n");
68 return this;
69}
70
71struct B {
72 A a1, a2, a3;
73};
74
75void ?{}(B & b) {
76 printf("begin construct B\n");
77 printf("assign b.a2\n");
78 b.a2 = (A) { 2 };
79 printf("construct b.a1\n");
80 (b.a1){ 1 };
81#ifdef ERR1
82 (b.a2){ b.a3 }; // error, b->a2 was used previously but is explicitly constructed
83#endif
84 printf("end construct B\n");
85} // a2, a3 never constructed - will be automatically default constructed
86
87void ^?{}(B & b) {
88 printf("begin destruct B\n");
89 b.a2 = (A) { 0 };
90 ^(b.a1){};
91 printf("end destruct B\n");
92} // a2, a3 never destructed - will be automatically destructed
93
94int main() {
95 printf("Before declaration of b1\n");
96 B b1; // b1 = { { 1000, 0, 0 }, { 1001, 0, 0 }, { 0, 0, 0 } }
97 printf("Before declaration of b2\n");
98 B b2 = b1;
99 printf("End of main\n");
100}
Note: See TracBrowser for help on using the repository browser.