typedef struct Semaphore{ union Data* semaphore; __code p(Impl* semaphore, __code next(...)); __code v(Impl* semaphore, __code next(...)); __code next(...); } Semaphore;