|
|
| |
Opcodes(3) |
User Contributed Perl Documentation |
Opcodes(3) |
Opcodes - More Opcodes information from opnames.h and opcode.h
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'
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.
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
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
CPAN Testers: <http://cpantesters.org/distro/O/Opcodes>
Travis: https://travis-ci.org/rurban/Opcodes.png
<https://travis-ci.org/rurban/Opcodes/>
Coveralls: https://coveralls.io/repos/rurban/Opcodes/badge.png
<https://coveralls.io/r/rurban/Opcodes?branch=master>
Reini Urban "rurban@cpan.org" 2010, 2014
Copyright 1995, Malcom Beattie. Copyright 1996, Tim Bunce. Copyright 2010, 2014
Reini Urban. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |