File Coverage

t/prefix.xs
Criterion Covered Total %
statement 27 27 100.0
branch n/a
condition n/a
subroutine n/a
pod n/a
total 27 27 100.0


line stmt bran cond sub pod time code
1             /* You may distribute under the terms of either the GNU General Public License
2             * or the Artistic License (the same terms as Perl itself)
3             *
4             * (C) Paul Evans, 2020 -- leonerd@leonerd.org.uk
5             */
6              
7             #include "EXTERN.h"
8             #include "perl.h"
9             #include "XSUB.h"
10              
11             #include "XSParseSublike.h"
12              
13 1           static void func_pre_subparse(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
14             {
15             SV *logsv = _logsv;
16 1           sv_catpvs(logsv, "Sf");
17 1           }
18              
19 1           static void func_post_blockstart(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
20             {
21             SV *logsv = _logsv;
22 1           sv_catpvs(logsv, "Ef");
23 1           }
24              
25 1           static void func_pre_blockend(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
26             {
27             SV *logsv = _logsv;
28 1           sv_catpvs(logsv, "Lf");
29 1           }
30              
31 1           static void func_post_newcv(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
32             {
33             SV *logsv = _logsv;
34 1           sv_catpvs(logsv, "Nf");
35 1           }
36              
37             static const struct XSParseSublikeHooks parse_func_hooks = {
38             .ver = XSPARSESUBLIKE_ABI_VERSION,
39             .permit_hintkey = "t::prefix/func",
40             .pre_subparse = func_pre_subparse,
41             .post_blockstart = func_post_blockstart,
42             .pre_blockend = func_pre_blockend,
43             .post_newcv = func_post_newcv,
44             };
45              
46 1           static void prefixed_pre_subparse(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
47             {
48             SV *logsv = _logsv;
49 1           sv_catpvs(logsv, "Sp");
50 1           }
51              
52 1           static void prefixed_post_blockstart(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
53             {
54             SV *logsv = _logsv;
55 1           sv_catpvs(logsv, "Ep");
56 1           }
57              
58 1           static void prefixed_pre_blockend(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
59             {
60             SV *logsv = _logsv;
61 1           sv_catpvs(logsv, "Lp");
62 1           }
63              
64 1           static void prefixed_post_newcv(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
65             {
66             SV *logsv = _logsv;
67 1           sv_catpvs(logsv, "Np");
68 1           }
69              
70             static const struct XSParseSublikeHooks parse_prefixed_hooks = {
71             .ver = XSPARSESUBLIKE_ABI_VERSION,
72             .flags = XS_PARSE_SUBLIKE_FLAG_PREFIX,
73             .permit_hintkey = "t::prefix/prefixed",
74              
75             .pre_subparse = prefixed_pre_subparse,
76             .post_blockstart = prefixed_post_blockstart,
77             .pre_blockend = prefixed_pre_blockend,
78             .post_newcv = prefixed_post_newcv,
79             };
80              
81             MODULE = t::prefix PACKAGE = t::prefix
82              
83             BOOT:
84 1           boot_xs_parse_sublike(0);
85              
86 2           register_xs_parse_sublike("func", &parse_func_hooks, SvREFCNT_inc(get_sv("main::LOG", GV_ADD)));
87 2           register_xs_parse_sublike("prefixed", &parse_prefixed_hooks, SvREFCNT_inc(get_sv("main::LOG", GV_ADD)));