/usr/local/lib/perl5/site_perl/5.26.1/x86_64-linux/XS/Framework.x/i/xs/catch.h | |||
---|---|---|---|
Criterion | Covered | Total | % |
statement | 6 | 6 | 100.0 |
branch | 64 | 600 | 10.6 |
condition | n/a | ||
subroutine | n/a | ||
pod | n/a | ||
total | 70 | 606 | 11.5 |
line | stmt | bran | cond | sub | pod | time | code |
---|---|---|---|---|---|---|---|
1 | #pragma once | ||||||
2 | #include <xs/Sub.h> | ||||||
3 | #include <functional> | ||||||
4 | #include <panda/exception.h> | ||||||
5 | |||||||
6 | namespace xs { | ||||||
7 | |||||||
8 | using CatchHandlerSimple = std::function<Sv()>; | ||||||
9 | using CatchHandler = std::function<Sv(const Sub&)>; | ||||||
10 | |||||||
11 | using ExceptionProcessor = std::function<Sv(Sv& ex, const Sub&)>; | ||||||
12 | using ExceptionProcessorSimple = std::function<Sv(Sv& ex)>; | ||||||
13 | |||||||
14 | void add_catch_handler (CatchHandlerSimple f); | ||||||
15 | void add_catch_handler (CatchHandler f); | ||||||
16 | |||||||
17 | void add_exception_processor(ExceptionProcessor f); | ||||||
18 | void add_exception_processor(ExceptionProcessorSimple f); | ||||||
19 | |||||||
20 | Sv _exc2sv (const Sub&); | ||||||
21 | |||||||
22 | 19526 | template <typename F> static inline auto throw_guard (CV* context, F&& f) -> decltype(f()) { | |||||
23 | SV* exc; | ||||||
24 | 19526 | 50 | try { return f(); } | ||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
100 | |||||||
100 | |||||||
100 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
100 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
25 | 24 | catch (...) { | |||||
26 | 24 | 0 | auto tmp = xs::_exc2sv(context); | ||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
27 | 12 | 0 | if (tmp) exc = tmp.detach(); | ||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
50 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
0 | |||||||
28 | else exc = newSVpvs("<empty exception>"); | ||||||
29 | } | ||||||
30 | 12 | croak_sv(sv_2mortal(exc)); | |||||
31 | } | ||||||
32 | |||||||
33 | } |