X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2FB.pm;h=2346ac0470529ac5fdd92f3c1153404d89b0dd18;hb=af9ecd68c9b31448775ad3ba8d8b8460f6271ec3;hp=68600a76065c1a87045a4340a26c4c06c9742898;hpb=7fd0c236b45510e5a5a83b9b58c8d9f6156a3a4a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/B.pm b/ext/B/B.pm index 68600a7..2346ac0 100644 --- a/ext/B/B.pm +++ b/ext/B/B.pm @@ -7,7 +7,7 @@ # package B; -our $VERSION = '1.05'; +our $VERSION = '1.09'; use XSLoader (); require Exporter; @@ -31,12 +31,13 @@ use strict; @B::NULL::ISA = 'B::SV'; @B::PV::ISA = 'B::SV'; @B::IV::ISA = 'B::SV'; -@B::NV::ISA = 'B::IV'; +@B::NV::ISA = 'B::SV'; @B::RV::ISA = 'B::SV'; @B::PVIV::ISA = qw(B::PV B::IV); -@B::PVNV::ISA = qw(B::PV B::NV); +@B::PVNV::ISA = qw(B::PVIV B::NV); @B::PVMG::ISA = 'B::PVNV'; -@B::PVLV::ISA = 'B::GV'; +# Change in the inheritance hierarchy post 5.9.0 +@B::PVLV::ISA = $] > 5.009 ? 'B::GV' : 'B::PVMG'; @B::BM::ISA = 'B::PVMG'; @B::AV::ISA = 'B::PVMG'; @B::GV::ISA = 'B::PVMG'; @@ -127,7 +128,7 @@ sub walkoptree_slow { } shift @parents; } - if (class($op) eq 'PMOP' && $op->pmreplroot && ${$op->pmreplroot}) { + if (class($op) eq 'PMOP' && ref($op->pmreplroot) && ${$op->pmreplroot}) { unshift(@parents, $op); walkoptree_slow($op->pmreplroot, $method, $level + 1); shift @parents; @@ -341,7 +342,7 @@ get an initial "handle" on an internal object. =head2 Functions Returning C, C, C, and C objects -For descriptions of the class hierachy of these objects and the +For descriptions of the class hierarchy of these objects and the methods that can be called on them, see below, L<"OVERVIEW OF CLASSES"> and L<"SV-RELATED CLASSES">. @@ -367,6 +368,10 @@ class. Apart from functions such as C, 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. +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. + =item amagic_generation Returns the SV object corresponding to the C variable C. @@ -429,7 +434,7 @@ Methods">, below. =head2 Functions Returning C objects or for walking op trees -For descriptions of the class hierachy of these objects and the +For descriptions of the class hierarchy of these objects and the methods that can be called on them, see below, L<"OVERVIEW OF CLASSES"> and L<"OP-RELATED CLASSES">. @@ -522,36 +527,55 @@ The bulk of the C module is the methods for accessing fields of these structures. Note that all access is read-only. You cannot modify the internals by -using this module. +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. =head2 SV-RELATED CLASSES B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, 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": +inheritance hierarchy mimics the underlying C "inheritance". For 5.9.1 +and later this is: B::SV | - +--------------+----------------------+ - | | | - B::PV B::IV B::RV - | \ / \ - | \ / \ - | B::PVIV B::NV - \ / - \____ __/ - \ / - B::PVNV - | + +--------------+----------+------------+ + | | | | + B::PV B::IV B::NV B::RV + \ / / + \ / / + B::PVIV / + \ / + \ / + \ / + B::PVNV + | + | + B::PVMG + | + +-----+----+------+-----+-----+ + | | | | | | + B::BM B::AV B::GV B::HV B::CV B::IO + | | + B::PVLV | + B::FM + + +For 5.9.0 and earlier, PVLV is a direct subclass of PVMG, so the base +of this diagram is + | B::PVMG | - +-----+----+------+-----+-----+ - | | | | | | - B::BM B::AV B::GV B::HV B::CV B::IO - | | - B::PVLV | + +------+-----+----+------+-----+-----+ + | | | | | | | + B::PVLV B::BM B::AV B::GV B::HV B::CV B::IO + | + | B::FM @@ -824,8 +848,6 @@ IoIFP($io) == PerlIO_stdin() ). =item MAX -=item OFF - =item ARRAY =item ARRAYelt @@ -833,8 +855,6 @@ IoIFP($io) == PerlIO_stdin() ). Like C, but takes an index as an argument to get only one element, rather than a list of all of them. -=item AvFLAGS - =back =head2 B::CV Methods @@ -885,8 +905,6 @@ For constant subroutines, returns the constant SV returned by the subroutine. =item NAME -=item PMROOT - =item ARRAY =back @@ -920,6 +938,9 @@ with the leading "class indication" prefix (C<"op_">) removed. =head2 B::OP Methods +These methods get the values of similarly named fields within the OP +data structure. See top of C for more info. + =over 4 =item next @@ -944,12 +965,16 @@ This returns the op description from the global C PL_op_desc array =item type -=item seq +=item opt + +=item static =item flags =item private +=item spare + =back =head2 B::UNOP METHOD