source: tests/exceptions/except-1.cfa @ e53e5aa

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since e53e5aa was c0b2a631, checked in by Andrew Beach <ajbeach@…>, 5 years ago

Added the exceptions test folder.

  • Property mode set to 100644
File size: 1.2 KB
RevLine 
[86d5ba7c]1// Draft memory management test. (remember -fexceptions)
[fcc88a4]2// Outdated: The integer constant exceptions need to be replaced with virtual
3// exceptions for the new system.
[86d5ba7c]4
5#include <stdio.h>
6
[dc8511c]7#include "except-mac.hfa"
[e9145a3]8TRIVIAL_EXCEPTION(yin)
9TRIVIAL_EXCEPTION(yang)
10
[86d5ba7c]11int main()
12{
13        try {
[e9145a3]14                yin a;
15                THROW(&a);
[86d5ba7c]16        }
[e9145a3]17        catch( yin * err ) {
[86d5ba7c]18                printf("First Caught\n");
19                try {
[e9145a3]20                        yang b;
21                        THROW(&b);
[86d5ba7c]22                }
[e9145a3]23                catch( yang * err ) {
[86d5ba7c]24                        printf("Both Caught\n");
25                }
26        }
27        printf("Part A Complete\n");
28
29        try {
30                try {
[e9145a3]31                        yang c;
32                        THROW(&c);
[86d5ba7c]33                }
[e9145a3]34                catch( yang * err ) {
[86d5ba7c]35                        printf("First Catch and rethrow\n");
36                        throw;
37                }
38        }
[e9145a3]39        catch( yang * err ) {
[86d5ba7c]40                printf("Second Catch\n");
41        }
42        printf("Part B Complete\n");
43
44        try {
45                try {
[e9145a3]46                        yin d;
47                        THROW(&d);
[86d5ba7c]48                }
[e9145a3]49                catch( yin * err ) {
[86d5ba7c]50                        printf("Throw before cleanup\n");
[e9145a3]51                        yang e;
52                        THROW(&e);
[86d5ba7c]53                }
54        }
[e9145a3]55        catch( yang * err ) {
[86d5ba7c]56                printf("Catch after cleanup\n");
57        }
58        printf("Part C Complete\n");
[ff7ff14a]59
60        try {
61                try {
[e9145a3]62                        yin f;
63                        THROW(&f);
[ff7ff14a]64                }
[e9145a3]65                catch( yin * err ) {
[ff7ff14a]66                        printf("Caught initial throw.\n");
67                        try {
[e9145a3]68                                yang g;
69                                THROW(&g);
[ff7ff14a]70                        }
[e9145a3]71                        catch( yang * err ) {
[ff7ff14a]72                                printf("Caught intermediate throw.\n");
73                        }
74                        throw;
75                }
76        }
[e9145a3]77        catch( yin * err ) {
[ff7ff14a]78                printf("Caught final throw.\n");
79        }
80        printf("Part D Complete\n");
[86d5ba7c]81}
Note: See TracBrowser for help on using the repository browser.