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.
13 # walkoptree_slow comes from B.pm (you are there),
14 # walkoptree comes from B.xs
15 @EXPORT_OK = qw(minus_c ppname save_BEGINs
16 class peekop cast_I32 cstring cchar hash threadsv_names
17 main_root main_start main_cv svref_2object opnumber
19 walkoptree_slow walkoptree walkoptree_exec walksymtable
20 parents comppadlist sv_undef compile_stats timing_info
21 begin_av init_av end_av);
25 @B::SV::ISA = 'B::OBJECT';
26 @B::NULL::ISA = 'B::SV';
27 @B::PV::ISA = 'B::SV';
28 @B::IV::ISA = 'B::SV';
29 @B::NV::ISA = 'B::IV';
30 @B::RV::ISA = 'B::SV';
31 @B::PVIV::ISA = qw(B::PV B::IV);
32 @B::PVNV::ISA = qw(B::PV B::NV);
33 @B::PVMG::ISA = 'B::PVNV';
34 @B::PVLV::ISA = 'B::PVMG';
35 @B::BM::ISA = 'B::PVMG';
36 @B::AV::ISA = 'B::PVMG';
37 @B::GV::ISA = 'B::PVMG';
38 @B::HV::ISA = 'B::PVMG';
39 @B::CV::ISA = 'B::PVMG';
40 @B::IO::ISA = 'B::PVMG';
41 @B::FM::ISA = 'B::CV';
43 @B::OP::ISA = 'B::OBJECT';
44 @B::UNOP::ISA = 'B::OP';
45 @B::BINOP::ISA = 'B::UNOP';
46 @B::LOGOP::ISA = 'B::UNOP';
47 @B::LISTOP::ISA = 'B::BINOP';
48 @B::SVOP::ISA = 'B::OP';
49 @B::PADOP::ISA = 'B::OP';
50 @B::PVOP::ISA = 'B::OP';
51 @B::CVOP::ISA = 'B::OP';
52 @B::LOOP::ISA = 'B::LISTOP';
53 @B::PMOP::ISA = 'B::LISTOP';
54 @B::COP::ISA = 'B::OP';
56 @B::SPECIAL::ISA = 'B::OBJECT';
59 # Stop "-w" from complaining about the lack of a real B::OBJECT class
64 my $name = (shift())->NAME;
65 $name =~ s/^([\cA-\cZ])/"^".chr(64 + ord($1))/e;
74 my ($class, $value) = @_;
76 walkoptree_debug($value);
86 sub parents { \@parents }
91 return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
95 my($op, $method, $level) = @_;
96 $op_count++; # just for statistics
98 warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
100 if ($$op && ($op->flags & OPf_KIDS)) {
102 unshift(@parents, $op);
103 for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
104 walkoptree_slow($kid, $method, $level + 1);
111 return "Total number of OPs processed: $op_count\n";
115 my ($sec, $min, $hr) = localtime;
116 my ($user, $sys) = times;
117 sprintf("%02d:%02d:%02d user=$user sys=$sys",
118 $hr, $min, $sec, $user, $sys);
128 my ($obj, $value) = @_;
129 # warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
130 $symtable{sprintf("sym_%x", $$obj)} = $value;
135 return $symtable{sprintf("sym_%x", $$obj)};
138 sub walkoptree_exec {
139 my ($op, $method, $level) = @_;
142 my $prefix = " " x $level;
143 for (; $$op; $op = $op->next) {
146 print $prefix, "goto $sym\n";
149 savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
150 $op->$method($level);
153 /^(or|and|mapwhile|grepwhile|entertry|range|cond_expr)$/)
155 print $prefix, uc($1), " => {\n";
156 walkoptree_exec($op->other, $method, $level + 1);
157 print $prefix, "}\n";
158 } elsif ($ppname eq "match" || $ppname eq "subst") {
159 my $pmreplstart = $op->pmreplstart;
161 print $prefix, "PMREPLSTART => {\n";
162 walkoptree_exec($pmreplstart, $method, $level + 1);
163 print $prefix, "}\n";
165 } elsif ($ppname eq "substcont") {
166 print $prefix, "SUBSTCONT => {\n";
167 walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
168 print $prefix, "}\n";
170 } elsif ($ppname eq "enterloop") {
171 print $prefix, "REDO => {\n";
172 walkoptree_exec($op->redoop, $method, $level + 1);
173 print $prefix, "}\n", $prefix, "NEXT => {\n";
174 walkoptree_exec($op->nextop, $method, $level + 1);
175 print $prefix, "}\n", $prefix, "LAST => {\n";
176 walkoptree_exec($op->lastop, $method, $level + 1);
177 print $prefix, "}\n";
178 } elsif ($ppname eq "subst") {
179 my $replstart = $op->pmreplstart;
181 print $prefix, "SUBST => {\n";
182 walkoptree_exec($replstart, $method, $level + 1);
183 print $prefix, "}\n";
190 my ($symref, $method, $recurse, $prefix) = @_;
195 $prefix = '' unless defined $prefix;
196 while (($sym, $ref) = each %$symref) {
197 *glob = "*main::".$prefix.$sym;
199 $sym = $prefix . $sym;
200 if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym)) {
201 walksymtable(\%glob, $method, $recurse, $sym);
204 svref_2object(\*glob)->EGV->$method();
215 my ($class, $section, $symtable, $default) = @_;
216 $output_fh ||= FileHandle->new_tmpfile;
217 my $obj = bless [-1, $section, $symtable, $default], $class;
218 $sections{$section} = $obj;
223 my ($class, $section) = @_;
224 return $sections{$section};
229 while (defined($_ = shift)) {
230 print $output_fh "$section->[1]\t$_\n";
237 return $section->[0];
242 return $section->[1];
247 return $section->[2];
252 return $section->[3];
256 my ($section, $fh, $format) = @_;
257 my $name = $section->name;
258 my $sym = $section->symtable || {};
259 my $default = $section->default;
261 seek($output_fh, 0, 0);
262 while (<$output_fh>) {
267 exists($sym->{$1}) ? $sym->{$1} : $default;
269 printf $fh $format, $_;
283 B - The Perl Compiler
291 The C<B> module supplies classes which allow a Perl program to delve
292 into its own innards. It is the module used to implement the
293 "backends" of the Perl compiler. Usage of the compiler does not
294 require knowledge of this module: see the F<O> module for the
295 user-visible part. The C<B> module is of use to those who want to
296 write new compiler backends. This documentation assumes that the
297 reader knows a fair amount about perl's internals including such
298 things as SVs, OPs and the internal symbol table and syntax tree
301 =head1 OVERVIEW OF CLASSES
303 The C structures used by Perl's internals to hold SV and OP
304 information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
305 class hierarchy and the C<B> module gives access to them via a true
306 object hierarchy. Structure fields which point to other objects
307 (whether types of SV or types of OP) are represented by the C<B>
308 module as Perl objects of the appropriate class. The bulk of the C<B>
309 module is the methods for accessing fields of these structures. Note
310 that all access is read-only: you cannot modify the internals by
313 =head2 SV-RELATED CLASSES
315 B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM, B::PVLV,
316 B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes correspond in
317 the obvious way to the underlying C structures of similar names. The
318 inheritance hierarchy mimics the underlying C "inheritance". Access
319 methods correspond to the underlying C macros for field access,
320 usually with the leading "class indication" prefix removed (Sv, Av,
321 Hv, ...). The leading prefix is only left in cases where its removal
322 would cause a clash in method name. For example, C<GvREFCNT> stays
323 as-is since its abbreviation would clash with the "superclass" method
324 C<REFCNT> (corresponding to the C function C<SvREFCNT>).
374 This method is the one you usually want. It constructs a
375 string using the length and offset information in the struct:
376 for ordinary scalars it will return the string that you'd see
377 from Perl, even if it contains null characters.
381 This method is less often useful. It assumes that the string
382 stored in the struct is null-terminated, and disregards the
385 It is the appropriate method to use if you need to get the name
386 of a lexical variable from a padname array. Lexical variable names
387 are always stored with a null terminator, and the length field
388 (SvCUR) is overloaded for other purposes and can't be relied on here.
392 =head2 B::PVMG METHODS
402 =head2 B::MAGIC METHODS
420 =head2 B::PVLV METHODS
454 This method returns TRUE if the GP field of the GV is NULL.
460 This method returns the name of the glob, but if the first
461 character of the name is a control character, then it converts
462 it to ^X first, so that *^G would return "^G" rather than "\cG".
464 It's useful if you want to print out the name of a variable.
465 If you restrict yourself to globs which exist at compile-time
466 then the result ought to be unambiguous, because code like
467 C<${"^G"} = 1> is compiled as two ops - a constant string and
468 a dereference (rv2gv) - so that the glob is created at runtime.
470 If you're working with globs at runtime, and need to disambiguate
471 *^G from *{"^G"}, then you should use the raw NAME method.
601 =head2 OP-RELATED CLASSES
603 B::OP, B::UNOP, B::BINOP, B::LOGOP, B::LISTOP, B::PMOP,
604 B::SVOP, B::PADOP, B::PVOP, B::CVOP, B::LOOP, B::COP.
605 These classes correspond in
606 the obvious way to the underlying C structures of similar names. The
607 inheritance hierarchy mimics the underlying C "inheritance". Access
608 methods correspond to the underlying C structre field names, with the
609 leading "class indication" prefix removed (op_).
621 This returns the op name as a string (e.g. "add", "rv2av").
625 This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
626 "PL_ppaddr[OP_RV2AV]").
630 This returns the op description from the global C PL_op_desc array
631 (e.g. "addition" "array deref").
645 =head2 B::UNOP METHOD
653 =head2 B::BINOP METHOD
661 =head2 B::LOGOP METHOD
669 =head2 B::LISTOP METHOD
677 =head2 B::PMOP METHODS
697 =head2 B::SVOP METHOD
707 =head2 B::PADOP METHOD
715 =head2 B::PVOP METHOD
723 =head2 B::LOOP METHODS
735 =head2 B::COP METHODS
753 =head1 FUNCTIONS EXPORTED BY C<B>
755 The C<B> module exports a variety of functions: some are simple
756 utility functions, others provide a Perl program with a way to
757 get an initial "handle" on an internal object.
763 Return the (faked) CV corresponding to the main part of the Perl
768 Returns the AV object (i.e. in class B::AV) representing INIT blocks.
772 Returns the root op (i.e. an object in the appropriate B::OP-derived
773 class) of the main part of the Perl program.
777 Returns the starting op of the main part of the Perl program.
781 Returns the AV object (i.e. in class B::AV) of the global comppadlist.
785 Returns the SV object corresponding to the C variable C<sv_undef>.
789 Returns the SV object corresponding to the C variable C<sv_yes>.
793 Returns the SV object corresponding to the C variable C<sv_no>.
795 =item amagic_generation
797 Returns the SV object corresponding to the C variable C<amagic_generation>.
799 =item walkoptree(OP, METHOD)
801 Does a tree-walk of the syntax tree based at OP and calls METHOD on
802 each op it visits. Each node is visited before its children. If
803 C<walkoptree_debug> (q.v.) has been called to turn debugging on then
804 the method C<walkoptree_debug> is called on each op before METHOD is
807 =item walkoptree_debug(DEBUG)
809 Returns the current debugging flag for C<walkoptree>. If the optional
810 DEBUG argument is non-zero, it sets the debugging flag to that. See
811 the description of C<walkoptree> above for what the debugging flag
814 =item walksymtable(SYMREF, METHOD, RECURSE)
816 Walk the symbol table starting at SYMREF and call METHOD on each
817 symbol visited. When the walk reached package symbols "Foo::" it
818 invokes RECURSE and only recurses into the package if that sub
821 =item svref_2object(SV)
823 Takes any Perl variable and turns it into an object in the
824 appropriate B::OP-derived or B::SV-derived class. Apart from functions
825 such as C<main_root>, this is the primary way to get an initial
826 "handle" on a internal perl data structure which can then be followed
827 with the other access methods.
831 Return the PP function name (e.g. "pp_add") of op number OPNUM.
835 Returns a string in the form "0x..." representing the value of the
836 internal hash function used by perl on string STR.
840 Casts I to the internal I32 type used by that perl.
845 Does the equivalent of the C<-c> command-line option. Obviously, this
846 is only useful in a BEGIN block or else the flag is set too late.
851 Returns a double-quote-surrounded escaped version of STR which can
852 be used as a string in C source code.
856 Returns the class of an object without the part of the classname
857 preceding the first "::". This is used to turn "B::UNOP" into
862 In a perl compiled for threads, this returns a list of the special
863 per-thread threadsv variables.
869 Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>