NAME
   Opcodes - More Opcodes information from opnames.h and opcode.h

SYNOPSIS
     use Opcodes;
     print "Empty opcodes are null and ",
       join ",", map {opname $_}, opaliases(opname2code('null'));

     # All LOGOPs
     perl -MOpcodes -e'$,=q( );print map {opname $_} grep {opclass($_) == 2} 1..opcodes'

     # Ops which can return other than op->next
     perl -MOpcodes -e'$,=q( );print map {opname $_} grep {Opcodes::maybranch $_} 1..opcodes'

DESCRIPTION
Operator Names and Operator Lists
   The canonical list of operator names is the contents of the array
   PL_op_name, defined and initialised in file opcode.h of the Perl source
   distribution (and installed into the perl library).

   Each operator has both a terse name (its opname) and a more verbose or
   recognisable descriptive name. The opdesc function can be used to return
   a the description for an OP.

   an operator name (opname)
           Operator names are typically small lowercase words like
           enterloop, leaveloop, last, next, redo etc. Sometimes they are
           rather cryptic like gv2cv, i_ncmp and ftsvtx.

   an OP opcode
           The opcode information functions all take the integer code,
           0..MAX0, MAXO being accessed by scalar @opcodes, the length of
           the opcodes array.

Opcode Information
   Retrieve information of the Opcodes. All are available for export by the
   package. Functions names starting with "op" are automatically exported.

   opcodes In a scalar context opcodes returns the number of opcodes in
           this version of perl (361 with perl-5.10).

           In a list context it returns a list of all the operators with
           its properties, a list of [ opcode opname ppaddr check opargs ].

   opname (OP)
           Returns the lowercase name without pp_ for the OP, an integer
           between 0 and MAXO.

   ppaddr (OP)
           Returns the address of the ppaddr, which can be used to get the
           aliases for each opcode.

   check (OP)
           Returns the address of the check function.

   opdesc (OP)
           Returns the string description of the OP.

   opargs (OP)
           Returns the opcode args encoded as integer of the opcode. See
           below or opcode.pl for the encoding details.

             opflags 1-128 + opclass 1-13 << 9 + argnum 1-15.. << 13

   argnum (OP)
           Returns the arguments and types encoded as number acccording to
           the following table, 4 bit for each argument.

               'S',  1,            # scalar
               'L',  2,            # list
               'A',  3,            # array value
               'H',  4,            # hash value
               'C',  5,            # code value
               'F',  6,            # file value
               'R',  7,            # scalar reference

             + '?',  8,            # optional

           Example:

             argnum(opname2code('bless')) => 145
             145 = 0b10010001 => S S?

             first 4 bits 0001 => 1st arg is a Scalar,
             next 4 bits  1001 => (bit 8+1) 2nd arg is an optional Scalar

   opclass (OP)
           Returns the op class as number according to the following table
           from opcode.pl:

               '0',  0,            # baseop
               '1',  1,            # unop
               '2',  2,            # binop
               '|',  3,            # logop
               '@',  4,            # listop
               '/',  5,            # pmop
               '$',  6,            # svop_or_padop
               '#',  7,            # padop
               '"',  8,            # pvop_or_svop
               '{',  9,            # loop
               ';',  10,           # cop
               '%',  11,           # baseop_or_unop
               '-',  12,           # filestatop
               '}',  13,           # loopexop

   opflags (OP)
           Returns op flags as number according to the following table from
           opcode.pl. In doubt see your perl source. *Warning: There is
           currently an attempt to change that, but I posted a fix*

               'm' =>  OA_MARK,            # needs stack mark
               'f' =>  OA_FOLDCONST,       # fold constants
               's' =>  OA_RETSCALAR,       # always produces scalar
               't' =>  OA_TARGET,          # needs target scalar
               'T' =>  OA_TARGET | OA_TARGLEX,     # ... which may be lexical
               'i' =>  OA_RETINTEGER,      # always produces integer (this bit is in question)
               'I' =>  OA_OTHERINT,        # has corresponding int op
               'd' =>  OA_DANGEROUS,       # danger, unknown side effects
               'u' =>  OA_DEFGV,           # defaults to $_

           plus not from opcode.pl:

               'n' => OA_NOSTACK,          # nothing on the stack, no args and return
               'N' => OA_MAYBRANCH         # No next. may return other than PL_op->op_next, maybranch

           These not yet:

               'S' =>  OA_MAYSCALAR        # retval may be scalar
               'A' =>  OA_MAYARRAY         # retval may be array
               'V' =>  OA_MAYVOID          # retval may be void
               'F' =>  OA_RETFIXED         # fixed retval type, either S or A or V

   OA_* constants
           All OA_ flag, class and argnum constants from op.h are exported.
           Addionally new OA_ flags have been created which are needed for
           B::CC.

   opaliases (OP)
           Returns the opcodes for the aliased opcode functions for the
           given OP, the ops with the same ppaddr.

   opname2code (OPNAME)
           Does a reverse lookup in the opcodes list to get the opcode for
           the given name.

   maybranch (OP)
           Returns if the OP function may return not op->op_next.

           Note that not all OP classes which have op->op_other,
           op->op_first or op->op_last (higher then UNOP) are actually
           returning an other next op than op->op_next.

             opflags(OP) & 16384

SEE ALSO
   Opcode -- The Perl CORE Opcode module for handling sets of Opcodes used
   by Safe.

   Safe -- Opcode and namespace limited execution compartments

   B::CC -- The optimizing perl compiler uses this module. Jit also, but
   only the static information

AUTHOR
   Reini Urban "[email protected]" 2010