// Testing Interactions Between Termination and Resumption #include "except-mac.hfa" #include "except-io.hfa" TRIVIAL_EXCEPTION(star); int main(int argc, char * argv[]) { // Resume falls back to terminate. try { THROW_RESUME(&(star){}); } catch (star *) { printf("caught as termination\n"); } // Variant of the above to check timing. try { loud_region a = "try block with resume throw"; THROW_RESUME(&(star){}); } catch (star *) { printf("caught as termination\n"); } catchResume (star *) { printf("intermediate rethrow\n"); throwResume; } printf("\n"); // Resume does not catch terminate. try { try { THROW(&(star){}); } catchResume (star *) { printf("resume catch on terminate\n"); } } catchResume (star *) { printf("resume catch on terminate\n"); } catch (star *) { printf("terminate catch on terminate\n"); } printf("\n"); // Terminate does not catch resume. try { try { THROW_RESUME(&(star){}); } catch (star *) { printf("terminate catch on resume\n"); } } catch (star *) { printf("terminate catch on resume\n"); } catchResume (star *) { printf("resume catch on resume\n"); } }