|
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);
|