Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/working/exception/impl/test-main.c

    re1055441 r35ba584c  
    66#include <stdbool.h>
    77
    8 // Helps with manual translation. It may or may not get folded into the
    9 // header, that depends on how it interacts with concurancy.
     8// Translation Helpers:
     9#define CLEANUP(function) \
     10        struct __cleanup_hook __hidden_hook __attribute__((cleanup(function)))
     11
     12#define SET_UP_RESUME_NODE(handler_function) \
     13        struct __try_resume_node node \
     14                __attribute__((cleanup(__try_resume_node_delete))); \
     15        __try_resume_node_new(&node, handler_function)
     16
    1017void __try_resume_node_new(struct __try_resume_node * node,
    1118        _Bool (*handler)(exception except)) {
     
    1320    shared_stack.top_resume = node;
    1421    node->try_to_handle = handler;
     22}
     23
     24void __try_resume_node_delete(struct __try_resume_node * node) {
     25    shared_stack.top_resume = node->next;
    1526}
    1627
     
    111122                }
    112123                struct __try_resume_node node
    113                         __attribute__((cleanup(__try_resume_cleanup)));
     124                        __attribute__((cleanup(__try_resume_node_delete)));
    114125                __try_resume_node_new(&node, beta_handle1);
    115126                {
     
    133144                }
    134145                struct __try_resume_node node
    135                         __attribute__((cleanup(__try_resume_cleanup)));
     146                        __attribute__((cleanup(__try_resume_node_delete)));
    136147                __try_resume_node_new(&node, alpha_handle1);
    137148                {
     
    142153
    143154// Finally Test:
    144 void farewell(bool jump) {
     155void farewell() {
    145156        {
    146157                void farewell_finally1() {
     
    150161                        __attribute__((cleanup(farewell_finally1)));
    151162                {
    152                         if (jump) {
    153                                 printf("jump out of farewell\n");
    154                                 goto endoffunction;
    155                         } else {
    156                                 printf("walk out of farewell\n");
    157                         }
    158                 }
    159         }
    160         endoffunction:
    161         printf("leaving farewell\n");
     163                        printf("walk out of farewell\n");
     164                }
     165        }
    162166}
    163167
     
    256260                }
    257261                struct __try_resume_node node
    258                         __attribute__((cleanup(__try_resume_cleanup)));
     262                        __attribute__((cleanup(__try_resume_node_delete)));
    259263                __try_resume_node_new(&node, fn_handle1);
    260264                {
     
    275279                }
    276280                struct __try_resume_node node
    277                         __attribute__((cleanup(__try_resume_cleanup)));
     281                        __attribute__((cleanup(__try_resume_node_delete)));
    278282                __try_resume_node_new(&node, fn_handle1);
    279283                {
     
    345349                }
    346350                struct __try_resume_node node
    347                         __attribute__((cleanup(__try_resume_cleanup)));
     351                        __attribute__((cleanup(__try_resume_node_delete)));
    348352                __try_resume_node_new(&node, reresume_handle1);
    349353                {
     
    357361                        }
    358362                        struct __try_resume_node node
    359                                 __attribute__((cleanup(__try_resume_cleanup)));
     363                                __attribute__((cleanup(__try_resume_node_delete)));
    360364                        __try_resume_node_new(&node, reresume_handle2);
    361365                        {
     
    405409                }
    406410                struct __try_resume_node node
    407                         __attribute__((cleanup(__try_resume_cleanup)));
     411                        __attribute__((cleanup(__try_resume_node_delete)));
    408412                __try_resume_node_new(&node, foe_handle1);
    409413                {
     
    452456                }
    453457                struct __try_resume_node node
    454                         __attribute__((cleanup(__try_resume_cleanup)));
     458                        __attribute__((cleanup(__try_resume_node_delete)));
    455459                __try_resume_node_new(&node, fee_handle1);
    456460                {
     
    467471        foo(); printf("\n");
    468472        alpha(); printf("\n");
    469         farewell(false); printf("\n");
    470         farewell(true); printf("\n");
     473        farewell(); printf("\n");
    471474        fallback(); printf("\n");
    472475        terminate_swapped(); printf("\n");
Note: See TracChangeset for help on using the changeset viewer.