Blame parts/inc/exception

Packit 7d6a7d
################################################################################
Packit 7d6a7d
##
Packit 7d6a7d
##  Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
Packit 7d6a7d
##  Version 2.x, Copyright (C) 2001, Paul Marquess.
Packit 7d6a7d
##  Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
Packit 7d6a7d
##
Packit 7d6a7d
##  This program is free software; you can redistribute it and/or
Packit 7d6a7d
##  modify it under the same terms as Perl itself.
Packit 7d6a7d
##
Packit 7d6a7d
################################################################################
Packit 7d6a7d
Packit 7d6a7d
=provides
Packit 7d6a7d
Packit 7d6a7d
dXCPT
Packit 7d6a7d
XCPT_TRY_START
Packit 7d6a7d
XCPT_TRY_END
Packit 7d6a7d
XCPT_CATCH
Packit 7d6a7d
XCPT_RETHROW
Packit 7d6a7d
Packit 7d6a7d
=implementation
Packit 7d6a7d
Packit 7d6a7d
#ifdef NO_XSLOCKS
Packit 7d6a7d
#  ifdef dJMPENV
Packit 7d6a7d
#    define dXCPT             dJMPENV; int rEtV = 0
Packit 7d6a7d
#    define XCPT_TRY_START    JMPENV_PUSH(rEtV); if (rEtV == 0)
Packit 7d6a7d
#    define XCPT_TRY_END      JMPENV_POP;
Packit 7d6a7d
#    define XCPT_CATCH        if (rEtV != 0)
Packit 7d6a7d
#    define XCPT_RETHROW      JMPENV_JUMP(rEtV)
Packit 7d6a7d
#  else
Packit 7d6a7d
#    define dXCPT             Sigjmp_buf oldTOP; int rEtV = 0
Packit 7d6a7d
#    define XCPT_TRY_START    Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
Packit 7d6a7d
#    define XCPT_TRY_END      Copy(oldTOP, top_env, 1, Sigjmp_buf);
Packit 7d6a7d
#    define XCPT_CATCH        if (rEtV != 0)
Packit 7d6a7d
#    define XCPT_RETHROW      Siglongjmp(top_env, rEtV)
Packit 7d6a7d
#  endif
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
=xsmisc
Packit 7d6a7d
Packit 7d6a7d
/* defined in module3.c */
Packit 7d6a7d
int exception(int throw_e);
Packit 7d6a7d
Packit 7d6a7d
=xsubs
Packit 7d6a7d
Packit 7d6a7d
int
Packit 7d6a7d
exception(throw_e)
Packit 7d6a7d
  int throw_e
Packit 7d6a7d
  OUTPUT:
Packit 7d6a7d
    RETVAL
Packit 7d6a7d
Packit 7d6a7d
=tests plan => 7
Packit 7d6a7d
Packit 7d6a7d
my $rv;
Packit 7d6a7d
Packit 7d6a7d
$Devel::PPPort::exception_caught = undef;
Packit 7d6a7d
Packit 7d6a7d
$rv = eval { &Devel::PPPort::exception(0) };
Packit 7d6a7d
ok($@, '');
Packit 7d6a7d
ok(defined $rv);
Packit 7d6a7d
ok($rv, 42);
Packit 7d6a7d
ok($Devel::PPPort::exception_caught, 0);
Packit 7d6a7d
Packit 7d6a7d
$Devel::PPPort::exception_caught = undef;
Packit 7d6a7d
Packit 7d6a7d
$rv = eval { &Devel::PPPort::exception(1) };
Packit 7d6a7d
ok($@, "boo\n");
Packit 7d6a7d
ok(not defined $rv);
Packit 7d6a7d
ok($Devel::PPPort::exception_caught, 1);