source: tests/raii/ctor-autogen.cfa @ c25f16b

Last change on this file since c25f16b was fd54fef, checked in by Michael Brooks <mlbrooks@…>, 4 years ago

Converting the project to use the new syntax for otype, dtype and ttytpe.

Changed prelude (gen), libcfa and test suite to use it. Added a simple deprecation rule of the old syntax to the parser; we might wish to support both syntaxes "officially," like with an extra CLI switch, but this measure should serve as a simple reminder for our team to try the new syntax.

  • Property mode set to 100644
File size: 2.9 KB
RevLine 
[c6e6333]1// TODO: add error cases (e.g., use of field constructors for managed types, etc.)
2
[8e138da]3enum Color { R, G, B };
4
5// empty struct/union should have generated ctor/dtors
6union U {};
7struct S {};
8
[c6e6333]9struct SimpleUnion {
10        int x;
11        double y;
12        char z;
13};
14
15struct SimpleStruct {
16        int x;
17        double y;
18        char z;
19};
20
[8e138da]21// struct/union with members with generated ctor/dtors should themselves have generated ctor/dtors
22union PopulatedUnion {
23        Color c;
24        U u;
25        S s;
26};
27
28struct PopulatedStruct {
[c6e6333]29        Color c;
[8e138da]30        U u;
31        S s;
32};
33
[86f852b]34// dtype-static generic type is otype
[fd54fef]35forall(T &)
[86f852b]36struct DtypeStaticStruct {
37  T * data;
38  short size;
39};
40
[fd54fef]41forall(T &)
[86f852b]42union DtypeStaticUnion {
43  T * data;
44  short size;
45};
46
47// dynamic generic type is otype
[fd54fef]48forall(T)
[86f852b]49struct DynamicStruct {
50        T x;
51};
52
[fd54fef]53forall(T)
[86f852b]54union DynamicUnion {
55        T x;
56};
57
58// struct/union that contains a generic type is
59struct GenericContainingStruct {
60        DynamicStruct(int) dsi;
61        DynamicStruct(double) dsd;
62        DynamicUnion(int) dui;
63        DynamicUnion(double) dud;
64        DtypeStaticStruct(int) dssi;
65        DtypeStaticStruct(float) dssf;
66        DtypeStaticUnion(int) dsui;
67        DtypeStaticUnion(float) dsuf;
68};
69
70union GenericContainingUnion {
71        DynamicStruct(int) dsi;
72        DynamicStruct(double) dsd;
73        DynamicUnion(int) dui;
74        DynamicUnion(double) dud;
75        DtypeStaticStruct(int) dssi;
76        DtypeStaticStruct(float) dssf;
77        DtypeStaticUnion(int) dsui;
78        DtypeStaticUnion(float) dsuf;
79};
80
81
[fd54fef]82forall(T)
[86f852b]83T identity(T x) { return x; }
84
85// can identity e if only sized or only the assertion, but the combination breaks...
86// forall(dtype T | sized(T) | { void ?{}(T &); })
87// void identity(T x) {  }
88
89#if ERR1
[b93a3de]90// managed type - defines a constructor - can't use field constructors
91struct Managed {
92        int x;
93};
94
95void ?{}(Managed & m) { m.x = 0; }
96
97// managed type since it contains a managed type - can't use field constructors
98struct InheritManaged {
99        Managed m;
100};
101
[86f852b]102Managed x = { 123 }; // error
103Managed y;           // okay
[8e138da]104
[86f852b]105InheritManaged z = { y };  // error?
106#endif
[c6e6333]107
[8e138da]108int main() {
109        S s;
110        U u;
[c6e6333]111        Color e;
[8e138da]112
[86f852b]113        // identity(R);  Color constant should be Color which is otype
114        identity(e);  // Color should be an otype
[8e138da]115        identity(u);  // U should be an otype
116        identity(s);  // S should be an otype
117
[b93a3de]118        SimpleStruct ss;
119        SimpleUnion su;
120
121        identity(ss);
122        identity(su);
123
[8e138da]124        PopulatedStruct ps;
125        PopulatedUnion pu;
126
127        identity(ps); // should recursively be an otype
128        identity(pu); // should recursively be an otype
[b93a3de]129
[86f852b]130        DynamicStruct(int) dsi;
131        DynamicStruct(double) dsd;
132        DynamicUnion(int) dui;
133        DynamicUnion(double) dud;
134        DtypeStaticStruct(int) dssi;
135        DtypeStaticStruct(float) dssf;
136        DtypeStaticUnion(int) dsui;
137        DtypeStaticUnion(float) dsuf;
138
139        identity(dsi);
140        identity(dsd);
141        // identity(dui); // xxx - codegen errors in generated thunk _temp3 (Box-pass-generated assignment return-temporary)
142        // identity(dud);
143        identity(dssi);
144        identity(dssf);
145        identity(dsui);
146        identity(dsuf);
147
148        GenericContainingStruct gcs;
149        GenericContainingUnion gcu;
150
151        identity(gcs);
152        identity(gcu);
[66812dd]153        printf( "done\n" );                             // non-empty .expect file
[8e138da]154}
Note: See TracBrowser for help on using the repository browser.