Regexp-Fields
view release on metacpan or search on metacpan
sources/regcomp-5.6.0.c view on Meta::CPAN
ret = PL_regcode;
if (SIZE_ONLY) {
SIZE_ALIGN(PL_regsize);
PL_regsize += 1;
return(ret);
}
NODE_ALIGN_FILL(ret);
ptr = ret;
FILL_ADVANCE_NODE(ptr, op);
PL_regcode = ptr;
return(ret);
}
/*
- reganode - emit a node with an argument
*/
STATIC regnode * /* Location. */
S_reganode(pTHX_ U8 op, U32 arg)
{
dTHR;
register regnode *ret;
register regnode *ptr;
ret = PL_regcode;
if (SIZE_ONLY) {
SIZE_ALIGN(PL_regsize);
PL_regsize += 2;
return(ret);
}
NODE_ALIGN_FILL(ret);
ptr = ret;
FILL_ADVANCE_NODE_ARG(ptr, op, arg);
PL_regcode = ptr;
return(ret);
}
/*
- reguni - emit (if appropriate) a Unicode character
*/
STATIC void
S_reguni(pTHX_ UV uv, char* s, I32* lenp)
{
dTHR;
if (SIZE_ONLY) {
U8 tmpbuf[UTF8_MAXLEN];
*lenp = uv_to_utf8(tmpbuf, uv) - tmpbuf;
}
else
*lenp = uv_to_utf8((U8*)s, uv) - (U8*)s;
}
/*
- reginsert - insert an operator in front of already-emitted operand
*
* Means relocating the operand.
*/
STATIC void
S_reginsert(pTHX_ U8 op, regnode *opnd)
{
dTHR;
register regnode *src;
register regnode *dst;
register regnode *place;
register int offset = regarglen[(U8)op];
/* (PL_regkind[(U8)op] == CURLY ? EXTRA_STEP_2ARGS : 0); */
if (SIZE_ONLY) {
PL_regsize += NODE_STEP_REGNODE + offset;
return;
}
src = PL_regcode;
PL_regcode += NODE_STEP_REGNODE + offset;
dst = PL_regcode;
while (src > opnd)
StructCopy(--src, --dst, regnode);
place = opnd; /* Op node, where operand used to be. */
src = NEXTOPER(place);
FILL_ADVANCE_NODE(place, op);
Zero(src, offset, regnode);
}
/*
- regtail - set the next-pointer at the end of a node chain of p to val.
*/
STATIC void
S_regtail(pTHX_ regnode *p, regnode *val)
{
dTHR;
register regnode *scan;
register regnode *temp;
if (SIZE_ONLY)
return;
/* Find last node. */
scan = p;
for (;;) {
temp = regnext(scan);
if (temp == NULL)
break;
scan = temp;
}
if (reg_off_by_arg[OP(scan)]) {
ARG_SET(scan, val - scan);
}
else {
NEXT_OFF(scan) = val - scan;
}
}
/*
( run in 0.868 second using v1.01-cache-2.11-cpan-5511b514fd6 )