NAME
B::Op_private - OP op_private flag definitions
SYNOPSIS
use
B::Op_private;
# flag details for bit 7 of OP_AELEM's op_private:
my
$name
=
$B::Op_private::bits
{aelem}{7};
# OPpLVAL_INTRO
my
$value
=
$B::Op_private::defines
{
$name
};
# 128
my
$label
=
$B::Op_private::labels
{
$name
};
# LVINTRO
# the bit field at bits 5..6 of OP_AELEM's op_private:
my
$bf
=
$B::Op_private::bits
{aelem}{6};
my
$mask
=
$bf
->{bitmask};
# etc
DESCRIPTION
This module provides four global hashes:
%B::Op_private::bits
%B::Op_private::defines
%B::Op_private::labels
%B::Op_private::ops_using
which contain information about the per-op meanings of the bits in the op_private field.
%bits
This is indexed by op name and then bit number (0..7). For single bit flags, it returns the name of the define (if any) for that bit:
$B::Op_private::bits
{aelem}{7} eq
'OPpLVAL_INTRO'
;
For bit fields, it returns a hash ref containing details about the field. The same reference will be returned for all bit positions that make up the bit field; so for example these both return the same hash ref:
$bitfield
=
$B::Op_private::bits
{aelem}{5};
$bitfield
=
$B::Op_private::bits
{aelem}{6};
The general format of this hash ref is
{
# The bit range and mask; these are always present.
bitmin
=> 5,
bitmax
=> 6,
bitmask
=> 0x60,
# (The remaining keys are optional)
# The names of any defines that were requested:
mask_def
=>
'OPpFOO_MASK'
,
baseshift_def
=>
'OPpFOO_SHIFT'
,
bitcount_def
=>
'OPpFOO_BITS'
,
# If present, Concise etc will display the value with a 'FOO='
# prefix. If it equals '-', then Concise will treat the bit
# field as raw bits and not try to interpret it.
label
=>
'FOO'
,
# If present, specifies the names of some defines and the
# display labels that are used to assign meaning to particu-
# lar integer values within the bit field; e.g. 3 is dis-
# played as 'C'.
enum
=> [
qw(
1 OPpFOO_A A
2 OPpFOO_B B
3 OPpFOO_C C
)
],
};
%defines
This gives the value of every OPp
define, e.g.
$B::Op_private::defines
{OPpLVAL_INTRO} == 128;
%labels
This gives the short display label for each define, as used by B::Concise
and perl -Dx
, e.g.
$B::Op_private::labels
{OPpLVAL_INTRO} eq
'LVINTRO'
;
If the label equals '-', then Concise will treat the bit as a raw bit and not try to display it symbolically.
%ops_using
For each define, this gives a reference to an array of op names that use the flag.
@ops_using_lvintro
= @{
$B::Op_private::ops_using
{OPp_LVAL_INTRO} };