#include #include #include #include "haskell2c.h" #include "initend.h" /* cExitWith :: ExitCode -> a */ #if defined(__CYGWIN32__) || defined(__MINGW32__) extern jmp_buf exit_mutator; #else extern sigjmp_buf exit_mutator; #endif C_HEADER(cExitWith) { NodePtr nodeptr; nodeptr = C_GETARG1(1); IND_REMOVE(nodeptr); switch(GET_CONSTR(nodeptr)) { case ExitSuccess : exit_code = 0; break; case ExitFailure : nodeptr = GET_POINTER_ARG1(nodeptr,1); IND_REMOVE(nodeptr); exit_code = GET_INT_VALUE(nodeptr); break; } #if defined(__CYGWIN32__) || defined(__MINGW32__) longjmp(exit_mutator, 1); #else siglongjmp(exit_mutator,1); #endif C_RETURN(0); }