=head1 NAME

  ExtUtils::ExCxx - Switch to ANSI C++ exceptions

=head1 SYNOPSIS

  use ExtUtils::ExCxx;

=head1 DESCRIPTION

Switch perl's default TRYBLOCK method to a C++ try/throw style method
at run-time.  This should be completely transparent (except to
extensions that covertly invoke such low-level exception handling
routines :-).

=head1 IS C++ FASTER?

Yes, for some definition of 'faster':

  $ perl -Mblib ./bench.pl

  [ setjmp ] 20 secs (18.79 usr  2.02 sys = 20.81 cpu)
  [ cxx    ] 17 secs (17.14 usr  0.00 sys = 17.14 cpu)

=head1 PATCHES

At the moment, this extension requires patches to the perl source
code.  Hopefully, these changes will make it into the next developer
release.  Either apply stage0[1-3] or the whole.patch to 5.004_56.

'make test' should be 100%!

(FYI: You don't need to built this extension to test the patch.)

=head2 ALSO

call_list should probably be optimized to call TRYBLOCK only once
instead of doing it for each BEGIN or END block.  However, the control
flow is messy enough that I didn't attempt it.

dJMPENV is setjmp-centric.  This might be construed as a bug.

=head2 FUNCTIONS AFFECTED

=over 4

=item * JMPENV_PUSH

  perl_call_sv
  perl_eval_sv
  docatch
  perl_parse
  perl_run
  call_list

=item * JMPENV_JUMP

  die
  croak
  docatch
  pp_goto
  calllist
  my_exit_jump

=back

=head1 BUGS

sigsetjmp saves more state than a C++ try block.  sigprocmask &
priocntl stuff should be addressed.

=head1 AUTHOR

Copyright  1997-1998 Joshua Nathaniel Pritikin.  All rights reserved.

This package is free software and is provided "as is" without express
or implied warranty.  It may be used, redistributed and/or modified
under the terms of the Perl Artistic License (see
http://www.perl.com/perl/misc/Artistic.html)

The author hereby releases the included patches to the perl source
code to the public domain.  Thanks a ton!  pritikin@mindspring.com

=cut
