Perl 5 version 26.3 documentation

B::Op_private

NAME

B::Op_private - OP op_private flag definitions

SYNOPSIS

  1. use B::Op_private;
  2. # flag details for bit 7 of OP_AELEM's op_private:
  3. my $name = $B::Op_private::bits{aelem}{7}; # OPpLVAL_INTRO
  4. my $value = $B::Op_private::defines{$name}; # 128
  5. my $label = $B::Op_private::labels{$name}; # LVINTRO
  6. # the bit field at bits 5..6 of OP_AELEM's op_private:
  7. my $bf = $B::Op_private::bits{aelem}{6};
  8. my $mask = $bf->{bitmask}; # etc

DESCRIPTION

This module provides four global hashes:

  1. %B::Op_private::bits
  2. %B::Op_private::defines
  3. %B::Op_private::labels
  4. %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:

  1. $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:

  1. $bitfield = $B::Op_private::bits{aelem}{5};
  2. $bitfield = $B::Op_private::bits{aelem}{6};

The general format of this hash ref is

  1. {
  2. # The bit range and mask; these are always present.
  3. bitmin => 5,
  4. bitmax => 6,
  5. bitmask => 0x60,
  6. # (The remaining keys are optional)
  7. # The names of any defines that were requested:
  8. mask_def => 'OPpFOO_MASK',
  9. baseshift_def => 'OPpFOO_SHIFT',
  10. bitcount_def => 'OPpFOO_BITS',
  11. # If present, Concise etc will display the value with a 'FOO='
  12. # prefix. If it equals '-', then Concise will treat the bit
  13. # field as raw bits and not try to interpret it.
  14. label => 'FOO',
  15. # If present, specifies the names of some defines and the
  16. # display labels that are used to assign meaning to particu-
  17. # lar integer values within the bit field; e.g. 3 is dis-
  18. # played as 'C'.
  19. enum => [ qw(
  20. 1 OPpFOO_A A
  21. 2 OPpFOO_B B
  22. 3 OPpFOO_C C
  23. )],
  24. };

%defines

This gives the value of every OPp define, e.g.

  1. $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.

  1. $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.

  1. @ops_using_lvintro = @{ $B::Op_private::ops_using{OPp_LVAL_INTRO} };