This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add simple exception handling macros for XS writers.
[perl5.git] / ext / XS / APItest / APItest.xs
index c675b83..9b7da12 100644 (file)
@@ -2,6 +2,32 @@
 #include "perl.h"
 #include "XSUB.h"
 
+static void throws_exception(int throw_e)
+{
+  if (throw_e)
+    croak("boo\n");
+}
+
+static int exception(int throw_e)
+{
+  dTHR;
+  dXCPT;
+  SV *caught = get_sv("XS::APItest::exception_caught", 0);
+
+  XCPT_TRY_START {
+    throws_exception(throw_e);
+  } XCPT_TRY_END
+
+  XCPT_CATCH
+  {
+    sv_setiv(caught, 1);
+    XCPT_RETHROW;
+  }
+
+  sv_setiv(caught, 0);
+
+  return 42;
+}
 
 MODULE = XS::APItest:Hash              PACKAGE = XS::APItest::Hash
 
@@ -329,6 +355,9 @@ require_pv(pv)
        PUTBACK;
        require_pv(pv);
 
-
-
+int
+exception(throw_e)
+    int throw_e
+    OUTPUT:
+        RETVAL