Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
Opcodes(3)	      User Contributed Perl Documentation	    Opcodes(3)

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

TEST REPORTS
       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>

AUTHOR
       Reini Urban "rurban@cpan.org" 2010, 2014

LICENSE
       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.

perl v5.24.1			  2014-07-16			    Opcodes(3)

NAME | SYNOPSIS | DESCRIPTION | Operator Names and Operator Lists | Opcode Information | SEE ALSO | TEST REPORTS | AUTHOR | LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=Opcodes&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help