/* 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, 2021 -- leonerd@leonerd.org.uk
*/
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "XSParseKeyword.h"
static bool permit_stages(pTHX_ void *hookdata)
{
HV *hints = GvHV(PL_hintgv);
if(hv_fetchs(hints, "t::stages/permitfunc", 0))
return TRUE;
return FALSE;
}
static void check_stages(pTHX_ void *hookdata)
{
if(hv_fetchs(GvHV(PL_hintgv), "t::stages/check-capture", 0)) {
sv_setsv(get_sv("t::stages::captured", GV_ADD), get_sv("main::VAR", 0));
}
}
static int parse_stages(pTHX_ OP **out, void *hookdata)
{
/* Parse and ignore a block */
OP *block = parse_block(0);
op_free(block);
*out = newSVOP(OP_CONST, 0, newSVpvs("STAGE"));
return KEYWORD_PLUGIN_EXPR;
}
static const struct XSParseKeywordHooks hooks_stages = {
.permit_hintkey = "t::stages/permitkey",
.permit = &permit_stages,
.check = &check_stages,
.parse = &parse_stages,
};
MODULE = t::stages PACKAGE = t::stages
BOOT:
boot_xs_parse_keyword(0);
register_xs_parse_keyword("stages", &hooks_stages, NULL);