File: prefix.xs

package info (click to toggle)
libxs-parse-sublike-perl 0.37-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 516 kB
  • sloc: ansic: 944; perl: 930; sh: 6; makefile: 3
file content (87 lines) | stat: -rw-r--r-- 2,390 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
/*  You may distribute under the terms of either the GNU General Public License
 *  or the Artistic License (the same terms as Perl itself)
 *
 *  (C) Paul Evans, 2020 -- leonerd@leonerd.org.uk
 */

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "XSParseSublike.h"

static void func_pre_subparse(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Sf");
}

static void func_post_blockstart(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Ef");
}

static void func_pre_blockend(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Lf");
}

static void func_post_newcv(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Nf");
}

static const struct XSParseSublikeHooks parse_func_hooks = {
  .ver             = XSPARSESUBLIKE_ABI_VERSION,
  .permit_hintkey  = "t::prefix/func",
  .pre_subparse    = func_pre_subparse,
  .post_blockstart = func_post_blockstart,
  .pre_blockend    = func_pre_blockend,
  .post_newcv      = func_post_newcv,
};

static void prefixed_pre_subparse(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Sp");
}

static void prefixed_post_blockstart(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Ep");
}

static void prefixed_pre_blockend(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Lp");
}

static void prefixed_post_newcv(pTHX_ struct XSParseSublikeContext *ctx, void *_logsv)
{
  SV *logsv = _logsv;
  sv_catpvs(logsv, "Np");
}

static const struct XSParseSublikeHooks parse_prefixed_hooks = {
  .ver            = XSPARSESUBLIKE_ABI_VERSION,
  .flags          = XS_PARSE_SUBLIKE_FLAG_PREFIX,
  .permit_hintkey = "t::prefix/prefixed",

  .pre_subparse    = prefixed_pre_subparse,
  .post_blockstart = prefixed_post_blockstart,
  .pre_blockend    = prefixed_pre_blockend,
  .post_newcv      = prefixed_post_newcv,
};

MODULE = t::prefix  PACKAGE = t::prefix

BOOT:
  boot_xs_parse_sublike(0);

  register_xs_parse_sublike("func", &parse_func_hooks, SvREFCNT_inc(get_sv("main::LOG", GV_ADD)));
  register_xs_parse_sublike("prefixed", &parse_prefixed_hooks, SvREFCNT_inc(get_sv("main::LOG", GV_ADD)));