module's C<XS_VERSION> variable. This is usually handled automatically by
C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">.
+=head1 Simple Exception Handling Macros
+
+=for apidoc Ams||dXCPT
+Set up neccessary local variables for exception handling.
+See L<perlguts/"Exception Handling">.
+
+=for apidoc AmU||XCPT_TRY_START
+Starts a try block. See L<perlguts/"Exception Handling">.
+
+=for apidoc AmU||XCPT_TRY_END
+Ends a try block. See L<perlguts/"Exception Handling">.
+
+=for apidoc AmU||XCPT_CATCH
+Introduces a catch block. See L<perlguts/"Exception Handling">.
+
+=for apidoc Ams||XCPT_RETHROW
+Rethrows a previously caught exception. See L<perlguts/"Exception Handling">.
+
=cut
*/
if ( !sv_derived_from(_sv, "version") ) \
_sv = new_version(_sv); \
if ( vcmp(_sv,xssv) ) \
- Perl_croak(aTHX_ "%s object version %_ does not match %s%s%s%s %_",\
+ Perl_croak(aTHX_ "%s object version %"SVf" does not match %s%s%s%s %"SVf,\
module, vstringify(xssv), \
vn ? "$" : "", vn ? module : "", vn ? "::" : "", \
vn ? vn : "bootstrap parameter", vstringify(_sv));\
# define XS_VERSION_BOOTCHECK
#endif
+#ifdef NO_XSLOCKS
+# define dXCPT dJMPENV; int rEtV = 0
+# define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
+# define XCPT_TRY_END JMPENV_POP;
+# define XCPT_CATCH if (rEtV != 0)
+# define XCPT_RETHROW JMPENV_JUMP(rEtV)
+#endif
+
/*
The DBM_setFilter & DBM_ckFilter macros are only used by
the *DB*_File modules