diff options
author | David Mitchell <davem@iabyn.com> | 2014-06-27 11:52:44 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2014-07-08 16:40:03 +0100 |
commit | 29e61fd971cd4373e17cf1dd6e954ddea5171299 (patch) | |
tree | 98cedf27877b50dba8ab0a7c7e781bd4a21275f3 /dump.c | |
parent | c4b209751862a812e3cb3d6951c4f9411b0ca0af (diff) | |
download | perl-29e61fd971cd4373e17cf1dd6e954ddea5171299.tar.gz |
add op_lastsib and -DPERL_OP_PARENT
Add the boolean field op_lastsib to OPs. Within the core, this is set
on the last op in an op_sibling chain (so it is synonymous with op_sibling
being null). By default, its value is set but not used.
In addition, add a new build define (not yet enabled by default),
-DPERL_OP_PARENT, that forces the core to use op_lastsib to detect the
last op in a sibling chain, rather than op_sibling being NULL. This frees
up the last op_sibling pointer in the chain, which rather than being set
to NULL, is now set to point back to the parent of the sibling chain (if
any).
This commit also adds a C-level op_parent() function and B parent()
method; under default builds they just return NULL, under PERL_OP_PARENT
they return the parent of the current op.
Collectively this provides a facility not previously available from B:: nor
C, of being able to follow an op tree up as well as down.
Diffstat (limited to 'dump.c')
-rw-r--r-- | dump.c | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -901,6 +901,7 @@ S_op_private_to_names(pTHX_ SV *tmpsv, U32 optype, U32 op_private) { if (o->op_savefree) sv_catpvs(tmpsv, ",SAVEFREE"); \ if (o->op_static) sv_catpvs(tmpsv, ",STATIC"); \ if (o->op_folded) sv_catpvs(tmpsv, ",FOLDED"); \ + if (o->op_lastsib) sv_catpvs(tmpsv, ",LASTSIB"); \ Perl_dump_indent(aTHX_ level, file, "FLAGS = (%s)\n", \ SvCUR(tmpsv) ? SvPVX_const(tmpsv) + 1 : ""); \ } |