3 # Copyright (c) 1996, 1997, 1998 Malcolm Beattie
5 # You may distribute under the terms of either the GNU General Public
6 # License or the Artistic License, as specified in the README file.
10 our $VERSION = '1.18';
16 # walkoptree_slow comes from B.pm (you are there),
17 # walkoptree comes from B.xs
18 @EXPORT_OK = qw(minus_c ppname save_BEGINs
19 class peekop cast_I32 cstring cchar hash threadsv_names
20 main_root main_start main_cv svref_2object opnumber
21 sub_generation amagic_generation perlstring
22 walkoptree_slow walkoptree walkoptree_exec walksymtable
23 parents comppadlist sv_undef compile_stats timing_info
24 begin_av init_av check_av end_av regex_padav dowarn defstash
25 curstash warnhook diehook inc_gv @optype @specialsv_name
27 push @EXPORT_OK, qw(unitcheck_av) if $] > 5.009;
31 @B::SV::ISA = 'B::OBJECT';
32 @B::NULL::ISA = 'B::SV';
33 @B::PV::ISA = 'B::SV';
34 @B::IV::ISA = 'B::SV';
35 @B::NV::ISA = 'B::SV';
36 # RV is eliminated with 5.11.0, but effectively is a specialisation of IV now.
37 @B::RV::ISA = $] > 5.011 ? 'B::IV' : 'B::SV';
38 @B::PVIV::ISA = qw(B::PV B::IV);
39 @B::PVNV::ISA = qw(B::PVIV B::NV);
40 @B::PVMG::ISA = 'B::PVNV';
41 # Change in the inheritance hierarchy post 5.9.0
42 @B::PVLV::ISA = $] > 5.009 ? 'B::GV' : 'B::PVMG';
43 # BM is eliminated post 5.9.5, but effectively is a specialisation of GV now.
44 @B::BM::ISA = $] > 5.009005 ? 'B::GV' : 'B::PVMG';
45 @B::AV::ISA = 'B::PVMG';
46 @B::GV::ISA = 'B::PVMG';
47 @B::HV::ISA = 'B::PVMG';
48 @B::CV::ISA = 'B::PVMG';
49 @B::IO::ISA = 'B::PVMG';
50 @B::FM::ISA = 'B::CV';
52 @B::OP::ISA = 'B::OBJECT';
53 @B::UNOP::ISA = 'B::OP';
54 @B::BINOP::ISA = 'B::UNOP';
55 @B::LOGOP::ISA = 'B::UNOP';
56 @B::LISTOP::ISA = 'B::BINOP';
57 @B::SVOP::ISA = 'B::OP';
58 @B::PADOP::ISA = 'B::OP';
59 @B::PVOP::ISA = 'B::OP';
60 @B::LOOP::ISA = 'B::LISTOP';
61 @B::PMOP::ISA = 'B::LISTOP';
62 @B::COP::ISA = 'B::OP';
64 @B::SPECIAL::ISA = 'B::OBJECT';
66 @B::optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP);
67 # bytecode.pl contained the following comment:
68 # Nullsv *must* come first in the following so that the condition
69 # ($$sv == 0) can continue to be used to test (sv == Nullsv).
70 @B::specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no
71 (SV*)pWARN_ALL (SV*)pWARN_NONE (SV*)pWARN_STD);
74 # Stop "-w" from complaining about the lack of a real B::OBJECT class
79 my $name = (shift())->NAME;
81 # The regex below corresponds to the isCONTROLVAR macro
84 $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".
85 chr( utf8::unicode_to_native( 64 ^ ord($1) ))/e;
87 # When we say unicode_to_native we really mean ascii_to_native,
88 # which matters iff this is a non-ASCII platform (EBCDIC).
93 sub B::IV::int_value {
95 return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV);
98 sub B::NULL::as_string() {""}
99 sub B::IV::as_string() {goto &B::IV::int_value}
100 sub B::PV::as_string() {goto &B::PV::PV}
107 my ($class, $value) = @_;
109 walkoptree_debug($value);
119 sub parents { \@parents }
124 return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
127 sub walkoptree_slow {
128 my($op, $method, $level) = @_;
129 $op_count++; # just for statistics
131 warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
132 $op->$method($level) if $op->can($method);
133 if ($$op && ($op->flags & OPf_KIDS)) {
135 unshift(@parents, $op);
136 for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
137 walkoptree_slow($kid, $method, $level + 1);
141 if (class($op) eq 'PMOP'
142 && ref($op->pmreplroot)
143 && ${$op->pmreplroot}
144 && $op->pmreplroot->isa( 'B::OP' ))
146 unshift(@parents, $op);
147 walkoptree_slow($op->pmreplroot, $method, $level + 1);
153 return "Total number of OPs processed: $op_count\n";
157 my ($sec, $min, $hr) = localtime;
158 my ($user, $sys) = times;
159 sprintf("%02d:%02d:%02d user=$user sys=$sys",
160 $hr, $min, $sec, $user, $sys);
170 my ($obj, $value) = @_;
171 # warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
172 $symtable{sprintf("sym_%x", $$obj)} = $value;
177 return $symtable{sprintf("sym_%x", $$obj)};
180 sub walkoptree_exec {
181 my ($op, $method, $level) = @_;
184 my $prefix = " " x $level;
185 for (; $$op; $op = $op->next) {
188 print $prefix, "goto $sym\n";
191 savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
192 $op->$method($level);
195 /^(d?or(assign)?|and(assign)?|mapwhile|grepwhile|entertry|range|cond_expr)$/)
197 print $prefix, uc($1), " => {\n";
198 walkoptree_exec($op->other, $method, $level + 1);
199 print $prefix, "}\n";
200 } elsif ($ppname eq "match" || $ppname eq "subst") {
201 my $pmreplstart = $op->pmreplstart;
203 print $prefix, "PMREPLSTART => {\n";
204 walkoptree_exec($pmreplstart, $method, $level + 1);
205 print $prefix, "}\n";
207 } elsif ($ppname eq "substcont") {
208 print $prefix, "SUBSTCONT => {\n";
209 walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
210 print $prefix, "}\n";
212 } elsif ($ppname eq "enterloop") {
213 print $prefix, "REDO => {\n";
214 walkoptree_exec($op->redoop, $method, $level + 1);
215 print $prefix, "}\n", $prefix, "NEXT => {\n";
216 walkoptree_exec($op->nextop, $method, $level + 1);
217 print $prefix, "}\n", $prefix, "LAST => {\n";
218 walkoptree_exec($op->lastop, $method, $level + 1);
219 print $prefix, "}\n";
220 } elsif ($ppname eq "subst") {
221 my $replstart = $op->pmreplstart;
223 print $prefix, "SUBST => {\n";
224 walkoptree_exec($replstart, $method, $level + 1);
225 print $prefix, "}\n";
232 my ($symref, $method, $recurse, $prefix) = @_;
237 $prefix = '' unless defined $prefix;
238 while (($sym, $ref) = each %$symref) {
239 $fullname = "*main::".$prefix.$sym;
241 $sym = $prefix . $sym;
242 if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym)) {
243 walksymtable(\%$fullname, $method, $recurse, $sym);
246 svref_2object(\*$fullname)->$method();
257 my ($class, $section, $symtable, $default) = @_;
258 $output_fh ||= FileHandle->new_tmpfile;
259 my $obj = bless [-1, $section, $symtable, $default], $class;
260 $sections{$section} = $obj;
265 my ($class, $section) = @_;
266 return $sections{$section};
271 while (defined($_ = shift)) {
272 print $output_fh "$section->[1]\t$_\n";
279 return $section->[0];
284 return $section->[1];
289 return $section->[2];
294 return $section->[3];
298 my ($section, $fh, $format) = @_;
299 my $name = $section->name;
300 my $sym = $section->symtable || {};
301 my $default = $section->default;
303 seek($output_fh, 0, 0);
304 while (<$output_fh>) {
309 exists($sym->{$1}) ? $sym->{$1} : $default;
311 printf $fh $format, $_;
325 B - The Perl Compiler
333 The C<B> module supplies classes which allow a Perl program to delve
334 into its own innards. It is the module used to implement the
335 "backends" of the Perl compiler. Usage of the compiler does not
336 require knowledge of this module: see the F<O> module for the
337 user-visible part. The C<B> module is of use to those who want to
338 write new compiler backends. This documentation assumes that the
339 reader knows a fair amount about perl's internals including such
340 things as SVs, OPs and the internal symbol table and syntax tree
345 The C<B> module contains a set of utility functions for querying the
346 current state of the Perl interpreter; typically these functions
347 return objects from the B::SV and B::OP classes, or their derived
348 classes. These classes in turn define methods for querying the
349 resulting objects about their own internal state.
351 =head1 Utility Functions
353 The C<B> module exports a variety of functions: some are simple
354 utility functions, others provide a Perl program with a way to
355 get an initial "handle" on an internal object.
357 =head2 Functions Returning C<B::SV>, C<B::AV>, C<B::HV>, and C<B::CV> objects
359 For descriptions of the class hierarchy of these objects and the
360 methods that can be called on them, see below, L<"OVERVIEW OF
361 CLASSES"> and L<"SV-RELATED CLASSES">.
367 Returns the SV object corresponding to the C variable C<sv_undef>.
371 Returns the SV object corresponding to the C variable C<sv_yes>.
375 Returns the SV object corresponding to the C variable C<sv_no>.
377 =item svref_2object(SVREF)
379 Takes a reference to any Perl value, and turns the referred-to value
380 into an object in the appropriate B::OP-derived or B::SV-derived
381 class. Apart from functions such as C<main_root>, this is the primary
382 way to get an initial "handle" on an internal perl data structure
383 which can then be followed with the other access methods.
385 The returned object will only be valid as long as the underlying OPs
386 and SVs continue to exist. Do not attempt to use the object after the
387 underlying structures are freed.
389 =item amagic_generation
391 Returns the SV object corresponding to the C variable C<amagic_generation>.
395 Returns the AV object (i.e. in class B::AV) representing INIT blocks.
399 Returns the AV object (i.e. in class B::AV) representing CHECK blocks.
403 Returns the AV object (i.e. in class B::AV) representing UNITCHECK blocks.
407 Returns the AV object (i.e. in class B::AV) representing BEGIN blocks.
411 Returns the AV object (i.e. in class B::AV) representing END blocks.
415 Returns the AV object (i.e. in class B::AV) of the global comppadlist.
419 Only when perl was compiled with ithreads.
423 Return the (faked) CV corresponding to the main part of the Perl
428 =head2 Functions for Examining the Symbol Table
432 =item walksymtable(SYMREF, METHOD, RECURSE, PREFIX)
434 Walk the symbol table starting at SYMREF and call METHOD on each
435 symbol (a B::GV object) visited. When the walk reaches package
436 symbols (such as "Foo::") it invokes RECURSE, passing in the symbol
437 name, and only recurses into the package if that sub returns true.
439 PREFIX is the name of the SYMREF you're walking.
443 # Walk CGI's symbol table calling print_subs on each symbol.
444 # Recurse only into CGI::Util::
445 walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' },
448 print_subs() is a B::GV method you have declared. Also see L<"B::GV
453 =head2 Functions Returning C<B::OP> objects or for walking op trees
455 For descriptions of the class hierarchy of these objects and the
456 methods that can be called on them, see below, L<"OVERVIEW OF
457 CLASSES"> and L<"OP-RELATED CLASSES">.
463 Returns the root op (i.e. an object in the appropriate B::OP-derived
464 class) of the main part of the Perl program.
468 Returns the starting op of the main part of the Perl program.
470 =item walkoptree(OP, METHOD)
472 Does a tree-walk of the syntax tree based at OP and calls METHOD on
473 each op it visits. Each node is visited before its children. If
474 C<walkoptree_debug> (see below) has been called to turn debugging on then
475 the method C<walkoptree_debug> is called on each op before METHOD is
478 =item walkoptree_debug(DEBUG)
480 Returns the current debugging flag for C<walkoptree>. If the optional
481 DEBUG argument is non-zero, it sets the debugging flag to that. See
482 the description of C<walkoptree> above for what the debugging flag
487 =head2 Miscellaneous Utility Functions
493 Return the PP function name (e.g. "pp_add") of op number OPNUM.
497 Returns a string in the form "0x..." representing the value of the
498 internal hash function used by perl on string STR.
502 Casts I to the internal I32 type used by that perl.
506 Does the equivalent of the C<-c> command-line option. Obviously, this
507 is only useful in a BEGIN block or else the flag is set too late.
511 Returns a double-quote-surrounded escaped version of STR which can
512 be used as a string in C source code.
514 =item perlstring(STR)
516 Returns a double-quote-surrounded escaped version of STR which can
517 be used as a string in Perl source code.
521 Returns the class of an object without the part of the classname
522 preceding the first C<"::">. This is used to turn C<"B::UNOP"> into
523 C<"UNOP"> for example.
527 In a perl compiled for threads, this returns a list of the special
528 per-thread threadsv variables.
532 =head2 Exported utility variabiles
538 my $op_type = $optype[$op_type_num];
540 A simple mapping of the op type number to its type (like 'COP' or 'BINOP').
542 =item @specialsv_name
544 my $sv_name = $specialsv_name[$sv_index];
546 Certain SV types are considered 'special'. They're represented by
547 B::SPECIAL and are referred to by a number from the specialsv_list.
548 This array maps that number back to the name of the SV (like 'Nullsv'
554 =head1 OVERVIEW OF CLASSES
556 The C structures used by Perl's internals to hold SV and OP
557 information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
558 class hierarchy and the C<B> module gives access to them via a true
559 object hierarchy. Structure fields which point to other objects
560 (whether types of SV or types of OP) are represented by the C<B>
561 module as Perl objects of the appropriate class.
563 The bulk of the C<B> module is the methods for accessing fields of
566 Note that all access is read-only. You cannot modify the internals by
567 using this module. Also, note that the B::OP and B::SV objects created
568 by this module are only valid for as long as the underlying objects
569 exist; their creation doesn't increase the reference counts of the
570 underlying objects. Trying to access the fields of a freed object will
571 give incomprehensible results, or worse.
573 =head2 SV-RELATED CLASSES
575 B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM (5.9.5 and
576 earlier), B::PVLV, B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes
577 correspond in the obvious way to the underlying C structures of similar names.
578 The inheritance hierarchy mimics the underlying C "inheritance". For the
579 5.10, 5.10.1 I<etc> this is:
583 +------------+------------+------------+
585 B::PV B::IV B::NV B::RV
597 +-----+-----+-----+-----+
599 B::AV B::GV B::HV B::CV B::IO
605 For 5.11.0 and later, B::RV is abolished, and IVs can be used to store
608 For 5.9.0 and earlier, PVLV is a direct subclass of PVMG, and BM is still
609 present as a distinct type, so the base of this diagram is
616 +------+-----+-----+-----+-----+-----+
618 B::PVLV B::BM B::AV B::GV B::HV B::CV B::IO
624 Access methods correspond to the underlying C macros for field access,
625 usually with the leading "class indication" prefix removed (Sv, Av,
626 Hv, ...). The leading prefix is only left in cases where its removal
627 would cause a clash in method name. For example, C<GvREFCNT> stays
628 as-is since its abbreviation would clash with the "superclass" method
629 C<REFCNT> (corresponding to the C function C<SvREFCNT>).
641 Returns a reference to the regular scalar corresponding to this
642 B::SV object. In other words, this method is the inverse operation
643 to the svref_2object() subroutine. This scalar and other data it points
644 at should be considered read-only: modifying them is neither safe nor
645 guaranteed to have a sensible effect.
655 Returns the value of the IV, I<interpreted as
656 a signed integer>. This will be misleading
657 if C<FLAGS & SVf_IVisUV>. Perhaps you want the
658 C<int_value> method instead?
666 This method returns the value of the IV as an integer.
667 It differs from C<IV> in that it returns the correct
668 value regardless of whether it's stored signed or
701 This method is the one you usually want. It constructs a
702 string using the length and offset information in the struct:
703 for ordinary scalars it will return the string that you'd see
704 from Perl, even if it contains null characters.
708 Same as B::RV::RV, except that it will die() if the PV isn't
713 This method is less often useful. It assumes that the string
714 stored in the struct is null-terminated, and disregards the
717 It is the appropriate method to use if you need to get the name
718 of a lexical variable from a padname array. Lexical variable names
719 are always stored with a null terminator, and the length field
720 (SvCUR) is overloaded for other purposes and can't be relied on here.
724 =head2 B::PVMG Methods
734 =head2 B::MAGIC Methods
742 Only valid on r-magic, returns the string that generated the regexp.
752 Will die() if called on r-magic.
758 Only valid on r-magic, returns the integer value of the REGEX stored
763 =head2 B::PVLV Methods
797 This method returns TRUE if the GP field of the GV is NULL.
803 This method returns the name of the glob, but if the first
804 character of the name is a control character, then it converts
805 it to ^X first, so that *^G would return "^G" rather than "\cG".
807 It's useful if you want to print out the name of a variable.
808 If you restrict yourself to globs which exist at compile-time
809 then the result ought to be unambiguous, because code like
810 C<${"^G"} = 1> is compiled as two ops - a constant string and
811 a dereference (rv2gv) - so that the glob is created at runtime.
813 If you're working with globs at runtime, and need to disambiguate
814 *^G from *{"^G"}, then you should use the raw NAME method.
878 Takes one arguments ( 'stdin' | 'stdout' | 'stderr' ) and returns true
879 if the IoIFP of the object is equal to the handle whose name was
880 passed as argument ( i.e. $io->IsSTD('stderr') is true if
881 IoIFP($io) == PerlIO_stdin() ).
897 Like C<ARRAY>, but takes an index as an argument to get only one element,
898 rather than a list of all of them.
902 This method is deprecated if running under Perl 5.8, and is no longer present
903 if running under Perl 5.9
907 This method returns the AV specific flags. In Perl 5.9 these are now stored
908 in with the main SV flags, so this method is no longer present.
938 For constant subroutines, returns the constant SV returned by the subroutine.
964 This method is not present if running under Perl 5.9, as the PMROOT
965 information is no longer stored directly in the hash.
969 =head2 OP-RELATED CLASSES
971 C<B::OP>, C<B::UNOP>, C<B::BINOP>, C<B::LOGOP>, C<B::LISTOP>, C<B::PMOP>,
972 C<B::SVOP>, C<B::PADOP>, C<B::PVOP>, C<B::LOOP>, C<B::COP>.
974 These classes correspond in the obvious way to the underlying C
975 structures of similar names. The inheritance hierarchy mimics the
976 underlying C "inheritance":
980 +---------------+--------+--------+-------+
982 B::UNOP B::SVOP B::PADOP B::COP B::PVOP
993 Access methods correspond to the underlying C structre field names,
994 with the leading "class indication" prefix (C<"op_">) removed.
998 These methods get the values of similarly named fields within the OP
999 data structure. See top of C<op.h> for more info.
1009 This returns the op name as a string (e.g. "add", "rv2av").
1013 This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
1014 "PL_ppaddr[OP_RV2AV]").
1018 This returns the op description from the global C PL_op_desc array
1019 (e.g. "addition" "array deref").
1035 =head2 B::UNOP METHOD
1043 =head2 B::BINOP METHOD
1051 =head2 B::LOGOP METHOD
1059 =head2 B::LISTOP METHOD
1067 =head2 B::PMOP Methods
1087 Only when perl was compiled with ithreads.
1091 =head2 B::SVOP METHOD
1101 =head2 B::PADOP METHOD
1109 =head2 B::PVOP METHOD
1117 =head2 B::LOOP Methods
1129 =head2 B::COP Methods
1160 Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>