source: tests/enum_tests/enumInlineValue.cfa@ e0330d2c

Last change on this file since e0330d2c was eae8b37, checked in by JiadaL <j82liang@…>, 10 months ago

Move enum.hfa/enum.cfa to prelude

  • Property mode set to 100644
File size: 2.4 KB
Line 
1#include <fstream.hfa>
2
3enum(int) A !{
4 a = 10
5};
6
7enum(int) B {
8 b = 20
9};
10
11enum(int) AB {
12 inline A,
13 inline B,
14 ab = 30
15};
16
17enum(int) C {
18 c = 40
19};
20
21enum(int) D {
22 d = 50
23};
24
25enum(int) CD {
26 inline C,
27 inline D,
28 cd = 60
29};
30
31enum(int) ACD {
32 inline A,
33 inline CD,
34 acd = 70
35};
36
37// Note: variable name (cat in this case) cannot be overloaded with those declared in enum,
38// Probably for the same reason as const overloading problem
39// i.e. int identity_t(enum ACD a) would not work as the value(a) is ambigious currently
40int identity_t(enum ACD cat) {
41 return value(cat);
42}
43
44int main() {
45 // Note: We need to use qualified name syntax even if no ! hidding
46 // Because Inline introduce ambiguity on symbols
47 sout | "Symbols (enumerator) should have the same values:" |nl;
48 sout | "Symbol a: (10) " | value(A.a) | "," | value(AB.a) | "," | value(ACD.a) | nl;
49 sout | "Symbol b: (20) " | value(B.b) | "," | value(AB.b) | nl;
50 sout | "Symbol ab: (30) " | value(AB.ab) | nl;
51 sout | "Symbol c: (40) " | value(C.c) | "," | value(CD.c) | "," | value(ACD.c) | nl;
52 sout | "Symbol d: (50) " | value(D.d) | "," | value(CD.d) | "," | value(ACD.d) | nl;
53 sout | "Symbol cd: (60) " | value(CD.cd) | "," | value(ACD.cd) | nl;
54 sout | "Symbol acd: (70) " | value(ACD.acd) | nl;
55
56 sout | "Casting/Upcasting:" | nl;
57 sout | "Symbol a: (10) " | value((A)A.a) | "," | value((AB)A.a) | "," | value((ACD)A.a) | nl;
58 sout | "Symbol b: (20) " | value((B)B.b) | "," | value((AB)B.b) | nl;
59 sout | "Symbol ab: (30) " | value((AB)AB.ab) | nl;
60 sout | "Symbol c: (40) " | value((C)C.c) | "," | value((CD)C.c) | "," | value((ACD)C.c) | "," | value((CD)CD.c)| "," | value((ACD)CD.c) | nl;
61 sout | "Symbol d: (50) " | value((D)D.d) | "," | value((CD)D.d) | "," | value((ACD)D.d) | "," | value((ACD)CD.d) | nl;
62 sout | "Symbol cd: (60) " | value((CD)CD.cd) | "," | value((ACD)CD.cd) | nl;
63 sout | "Symbol acd: (70) " | value((ACD)ACD.acd) | nl;
64
65 sout | "Function Call:" | nl;
66 sout | "Symbol a: (10) " | identity_t(A.a) | "," | identity_t(ACD.a) | nl;
67 sout | "Symbol c: (40) " | identity_t(C.c) | "," | identity_t(ACD.c) | nl;
68 sout | "Symbol d: (50) " | identity_t(D.d) | "," | identity_t(ACD.d) | nl;
69 sout | "Symbol cd: (60) " | identity_t(CD.cd) | "," | identity_t(ACD.cd) | nl;
70 sout | "Symbol acd: (70) " | identity_t(ACD.acd) | nl;
71}
Note: See TracBrowser for help on using the repository browser.