summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/B.3perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3/B.3perl')
-rw-r--r--upstream/archlinux/man3/B.3perl1044
1 files changed, 1044 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/B.3perl b/upstream/archlinux/man3/B.3perl
new file mode 100644
index 00000000..628613d8
--- /dev/null
+++ b/upstream/archlinux/man3/B.3perl
@@ -0,0 +1,1044 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "B 3perl"
+.TH B 3perl 2024-02-11 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+B \- The Perl Compiler Backend
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use B;
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+The \f(CW\*(C`B\*(C'\fR module supplies classes which allow a Perl program to delve
+into its own innards. It is the module used to implement the
+"backends" of the Perl compiler. Usage of the compiler does not
+require knowledge of this module: see the O module for the
+user-visible part. The \f(CW\*(C`B\*(C'\fR module is of use to those who want to
+write new compiler backends. This documentation assumes that the
+reader knows a fair amount about perl's internals including such
+things as SVs, OPs and the internal symbol table and syntax tree
+of a program.
+.SH OVERVIEW
+.IX Header "OVERVIEW"
+The \f(CW\*(C`B\*(C'\fR module contains a set of utility functions for querying the
+current state of the Perl interpreter; typically these functions
+return objects from the B::SV and B::OP classes, or their derived
+classes. These classes in turn define methods for querying the
+resulting objects about their own internal state.
+.SH "Utility Functions"
+.IX Header "Utility Functions"
+The \f(CW\*(C`B\*(C'\fR module exports a variety of functions: some are simple
+utility functions, others provide a Perl program with a way to
+get an initial "handle" on an internal object.
+.ie n .SS "Functions Returning ""B::SV"", ""B::AV"", ""B::HV"", and ""B::CV"" objects"
+.el .SS "Functions Returning \f(CWB::SV\fP, \f(CWB::AV\fP, \f(CWB::HV\fP, and \f(CWB::CV\fP objects"
+.IX Subsection "Functions Returning B::SV, B::AV, B::HV, and B::CV objects"
+For descriptions of the class hierarchy of these objects and the
+methods that can be called on them, see below, "OVERVIEW OF
+CLASSES" and "SV-RELATED CLASSES".
+.IP sv_undef 4
+.IX Item "sv_undef"
+Returns the SV object corresponding to the C variable \f(CW\*(C`sv_undef\*(C'\fR.
+.IP sv_yes 4
+.IX Item "sv_yes"
+Returns the SV object corresponding to the C variable \f(CW\*(C`sv_yes\*(C'\fR.
+.IP sv_no 4
+.IX Item "sv_no"
+Returns the SV object corresponding to the C variable \f(CW\*(C`sv_no\*(C'\fR.
+.IP svref_2object(SVREF) 4
+.IX Item "svref_2object(SVREF)"
+Takes a reference to any Perl value, and turns the referred-to value
+into an object in the appropriate B::OP\-derived or B::SV\-derived
+class. Apart from functions such as \f(CW\*(C`main_root\*(C'\fR, this is the primary
+way to get an initial "handle" on an internal perl data structure
+which can then be followed with the other access methods.
+.Sp
+The returned object will only be valid as long as the underlying OPs
+and SVs continue to exist. Do not attempt to use the object after the
+underlying structures are freed.
+.IP amagic_generation 4
+.IX Item "amagic_generation"
+Returns the SV object corresponding to the C variable \f(CW\*(C`amagic_generation\*(C'\fR.
+As of Perl 5.18, this is just an alias to \f(CW\*(C`PL_na\*(C'\fR, so its value is
+meaningless.
+.IP init_av 4
+.IX Item "init_av"
+Returns the AV object (i.e. in class B::AV) representing INIT blocks.
+.IP check_av 4
+.IX Item "check_av"
+Returns the AV object (i.e. in class B::AV) representing CHECK blocks.
+.IP unitcheck_av 4
+.IX Item "unitcheck_av"
+Returns the AV object (i.e. in class B::AV) representing UNITCHECK blocks.
+.IP begin_av 4
+.IX Item "begin_av"
+Returns the AV object (i.e. in class B::AV) representing BEGIN blocks.
+.IP end_av 4
+.IX Item "end_av"
+Returns the AV object (i.e. in class B::AV) representing END blocks.
+.IP comppadlist 4
+.IX Item "comppadlist"
+Returns the PADLIST object (i.e. in class B::PADLIST) of the global
+comppadlist. In Perl 5.16 and earlier it returns an AV object (class
+B::AV).
+.IP regex_padav 4
+.IX Item "regex_padav"
+Only when perl was compiled with ithreads.
+.IP main_cv 4
+.IX Item "main_cv"
+Return the (faked) CV corresponding to the main part of the Perl
+program.
+.SS "Functions for Examining the Symbol Table"
+.IX Subsection "Functions for Examining the Symbol Table"
+.IP "walksymtable(SYMREF, METHOD, RECURSE, PREFIX)" 4
+.IX Item "walksymtable(SYMREF, METHOD, RECURSE, PREFIX)"
+Walk the symbol table starting at SYMREF and call METHOD on each
+symbol (a B::GV object) visited. When the walk reaches package
+symbols (such as "Foo::") it invokes RECURSE, passing in the symbol
+name, and only recurses into the package if that sub returns true.
+.Sp
+PREFIX is the name of the SYMREF you're walking.
+.Sp
+For example:
+.Sp
+.Vb 4
+\& # Walk CGI\*(Aqs symbol table calling print_subs on each symbol.
+\& # Recurse only into CGI::Util::
+\& walksymtable(\e%CGI::, \*(Aqprint_subs\*(Aq,
+\& sub { $_[0] eq \*(AqCGI::Util::\*(Aq }, \*(AqCGI::\*(Aq);
+.Ve
+.Sp
+\&\fBprint_subs()\fR is a B::GV method you have declared. Also see "B::GV
+Methods", below.
+.ie n .SS "Functions Returning ""B::OP"" objects or for walking op trees"
+.el .SS "Functions Returning \f(CWB::OP\fP objects or for walking op trees"
+.IX Subsection "Functions Returning B::OP objects or for walking op trees"
+For descriptions of the class hierarchy of these objects and the
+methods that can be called on them, see below, "OVERVIEW OF
+CLASSES" and "OP-RELATED CLASSES".
+.IP main_root 4
+.IX Item "main_root"
+Returns the root op (i.e. an object in the appropriate B::OP\-derived
+class) of the main part of the Perl program.
+.IP main_start 4
+.IX Item "main_start"
+Returns the starting op of the main part of the Perl program.
+.IP "walkoptree(OP, METHOD)" 4
+.IX Item "walkoptree(OP, METHOD)"
+Does a tree-walk of the syntax tree based at OP and calls METHOD on
+each op it visits. Each node is visited before its children. If
+\&\f(CW\*(C`walkoptree_debug\*(C'\fR (see below) has been called to turn debugging on then
+the method \f(CW\*(C`walkoptree_debug\*(C'\fR is called on each op before METHOD is
+called.
+.IP walkoptree_debug(DEBUG) 4
+.IX Item "walkoptree_debug(DEBUG)"
+Returns the current debugging flag for \f(CW\*(C`walkoptree\*(C'\fR. If the optional
+DEBUG argument is non-zero, it sets the debugging flag to that. See
+the description of \f(CW\*(C`walkoptree\*(C'\fR above for what the debugging flag
+does.
+.SS "Miscellaneous Utility Functions"
+.IX Subsection "Miscellaneous Utility Functions"
+.IP ppname(OPNUM) 4
+.IX Item "ppname(OPNUM)"
+Return the PP function name (e.g. "pp_add") of op number OPNUM.
+.IP hash(STR) 4
+.IX Item "hash(STR)"
+Returns a string in the form "0x..." representing the value of the
+internal hash function used by perl on string STR.
+.IP cast_I32(I) 4
+.IX Item "cast_I32(I)"
+Casts I to the internal I32 type used by that perl.
+.IP minus_c 4
+.IX Item "minus_c"
+Does the equivalent of the \f(CW\*(C`\-c\*(C'\fR command-line option. Obviously, this
+is only useful in a BEGIN block or else the flag is set too late.
+.IP cstring(STR) 4
+.IX Item "cstring(STR)"
+Returns a double-quote-surrounded escaped version of STR which can
+be used as a string in C source code.
+.IP perlstring(STR) 4
+.IX Item "perlstring(STR)"
+Returns a double-quote-surrounded escaped version of STR which can
+be used as a string in Perl source code.
+.IP safename(STR) 4
+.IX Item "safename(STR)"
+This function returns the string with the first character modified if it
+is a control character. It converts it to ^X format first, so that "\ecG"
+becomes "^G". This is used internally by B::GV::SAFENAME, but
+you can call it directly.
+.IP class(OBJ) 4
+.IX Item "class(OBJ)"
+Returns the class of an object without the part of the classname
+preceding the first \f(CW"::"\fR. This is used to turn \f(CW"B::UNOP"\fR into
+\&\f(CW"UNOP"\fR for example.
+.IP threadsv_names 4
+.IX Item "threadsv_names"
+This used to provide support for the old 5.005 threading module. It now
+does nothing.
+.SS "Exported utility variables"
+.IX Subsection "Exported utility variables"
+.ie n .IP @optype 4
+.el .IP \f(CW@optype\fR 4
+.IX Item "@optype"
+.Vb 1
+\& my $op_type = $optype[$op_type_num];
+.Ve
+.Sp
+A simple mapping of the op type number to its type (like 'COP' or 'BINOP').
+.ie n .IP @specialsv_name 4
+.el .IP \f(CW@specialsv_name\fR 4
+.IX Item "@specialsv_name"
+.Vb 1
+\& my $sv_name = $specialsv_name[$sv_index];
+.Ve
+.Sp
+Certain SV types are considered 'special'. They're represented by
+B::SPECIAL and are referred to by a number from the specialsv_list.
+This array maps that number back to the name of the SV (like 'Nullsv'
+or '&PL_sv_undef').
+.SH "OVERVIEW OF CLASSES"
+.IX Header "OVERVIEW OF CLASSES"
+The C structures used by Perl's internals to hold SV and OP
+information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
+class hierarchy and the \f(CW\*(C`B\*(C'\fR module gives access to them via a true
+object hierarchy. Structure fields which point to other objects
+(whether types of SV or types of OP) are represented by the \f(CW\*(C`B\*(C'\fR
+module as Perl objects of the appropriate class.
+.PP
+The bulk of the \f(CW\*(C`B\*(C'\fR module is the methods for accessing fields of
+these structures.
+.PP
+Note that all access is read-only. You cannot modify the internals by
+using this module. Also, note that the B::OP and B::SV objects created
+by this module are only valid for as long as the underlying objects
+exist; their creation doesn't increase the reference counts of the
+underlying objects. Trying to access the fields of a freed object will
+give incomprehensible results, or worse.
+.SS "SV-RELATED CLASSES"
+.IX Subsection "SV-RELATED CLASSES"
+B::IV, B::NV, B::PV, B::PVIV, B::PVNV, B::PVMG,
+B::PVLV, B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes
+correspond in the obvious way to the underlying C structures of similar names.
+The inheritance hierarchy mimics the underlying C "inheritance":
+.PP
+.Vb 10
+\& B::SV
+\& |
+\& +\-\-\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-\-\-\-+
+\& | | |
+\& B::PV B::IV B::NV
+\& / \e / /
+\& / \e / /
+\& B::INVLIST B::PVIV /
+\& \e /
+\& \e /
+\& \e /
+\& B::PVNV
+\& |
+\& |
+\& B::PVMG
+\& |
+\& +\-\-\-\-\-\-\-+\-\-\-\-\-\-\-+\-\-\-+\-\-\-+\-\-\-\-\-\-\-+\-\-\-\-\-\-\-+
+\& | | | | | |
+\& B::AV B::GV B::HV B::CV B::IO B::REGEXP
+\& | |
+\& | |
+\& B::PVLV B::FM
+.Ve
+.PP
+Access methods correspond to the underlying C macros for field access,
+usually with the leading "class indication" prefix removed (Sv, Av,
+Hv, ...). The leading prefix is only left in cases where its removal
+would cause a clash in method name. For example, \f(CW\*(C`GvREFCNT\*(C'\fR stays
+as-is since its abbreviation would clash with the "superclass" method
+\&\f(CW\*(C`REFCNT\*(C'\fR (corresponding to the C function \f(CW\*(C`SvREFCNT\*(C'\fR).
+.SS "B::SV Methods"
+.IX Subsection "B::SV Methods"
+.IP REFCNT 4
+.IX Item "REFCNT"
+.PD 0
+.IP FLAGS 4
+.IX Item "FLAGS"
+.IP IsBOOL 4
+.IX Item "IsBOOL"
+.PD
+Returns true if the SV is a boolean (true or false).
+You can then use \f(CW\*(C`TRUE\*(C'\fR to check if the value is true or false.
+.Sp
+.Vb 5
+\& my $something = ( 1 == 1 ) # boolean true
+\& || ( 1 == 0 ) # boolean false
+\& || 42 # IV true
+\& || 0; # IV false
+\& my $sv = B::svref_2object(\e$something);
+\&
+\& say q[Not a boolean value]
+\& if ! $sv\->IsBOOL;
+\&
+\& say q[This is a boolean with value: true]
+\& if $sv\->IsBOOL && $sv\->TRUE_nomg;
+\&
+\& say q[This is a boolean with value: false]
+\& if $sv\->IsBOOL && ! $sv\->TRUE_nomg;
+.Ve
+.IP object_2svref 4
+.IX Item "object_2svref"
+Returns a reference to the regular scalar corresponding to this
+B::SV object. In other words, this method is the inverse operation
+to the \fBsvref_2object()\fR subroutine. This scalar and other data it points
+at should be considered read-only: modifying them is neither safe nor
+guaranteed to have a sensible effect.
+.IP TRUE 4
+.IX Item "TRUE"
+Returns a boolean indicating hether Perl would evaluate the SV as true or
+false.
+.Sp
+\&\fBWarning\fR this call performs 'get' magic. If you only want to check the
+nature of this SV use \f(CW\*(C`TRUE_nomg\*(C'\fR helper.
+.Sp
+This is an alias for \f(CWSvTRUE($sv)\fR.
+.IP TRUE_nomg 4
+.IX Item "TRUE_nomg"
+Check if the value is true (do not perform 'get' magic).
+Returns a boolean indicating whether Perl would evaluate the SV as true or
+false.
+.Sp
+This is an alias for \f(CWSvTRUE_nomg($sv)\fR.
+.SS "B::IV Methods"
+.IX Subsection "B::IV Methods"
+.IP IV 4
+.IX Item "IV"
+Returns the value of the IV, \fIinterpreted as
+a signed integer\fR. This will be misleading
+if \f(CW\*(C`FLAGS & SVf_IVisUV\*(C'\fR. Perhaps you want the
+\&\f(CW\*(C`int_value\*(C'\fR method instead?
+.IP IVX 4
+.IX Item "IVX"
+.PD 0
+.IP UVX 4
+.IX Item "UVX"
+.IP int_value 4
+.IX Item "int_value"
+.PD
+This method returns the value of the IV as an integer.
+It differs from \f(CW\*(C`IV\*(C'\fR in that it returns the correct
+value regardless of whether it's stored signed or
+unsigned.
+.IP needs64bits 4
+.IX Item "needs64bits"
+.PD 0
+.IP packiv 4
+.IX Item "packiv"
+.PD
+.SS "B::NV Methods"
+.IX Subsection "B::NV Methods"
+.IP NV 4
+.IX Item "NV"
+.PD 0
+.IP NVX 4
+.IX Item "NVX"
+.IP COP_SEQ_RANGE_LOW 4
+.IX Item "COP_SEQ_RANGE_LOW"
+.IP COP_SEQ_RANGE_HIGH 4
+.IX Item "COP_SEQ_RANGE_HIGH"
+.PD
+These last two are only valid for pad name SVs. They only existed in the
+B::NV class before Perl 5.22. In 5.22 they were moved to the B::PADNAME
+class.
+.SS "B::RV Methods"
+.IX Subsection "B::RV Methods"
+.IP RV 4
+.IX Item "RV"
+.SS "B::PV Methods"
+.IX Subsection "B::PV Methods"
+.PD 0
+.IP PV 4
+.IX Item "PV"
+.PD
+This method is the one you usually want. It constructs a
+string using the length and offset information in the struct:
+for ordinary scalars it will return the string that you'd see
+from Perl, even if it contains null characters.
+.IP RV 4
+.IX Item "RV"
+Same as B::RV::RV, except that it will \fBdie()\fR if the PV isn't
+a reference.
+.IP PVX 4
+.IX Item "PVX"
+This method is less often useful. It assumes that the string
+stored in the struct is null-terminated, and disregards the
+length information.
+.Sp
+It is the appropriate method to use if you need to get the name
+of a lexical variable from a padname array. Lexical variable names
+are always stored with a null terminator, and the length field
+(CUR) is overloaded for other purposes and can't be relied on here.
+.IP CUR 4
+.IX Item "CUR"
+This method returns the internal length field, which consists of the number
+of internal bytes, not necessarily the number of logical characters.
+.IP LEN 4
+.IX Item "LEN"
+This method returns the number of bytes allocated (via malloc) for storing
+the string. This is 0 if the scalar does not "own" the string.
+.SS "B::PVMG Methods"
+.IX Subsection "B::PVMG Methods"
+.IP MAGIC 4
+.IX Item "MAGIC"
+.PD 0
+.IP SvSTASH 4
+.IX Item "SvSTASH"
+.PD
+.SS "B::MAGIC Methods"
+.IX Subsection "B::MAGIC Methods"
+.IP MOREMAGIC 4
+.IX Item "MOREMAGIC"
+.PD 0
+.IP precomp 4
+.IX Item "precomp"
+.PD
+Only valid on r\-magic, returns the string that generated the regexp.
+.IP PRIVATE 4
+.IX Item "PRIVATE"
+.PD 0
+.IP TYPE 4
+.IX Item "TYPE"
+.IP FLAGS 4
+.IX Item "FLAGS"
+.IP OBJ 4
+.IX Item "OBJ"
+.PD
+Will \fBdie()\fR if called on r\-magic.
+.IP PTR 4
+.IX Item "PTR"
+.PD 0
+.IP REGEX 4
+.IX Item "REGEX"
+.PD
+Only valid on r\-magic, returns the integer value of the REGEX stored
+in the MAGIC.
+.SS "B::INVLIST Methods"
+.IX Subsection "B::INVLIST Methods"
+.IP prev_index 4
+.IX Item "prev_index"
+Returns the cache result of previous \fBinvlist_search()\fR (internal usage)
+.IP is_offset 4
+.IX Item "is_offset"
+Returns a boolean value (0 or 1) to know if the invlist is using an offset.
+When false the list begins with the code point U+0000.
+When true the list begins with the following elements.
+.IP array_len 4
+.IX Item "array_len"
+Returns an integer with the size of the array used to define the invlist.
+.IP get_invlist_array 4
+.IX Item "get_invlist_array"
+This method returns a list of integers representing the array used by the
+invlist.
+Note: this cannot be used while in middle of iterating on an invlist and croaks.
+.SS "B::PVLV Methods"
+.IX Subsection "B::PVLV Methods"
+.IP TARGOFF 4
+.IX Item "TARGOFF"
+.PD 0
+.IP TARGLEN 4
+.IX Item "TARGLEN"
+.IP TYPE 4
+.IX Item "TYPE"
+.IP TARG 4
+.IX Item "TARG"
+.PD
+.SS "B::BM Methods"
+.IX Subsection "B::BM Methods"
+.IP USEFUL 4
+.IX Item "USEFUL"
+.PD 0
+.IP PREVIOUS 4
+.IX Item "PREVIOUS"
+.IP RARE 4
+.IX Item "RARE"
+.IP TABLE 4
+.IX Item "TABLE"
+.PD
+.SS "B::REGEXP Methods"
+.IX Subsection "B::REGEXP Methods"
+.IP REGEX 4
+.IX Item "REGEX"
+.PD 0
+.IP precomp 4
+.IX Item "precomp"
+.IP qr_anoncv 4
+.IX Item "qr_anoncv"
+.IP compflags 4
+.IX Item "compflags"
+.PD
+The last two were added in Perl 5.22.
+.SS "B::GV Methods"
+.IX Subsection "B::GV Methods"
+.IP is_empty 4
+.IX Item "is_empty"
+This method returns TRUE if the GP field of the GV is NULL.
+.IP NAME 4
+.IX Item "NAME"
+.PD 0
+.IP SAFENAME 4
+.IX Item "SAFENAME"
+.PD
+This method returns the name of the glob, but if the first
+character of the name is a control character, then it converts
+it to ^X first, so that *^G would return "^G" rather than "\ecG".
+.Sp
+It's useful if you want to print out the name of a variable.
+If you restrict yourself to globs which exist at compile-time
+then the result ought to be unambiguous, because code like
+\&\f(CW\*(C`${"^G"} = 1\*(C'\fR is compiled as two ops \- a constant string and
+a dereference (rv2gv) \- so that the glob is created at runtime.
+.Sp
+If you're working with globs at runtime, and need to disambiguate
+*^G from *{"^G"}, then you should use the raw NAME method.
+.IP STASH 4
+.IX Item "STASH"
+.PD 0
+.IP SV 4
+.IX Item "SV"
+.IP IO 4
+.IX Item "IO"
+.IP FORM 4
+.IX Item "FORM"
+.IP AV 4
+.IX Item "AV"
+.IP HV 4
+.IX Item "HV"
+.IP EGV 4
+.IX Item "EGV"
+.IP CV 4
+.IX Item "CV"
+.IP CVGEN 4
+.IX Item "CVGEN"
+.IP LINE 4
+.IX Item "LINE"
+.IP FILE 4
+.IX Item "FILE"
+.IP FILEGV 4
+.IX Item "FILEGV"
+.IP GvREFCNT 4
+.IX Item "GvREFCNT"
+.IP FLAGS 4
+.IX Item "FLAGS"
+.IP GPFLAGS 4
+.IX Item "GPFLAGS"
+.PD
+This last one is present only in perl 5.22.0 and higher.
+.SS "B::IO Methods"
+.IX Subsection "B::IO Methods"
+B::IO objects derive from IO objects and you will get more information from
+the IO object itself.
+.PP
+For example:
+.PP
+.Vb 3
+\& $gvio = B::svref_2object(\e*main::stdin)\->IO;
+\& $IO = $gvio\->object_2svref();
+\& $fd = $IO\->fileno();
+.Ve
+.IP LINES 4
+.IX Item "LINES"
+.PD 0
+.IP PAGE 4
+.IX Item "PAGE"
+.IP PAGE_LEN 4
+.IX Item "PAGE_LEN"
+.IP LINES_LEFT 4
+.IX Item "LINES_LEFT"
+.IP TOP_NAME 4
+.IX Item "TOP_NAME"
+.IP TOP_GV 4
+.IX Item "TOP_GV"
+.IP FMT_NAME 4
+.IX Item "FMT_NAME"
+.IP FMT_GV 4
+.IX Item "FMT_GV"
+.IP BOTTOM_NAME 4
+.IX Item "BOTTOM_NAME"
+.IP BOTTOM_GV 4
+.IX Item "BOTTOM_GV"
+.IP SUBPROCESS 4
+.IX Item "SUBPROCESS"
+.IP IoTYPE 4
+.IX Item "IoTYPE"
+.PD
+A character symbolizing the type of IO Handle.
+.Sp
+.Vb 12
+\& \- STDIN/OUT
+\& I STDIN/OUT/ERR
+\& < read\-only
+\& > write\-only
+\& a append
+\& + read and write
+\& s socket
+\& | pipe
+\& I IMPLICIT
+\& # NUMERIC
+\& space closed handle
+\& \e0 closed internal handle
+.Ve
+.IP IoFLAGS 4
+.IX Item "IoFLAGS"
+.PD 0
+.IP IsSTD 4
+.IX Item "IsSTD"
+.PD
+Takes one argument ( 'stdin' | 'stdout' | 'stderr' ) and returns true
+if the IoIFP of the object is equal to the handle whose name was
+passed as argument; i.e., \f(CW$io\fR\->IsSTD('stderr') is true if
+IoIFP($io) == \fBPerlIO_stderr()\fR.
+.SS "B::AV Methods"
+.IX Subsection "B::AV Methods"
+.IP FILL 4
+.IX Item "FILL"
+.PD 0
+.IP MAX 4
+.IX Item "MAX"
+.IP ARRAY 4
+.IX Item "ARRAY"
+.IP ARRAYelt 4
+.IX Item "ARRAYelt"
+.PD
+Like \f(CW\*(C`ARRAY\*(C'\fR, but takes an index as an argument to get only one element,
+rather than a list of all of them.
+.SS "B::CV Methods"
+.IX Subsection "B::CV Methods"
+.IP STASH 4
+.IX Item "STASH"
+.PD 0
+.IP START 4
+.IX Item "START"
+.IP ROOT 4
+.IX Item "ROOT"
+.IP GV 4
+.IX Item "GV"
+.IP FILE 4
+.IX Item "FILE"
+.IP DEPTH 4
+.IX Item "DEPTH"
+.IP PADLIST 4
+.IX Item "PADLIST"
+.PD
+Returns a B::PADLIST object.
+.IP OUTSIDE 4
+.IX Item "OUTSIDE"
+.PD 0
+.IP OUTSIDE_SEQ 4
+.IX Item "OUTSIDE_SEQ"
+.IP XSUB 4
+.IX Item "XSUB"
+.IP XSUBANY 4
+.IX Item "XSUBANY"
+.PD
+For constant subroutines, returns the constant SV returned by the subroutine.
+.IP CvFLAGS 4
+.IX Item "CvFLAGS"
+.PD 0
+.IP const_sv 4
+.IX Item "const_sv"
+.IP NAME_HEK 4
+.IX Item "NAME_HEK"
+.PD
+Returns the name of a lexical sub, otherwise \f(CW\*(C`undef\*(C'\fR.
+.SS "B::HV Methods"
+.IX Subsection "B::HV Methods"
+.IP FILL 4
+.IX Item "FILL"
+.PD 0
+.IP MAX 4
+.IX Item "MAX"
+.IP KEYS 4
+.IX Item "KEYS"
+.IP RITER 4
+.IX Item "RITER"
+.IP NAME 4
+.IX Item "NAME"
+.IP ARRAY 4
+.IX Item "ARRAY"
+.PD
+.SS "OP-RELATED CLASSES"
+.IX Subsection "OP-RELATED CLASSES"
+\&\f(CW\*(C`B::OP\*(C'\fR, \f(CW\*(C`B::UNOP\*(C'\fR, \f(CW\*(C`B::UNOP_AUX\*(C'\fR, \f(CW\*(C`B::BINOP\*(C'\fR, \f(CW\*(C`B::LOGOP\*(C'\fR,
+\&\f(CW\*(C`B::LISTOP\*(C'\fR, \f(CW\*(C`B::PMOP\*(C'\fR, \f(CW\*(C`B::SVOP\*(C'\fR, \f(CW\*(C`B::PADOP\*(C'\fR, \f(CW\*(C`B::PVOP\*(C'\fR, \f(CW\*(C`B::LOOP\*(C'\fR,
+\&\f(CW\*(C`B::COP\*(C'\fR, \f(CW\*(C`B::METHOP\*(C'\fR.
+.PP
+These classes correspond in the obvious way to the underlying C
+structures of similar names. The inheritance hierarchy mimics the
+underlying C "inheritance":
+.PP
+.Vb 10
+\& B::OP
+\& |
+\& +\-\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-+\-\-\-\-\-\-\-+\-\-\-\-\-\-\-\-\-+
+\& | | | | | |
+\& B::UNOP B::SVOP B::PADOP B::COP B::PVOP B::METHOP
+\& |
+\& +\-\-\-+\-\-\-+\-\-\-\-\-\-\-\-\-+
+\& | | |
+\& B::BINOP B::LOGOP B::UNOP_AUX
+\& |
+\& |
+\& B::LISTOP
+\& |
+\& +\-\-\-+\-\-\-+
+\& | |
+\& B::LOOP B::PMOP
+.Ve
+.PP
+Access methods correspond to the underlying C structure field names,
+with the leading "class indication" prefix (\f(CW"op_"\fR) removed.
+.SS "B::OP Methods"
+.IX Subsection "B::OP Methods"
+These methods get the values of similarly named fields within the OP
+data structure. See top of \f(CW\*(C`op.h\*(C'\fR for more info.
+.IP next 4
+.IX Item "next"
+.PD 0
+.IP sibling 4
+.IX Item "sibling"
+.IP parent 4
+.IX Item "parent"
+.PD
+Returns the OP's parent. If it has no parent, or if your perl wasn't built
+with \f(CW\*(C`\-DPERL_OP_PARENT\*(C'\fR, returns NULL.
+.Sp
+Note that the global variable \f(CW$B::OP::does_parent\fR is undefined on older
+perls that don't support the \f(CW\*(C`parent\*(C'\fR method, is defined but false on
+perls that support the method but were built without \f(CW\*(C`\-DPERL_OP_PARENT\*(C'\fR,
+and is true otherwise.
+.IP name 4
+.IX Item "name"
+This returns the op name as a string (e.g. "add", "rv2av").
+.IP ppaddr 4
+.IX Item "ppaddr"
+This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
+"PL_ppaddr[OP_RV2AV]").
+.IP desc 4
+.IX Item "desc"
+This returns the op description from the global C PL_op_desc array
+(e.g. "addition" "array deref").
+.IP targ 4
+.IX Item "targ"
+.PD 0
+.IP type 4
+.IX Item "type"
+.IP opt 4
+.IX Item "opt"
+.IP flags 4
+.IX Item "flags"
+.IP private 4
+.IX Item "private"
+.IP spare 4
+.IX Item "spare"
+.PD
+.SS "B::UNOP Method"
+.IX Subsection "B::UNOP Method"
+.IP first 4
+.IX Item "first"
+.SS "B::UNOP_AUX Methods (since 5.22)"
+.IX Subsection "B::UNOP_AUX Methods (since 5.22)"
+.PD 0
+.IP aux_list(cv) 4
+.IX Item "aux_list(cv)"
+.PD
+This returns a list of the elements of the op's aux data structure,
+or a null list if there is no aux. What will be returned depends on the
+object's type, but will typically be a collection of \f(CW\*(C`B::IV\*(C'\fR, \f(CW\*(C`B::GV\*(C'\fR,
+etc. objects. \f(CW\*(C`cv\*(C'\fR is the \f(CW\*(C`B::CV\*(C'\fR object representing the sub that the
+op is contained within.
+.IP string(cv) 4
+.IX Item "string(cv)"
+This returns a textual representation of the object (likely to b useful
+for deparsing and debugging), or an empty string if the op type doesn't
+support this. \f(CW\*(C`cv\*(C'\fR is the \f(CW\*(C`B::CV\*(C'\fR object representing the sub that the
+op is contained within.
+.SS "B::BINOP Method"
+.IX Subsection "B::BINOP Method"
+.IP last 4
+.IX Item "last"
+.SS "B::LOGOP Method"
+.IX Subsection "B::LOGOP Method"
+.PD 0
+.IP other 4
+.IX Item "other"
+.PD
+.SS "B::LISTOP Method"
+.IX Subsection "B::LISTOP Method"
+.IP children 4
+.IX Item "children"
+.SS "B::PMOP Methods"
+.IX Subsection "B::PMOP Methods"
+.PD 0
+.IP pmreplroot 4
+.IX Item "pmreplroot"
+.IP pmreplstart 4
+.IX Item "pmreplstart"
+.IP pmflags 4
+.IX Item "pmflags"
+.IP precomp 4
+.IX Item "precomp"
+.IP pmoffset 4
+.IX Item "pmoffset"
+.PD
+Only when perl was compiled with ithreads.
+.IP code_list 4
+.IX Item "code_list"
+Since perl 5.17.1
+.IP pmregexp 4
+.IX Item "pmregexp"
+Added in perl 5.22, this method returns the B::REGEXP associated with the
+op. While PMOPs do not actually have \f(CW\*(C`pmregexp\*(C'\fR fields under threaded
+builds, this method returns the regexp under threads nonetheless, for
+convenience.
+.SS "B::SVOP Methods"
+.IX Subsection "B::SVOP Methods"
+.IP sv 4
+.IX Item "sv"
+.PD 0
+.IP gv 4
+.IX Item "gv"
+.PD
+.SS "B::PADOP Method"
+.IX Subsection "B::PADOP Method"
+.IP padix 4
+.IX Item "padix"
+.SS "B::PVOP Method"
+.IX Subsection "B::PVOP Method"
+.PD 0
+.IP pv 4
+.IX Item "pv"
+.PD
+.SS "B::LOOP Methods"
+.IX Subsection "B::LOOP Methods"
+.IP redoop 4
+.IX Item "redoop"
+.PD 0
+.IP nextop 4
+.IX Item "nextop"
+.IP lastop 4
+.IX Item "lastop"
+.PD
+.SS "B::COP Methods"
+.IX Subsection "B::COP Methods"
+The \f(CW\*(C`B::COP\*(C'\fR class is used for "nextstate" and "dbstate" ops. As of Perl
+5.22, it is also used for "null" ops that started out as COPs.
+.IP label 4
+.IX Item "label"
+.PD 0
+.IP stash 4
+.IX Item "stash"
+.IP stashpv 4
+.IX Item "stashpv"
+.IP "stashoff (threaded only)" 4
+.IX Item "stashoff (threaded only)"
+.IP file 4
+.IX Item "file"
+.IP cop_seq 4
+.IX Item "cop_seq"
+.IP line 4
+.IX Item "line"
+.IP warnings 4
+.IX Item "warnings"
+.IP io 4
+.IX Item "io"
+.IP hints 4
+.IX Item "hints"
+.IP hints_hash 4
+.IX Item "hints_hash"
+.PD
+.SS "B::METHOP Methods (Since Perl 5.22)"
+.IX Subsection "B::METHOP Methods (Since Perl 5.22)"
+.IP first 4
+.IX Item "first"
+.PD 0
+.IP meth_sv 4
+.IX Item "meth_sv"
+.PD
+.SS "PAD-RELATED CLASSES"
+.IX Subsection "PAD-RELATED CLASSES"
+Perl 5.18 introduced a new class, B::PADLIST, returned by B::CV's
+\&\f(CW\*(C`PADLIST\*(C'\fR method.
+.PP
+Perl 5.22 introduced the B::PADNAMELIST and B::PADNAME classes.
+.SS "B::PADLIST Methods"
+.IX Subsection "B::PADLIST Methods"
+.IP MAX 4
+.IX Item "MAX"
+.PD 0
+.IP ARRAY 4
+.IX Item "ARRAY"
+.PD
+A list of pads. The first one is a B::PADNAMELIST containing the names.
+The rest are currently B::AV objects, but that could
+change in future versions.
+.IP ARRAYelt 4
+.IX Item "ARRAYelt"
+Like \f(CW\*(C`ARRAY\*(C'\fR, but takes an index as an argument to get only one element,
+rather than a list of all of them.
+.IP NAMES 4
+.IX Item "NAMES"
+This method, introduced in 5.22, returns the B::PADNAMELIST. It is
+equivalent to \f(CW\*(C`ARRAYelt\*(C'\fR with a 0 argument.
+.IP REFCNT 4
+.IX Item "REFCNT"
+.PD 0
+.IP id 4
+.IX Item "id"
+.PD
+This method, introduced in 5.22, returns an ID shared by clones of the same
+padlist.
+.IP outid 4
+.IX Item "outid"
+This method, also added in 5.22, returns the ID of the outer padlist.
+.SS "B::PADNAMELIST Methods"
+.IX Subsection "B::PADNAMELIST Methods"
+.IP MAX 4
+.IX Item "MAX"
+.PD 0
+.IP ARRAY 4
+.IX Item "ARRAY"
+.IP ARRAYelt 4
+.IX Item "ARRAYelt"
+.PD
+These two methods return the pad names, using B::SPECIAL objects for null
+pointers and B::PADNAME objects otherwise.
+.IP REFCNT 4
+.IX Item "REFCNT"
+.SS "B::PADNAME Methods"
+.IX Subsection "B::PADNAME Methods"
+.PD 0
+.IP PV 4
+.IX Item "PV"
+.IP PVX 4
+.IX Item "PVX"
+.IP LEN 4
+.IX Item "LEN"
+.IP REFCNT 4
+.IX Item "REFCNT"
+.IP GEN 4
+.IX Item "GEN"
+.IP FLAGS 4
+.IX Item "FLAGS"
+.PD
+For backward-compatibility, if the PADNAMEt_OUTER flag is set, the FLAGS
+method adds the SVf_FAKE flag, too.
+.IP TYPE 4
+.IX Item "TYPE"
+A B::HV object representing the stash for a typed lexical.
+.IP SvSTASH 4
+.IX Item "SvSTASH"
+A backward-compatibility alias for TYPE.
+.IP OURSTASH 4
+.IX Item "OURSTASH"
+A B::HV object representing the stash for 'our' variables.
+.IP PROTOCV 4
+.IX Item "PROTOCV"
+The prototype CV for a 'my' sub.
+.IP COP_SEQ_RANGE_LOW 4
+.IX Item "COP_SEQ_RANGE_LOW"
+.PD 0
+.IP COP_SEQ_RANGE_HIGH 4
+.IX Item "COP_SEQ_RANGE_HIGH"
+.PD
+Sequence numbers representing the scope within which a lexical is visible.
+Meaningless if PADNAMEt_OUTER is set.
+.IP PARENT_PAD_INDEX 4
+.IX Item "PARENT_PAD_INDEX"
+Only meaningful if PADNAMEt_OUTER is set.
+.IP PARENT_FAKELEX_FLAGS 4
+.IX Item "PARENT_FAKELEX_FLAGS"
+Only meaningful if PADNAMEt_OUTER is set.
+.IP IsUndef 4
+.IX Item "IsUndef"
+Returns a boolean value to check if the padname is PL_padname_undef.
+.ie n .SS $B::overlay
+.el .SS \f(CW$B::overlay\fP
+.IX Subsection "$B::overlay"
+Although the optree is read-only, there is an overlay facility that allows
+you to override what values the various B::*OP methods return for a
+particular op. \f(CW$B::overlay\fR should be set to reference a two-deep hash:
+indexed by OP address, then method name. Whenever a an op method is
+called, the value in the hash is returned if it exists. This facility is
+used by B::Deparse to "undo" some optimisations. For example:
+.PP
+.Vb 11
+\& local $B::overlay = {};
+\& ...
+\& if ($op\->name eq "foo") {
+\& $B::overlay\->{$$op} = {
+\& name => \*(Aqbar\*(Aq,
+\& next => $op\->next\->next,
+\& };
+\& }
+\& ...
+\& $op\->name # returns "bar"
+\& $op\->next # returns the next op but one
+.Ve
+.SH AUTHOR
+.IX Header "AUTHOR"
+Malcolm Beattie, \f(CW\*(C`mbeattie@sable.ox.ac.uk\*(C'\fR