Upgrade to Time::HiRes 1.9709
[p5sagit/p5-mst-13.2.git] / ext / B / B.pm
CommitLineData
a798dbf2 1# B.pm
2#
1a52ab62 3# Copyright (c) 1996, 1997, 1998 Malcolm Beattie
a798dbf2 4#
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.
7#
8package B;
28b605d8 9
6822775c 10our $VERSION = '1.17';
28b605d8 11
9426adcd 12use XSLoader ();
a798dbf2 13require Exporter;
9426adcd 14@ISA = qw(Exporter);
b2590c4e 15
f72d64f0 16# walkoptree_slow comes from B.pm (you are there),
17# walkoptree comes from B.xs
f6c2d85b 18@EXPORT_OK = qw(minus_c ppname save_BEGINs
19 class peekop cast_I32 cstring cchar hash threadsv_names
b2590c4e 20 main_root main_start main_cv svref_2object opnumber
5ce57cc0 21 sub_generation amagic_generation perlstring
f6c2d85b 22 walkoptree_slow walkoptree walkoptree_exec walksymtable
23 parents comppadlist sv_undef compile_stats timing_info
e412117e 24 begin_av init_av check_av end_av regex_padav dowarn defstash
baccf54f 25 curstash warnhook diehook inc_gv @optype @specialsv_name
651aa52e 26 );
e412117e 27push @EXPORT_OK, qw(unitcheck_av) if $] > 5.009;
b2590c4e 28
4c1f658f 29sub OPf_KIDS ();
a798dbf2 30use strict;
31@B::SV::ISA = 'B::OBJECT';
32@B::NULL::ISA = 'B::SV';
33@B::PV::ISA = 'B::SV';
34@B::IV::ISA = 'B::SV';
4edc9001 35@B::NV::ISA = 'B::SV';
a798dbf2 36@B::RV::ISA = 'B::SV';
37@B::PVIV::ISA = qw(B::PV B::IV);
4edc9001 38@B::PVNV::ISA = qw(B::PVIV B::NV);
a798dbf2 39@B::PVMG::ISA = 'B::PVNV';
a01b8a53 40# Change in the inheritance hierarchy post 5.9.0
f5ba1307 41@B::PVLV::ISA = $] > 5.009 ? 'B::GV' : 'B::PVMG';
6822775c 42# BM is eliminated post 5.9.5, but effectively is a specialisation of GV now.
43@B::BM::ISA = $] > 5.009005 ? 'B::GV' : 'B::PVMG';
a798dbf2 44@B::AV::ISA = 'B::PVMG';
45@B::GV::ISA = 'B::PVMG';
46@B::HV::ISA = 'B::PVMG';
47@B::CV::ISA = 'B::PVMG';
276493cb 48@B::IO::ISA = 'B::PVMG';
49@B::FM::ISA = 'B::CV';
a798dbf2 50
51@B::OP::ISA = 'B::OBJECT';
52@B::UNOP::ISA = 'B::OP';
53@B::BINOP::ISA = 'B::UNOP';
54@B::LOGOP::ISA = 'B::UNOP';
a798dbf2 55@B::LISTOP::ISA = 'B::BINOP';
56@B::SVOP::ISA = 'B::OP';
7934575e 57@B::PADOP::ISA = 'B::OP';
a798dbf2 58@B::PVOP::ISA = 'B::OP';
a798dbf2 59@B::LOOP::ISA = 'B::LISTOP';
60@B::PMOP::ISA = 'B::LISTOP';
61@B::COP::ISA = 'B::OP';
62
63@B::SPECIAL::ISA = 'B::OBJECT';
64
baccf54f 65@B::optype = qw(OP UNOP BINOP LOGOP LISTOP PMOP SVOP PADOP PVOP LOOP COP);
66# bytecode.pl contained the following comment:
67# Nullsv *must* come first in the following so that the condition
68# ($$sv == 0) can continue to be used to test (sv == Nullsv).
69@B::specialsv_name = qw(Nullsv &PL_sv_undef &PL_sv_yes &PL_sv_no
70 (SV*)pWARN_ALL (SV*)pWARN_NONE (SV*)pWARN_STD);
71
a798dbf2 72{
73 # Stop "-w" from complaining about the lack of a real B::OBJECT class
74 package B::OBJECT;
75}
76
002b978b 77sub B::GV::SAFENAME {
78 my $name = (shift())->NAME;
d9963e60 79
80 # The regex below corresponds to the isCONTROLVAR macro
81 # from toke.c
82
7a9b44b9 83 $name =~ s/^([\cA-\cZ\c\\c[\c]\c?\c_\c^])/"^".
84 chr( utf8::unicode_to_native( 64 ^ ord($1) ))/e;
85
86 # When we say unicode_to_native we really mean ascii_to_native,
87 # which matters iff this is a non-ASCII platform (EBCDIC).
88
002b978b 89 return $name;
90}
91
d9963e60 92sub B::IV::int_value {
93 my ($self) = @_;
94 return (($self->FLAGS() & SVf_IVisUV()) ? $self->UVX : $self->IV);
95}
96
f3402b25 97sub B::NULL::as_string() {""}
98sub B::IV::as_string() {goto &B::IV::int_value}
99sub B::PV::as_string() {goto &B::PV::PV}
100
a798dbf2 101my $debug;
102my $op_count = 0;
103my @parents = ();
104
105sub debug {
106 my ($class, $value) = @_;
107 $debug = $value;
108 walkoptree_debug($value);
109}
110
a798dbf2 111sub class {
112 my $obj = shift;
113 my $name = ref $obj;
114 $name =~ s/^.*:://;
115 return $name;
116}
117
118sub parents { \@parents }
119
120# For debugging
121sub peekop {
122 my $op = shift;
3f872cb9 123 return sprintf("%s (0x%x) %s", class($op), $$op, $op->name);
a798dbf2 124}
125
b2590c4e 126sub walkoptree_slow {
a798dbf2 127 my($op, $method, $level) = @_;
128 $op_count++; # just for statistics
129 $level ||= 0;
130 warn(sprintf("walkoptree: %d. %s\n", $level, peekop($op))) if $debug;
156f89f0 131 $op->$method($level) if $op->can($method);
a798dbf2 132 if ($$op && ($op->flags & OPf_KIDS)) {
133 my $kid;
134 unshift(@parents, $op);
135 for ($kid = $op->first; $$kid; $kid = $kid->sibling) {
b2590c4e 136 walkoptree_slow($kid, $method, $level + 1);
a798dbf2 137 }
138 shift @parents;
139 }
156f89f0 140 if (class($op) eq 'PMOP'
141 && ref($op->pmreplroot)
142 && ${$op->pmreplroot}
143 && $op->pmreplroot->isa( 'B::OP' ))
144 {
0091380b 145 unshift(@parents, $op);
146 walkoptree_slow($op->pmreplroot, $method, $level + 1);
147 shift @parents;
148 }
a798dbf2 149}
150
151sub compile_stats {
152 return "Total number of OPs processed: $op_count\n";
153}
154
155sub timing_info {
156 my ($sec, $min, $hr) = localtime;
157 my ($user, $sys) = times;
158 sprintf("%02d:%02d:%02d user=$user sys=$sys",
159 $hr, $min, $sec, $user, $sys);
160}
161
162my %symtable;
2b8dc4d2 163
164sub clearsym {
165 %symtable = ();
166}
167
a798dbf2 168sub savesym {
169 my ($obj, $value) = @_;
170# warn(sprintf("savesym: sym_%x => %s\n", $$obj, $value)); # debug
171 $symtable{sprintf("sym_%x", $$obj)} = $value;
172}
173
174sub objsym {
175 my $obj = shift;
176 return $symtable{sprintf("sym_%x", $$obj)};
177}
178
179sub walkoptree_exec {
180 my ($op, $method, $level) = @_;
244826eb 181 $level ||= 0;
a798dbf2 182 my ($sym, $ppname);
183 my $prefix = " " x $level;
184 for (; $$op; $op = $op->next) {
185 $sym = objsym($op);
186 if (defined($sym)) {
187 print $prefix, "goto $sym\n";
188 return;
189 }
190 savesym($op, sprintf("%s (0x%lx)", class($op), $$op));
191 $op->$method($level);
3f872cb9 192 $ppname = $op->name;
1a67a97c 193 if ($ppname =~
62e36f8a 194 /^(d?or(assign)?|and(assign)?|mapwhile|grepwhile|entertry|range|cond_expr)$/)
1a67a97c 195 {
a798dbf2 196 print $prefix, uc($1), " => {\n";
197 walkoptree_exec($op->other, $method, $level + 1);
198 print $prefix, "}\n";
3f872cb9 199 } elsif ($ppname eq "match" || $ppname eq "subst") {
a798dbf2 200 my $pmreplstart = $op->pmreplstart;
201 if ($$pmreplstart) {
202 print $prefix, "PMREPLSTART => {\n";
203 walkoptree_exec($pmreplstart, $method, $level + 1);
204 print $prefix, "}\n";
205 }
3f872cb9 206 } elsif ($ppname eq "substcont") {
a798dbf2 207 print $prefix, "SUBSTCONT => {\n";
208 walkoptree_exec($op->other->pmreplstart, $method, $level + 1);
209 print $prefix, "}\n";
210 $op = $op->other;
3f872cb9 211 } elsif ($ppname eq "enterloop") {
a798dbf2 212 print $prefix, "REDO => {\n";
213 walkoptree_exec($op->redoop, $method, $level + 1);
214 print $prefix, "}\n", $prefix, "NEXT => {\n";
215 walkoptree_exec($op->nextop, $method, $level + 1);
216 print $prefix, "}\n", $prefix, "LAST => {\n";
217 walkoptree_exec($op->lastop, $method, $level + 1);
218 print $prefix, "}\n";
3f872cb9 219 } elsif ($ppname eq "subst") {
a798dbf2 220 my $replstart = $op->pmreplstart;
221 if ($$replstart) {
222 print $prefix, "SUBST => {\n";
223 walkoptree_exec($replstart, $method, $level + 1);
224 print $prefix, "}\n";
225 }
226 }
227 }
228}
229
230sub walksymtable {
231 my ($symref, $method, $recurse, $prefix) = @_;
232 my $sym;
0cc1d052 233 my $ref;
b6b0fb7b 234 my $fullname;
235 no strict 'refs';
0cc1d052 236 $prefix = '' unless defined $prefix;
237 while (($sym, $ref) = each %$symref) {
b6b0fb7b 238 $fullname = "*main::".$prefix.$sym;
a798dbf2 239 if ($sym =~ /::$/) {
240 $sym = $prefix . $sym;
b4e94495 241 if ($sym ne "main::" && $sym ne "<none>::" && &$recurse($sym)) {
b6b0fb7b 242 walksymtable(\%$fullname, $method, $recurse, $sym);
a798dbf2 243 }
244 } else {
b6b0fb7b 245 svref_2object(\*$fullname)->$method();
a798dbf2 246 }
247 }
248}
249
250{
251 package B::Section;
252 my $output_fh;
253 my %sections;
85cf7f2e 254
a798dbf2 255 sub new {
256 my ($class, $section, $symtable, $default) = @_;
257 $output_fh ||= FileHandle->new_tmpfile;
258 my $obj = bless [-1, $section, $symtable, $default], $class;
259 $sections{$section} = $obj;
260 return $obj;
261 }
85cf7f2e 262
a798dbf2 263 sub get {
264 my ($class, $section) = @_;
265 return $sections{$section};
266 }
267
268 sub add {
269 my $section = shift;
270 while (defined($_ = shift)) {
271 print $output_fh "$section->[1]\t$_\n";
272 $section->[0]++;
273 }
274 }
275
276 sub index {
277 my $section = shift;
278 return $section->[0];
279 }
280
281 sub name {
282 my $section = shift;
283 return $section->[1];
284 }
285
286 sub symtable {
287 my $section = shift;
288 return $section->[2];
289 }
85cf7f2e 290
a798dbf2 291 sub default {
292 my $section = shift;
293 return $section->[3];
294 }
85cf7f2e 295
a798dbf2 296 sub output {
297 my ($section, $fh, $format) = @_;
298 my $name = $section->name;
299 my $sym = $section->symtable || {};
300 my $default = $section->default;
301
302 seek($output_fh, 0, 0);
303 while (<$output_fh>) {
304 chomp;
305 s/^(.*?)\t//;
306 if ($1 eq $name) {
307 s{(s\\_[0-9a-f]+)} {
308 exists($sym->{$1}) ? $sym->{$1} : $default;
309 }ge;
310 printf $fh $format, $_;
311 }
312 }
313 }
314}
315
9426adcd 316XSLoader::load 'B';
a798dbf2 317
3181;
7f20e9dd 319
320__END__
321
322=head1 NAME
323
324B - The Perl Compiler
325
326=head1 SYNOPSIS
327
328 use B;
329
330=head1 DESCRIPTION
331
1a52ab62 332The C<B> module supplies classes which allow a Perl program to delve
333into its own innards. It is the module used to implement the
334"backends" of the Perl compiler. Usage of the compiler does not
335require knowledge of this module: see the F<O> module for the
336user-visible part. The C<B> module is of use to those who want to
337write new compiler backends. This documentation assumes that the
338reader knows a fair amount about perl's internals including such
339things as SVs, OPs and the internal symbol table and syntax tree
340of a program.
341
85cf7f2e 342=head1 OVERVIEW
343
344The C<B> module contains a set of utility functions for querying the
345current state of the Perl interpreter; typically these functions
346return objects from the B::SV and B::OP classes, or their derived
347classes. These classes in turn define methods for querying the
348resulting objects about their own internal state.
349
350=head1 Utility Functions
351
352The C<B> module exports a variety of functions: some are simple
353utility functions, others provide a Perl program with a way to
354get an initial "handle" on an internal object.
355
356=head2 Functions Returning C<B::SV>, C<B::AV>, C<B::HV>, and C<B::CV> objects
357
3d036c2b 358For descriptions of the class hierarchy of these objects and the
85cf7f2e 359methods that can be called on them, see below, L<"OVERVIEW OF
360CLASSES"> and L<"SV-RELATED CLASSES">.
361
362=over 4
363
364=item sv_undef
365
366Returns the SV object corresponding to the C variable C<sv_undef>.
367
368=item sv_yes
369
370Returns the SV object corresponding to the C variable C<sv_yes>.
371
372=item sv_no
373
374Returns the SV object corresponding to the C variable C<sv_no>.
375
376=item svref_2object(SVREF)
377
378Takes a reference to any Perl value, and turns the referred-to value
379into an object in the appropriate B::OP-derived or B::SV-derived
380class. Apart from functions such as C<main_root>, this is the primary
381way to get an initial "handle" on an internal perl data structure
382which can then be followed with the other access methods.
383
f31c3107 384The returned object will only be valid as long as the underlying OPs
385and SVs continue to exist. Do not attempt to use the object after the
386underlying structures are freed.
387
85cf7f2e 388=item amagic_generation
389
390Returns the SV object corresponding to the C variable C<amagic_generation>.
391
e13efe3c 392=item init_av
85cf7f2e 393
394Returns the AV object (i.e. in class B::AV) representing INIT blocks.
395
ece599bd 396=item check_av
397
398Returns the AV object (i.e. in class B::AV) representing CHECK blocks.
399
676456c2 400=item unitcheck_av
401
402Returns the AV object (i.e. in class B::AV) representing UNITCHECK blocks.
403
85cf7f2e 404=item begin_av
405
406Returns the AV object (i.e. in class B::AV) representing BEGIN blocks.
407
408=item end_av
409
410Returns the AV object (i.e. in class B::AV) representing END blocks.
411
412=item comppadlist
413
414Returns the AV object (i.e. in class B::AV) of the global comppadlist.
415
416=item regex_padav
417
418Only when perl was compiled with ithreads.
419
e13efe3c 420=item main_cv
85cf7f2e 421
422Return the (faked) CV corresponding to the main part of the Perl
423program.
424
425=back
426
427=head2 Functions for Examining the Symbol Table
428
429=over 4
430
431=item walksymtable(SYMREF, METHOD, RECURSE, PREFIX)
432
433Walk the symbol table starting at SYMREF and call METHOD on each
434symbol (a B::GV object) visited. When the walk reaches package
435symbols (such as "Foo::") it invokes RECURSE, passing in the symbol
436name, and only recurses into the package if that sub returns true.
437
438PREFIX is the name of the SYMREF you're walking.
439
440For example:
441
442 # Walk CGI's symbol table calling print_subs on each symbol.
443 # Recurse only into CGI::Util::
444 walksymtable(\%CGI::, 'print_subs', sub { $_[0] eq 'CGI::Util::' },
445 'CGI::');
446
447print_subs() is a B::GV method you have declared. Also see L<"B::GV
448Methods">, below.
449
450=back
451
452=head2 Functions Returning C<B::OP> objects or for walking op trees
453
3d036c2b 454For descriptions of the class hierarchy of these objects and the
85cf7f2e 455methods that can be called on them, see below, L<"OVERVIEW OF
456CLASSES"> and L<"OP-RELATED CLASSES">.
457
458=over 4
459
460=item main_root
461
462Returns the root op (i.e. an object in the appropriate B::OP-derived
463class) of the main part of the Perl program.
464
465=item main_start
466
467Returns the starting op of the main part of the Perl program.
468
469=item walkoptree(OP, METHOD)
470
471Does a tree-walk of the syntax tree based at OP and calls METHOD on
472each op it visits. Each node is visited before its children. If
473C<walkoptree_debug> (see below) has been called to turn debugging on then
474the method C<walkoptree_debug> is called on each op before METHOD is
475called.
476
477=item walkoptree_debug(DEBUG)
478
479Returns the current debugging flag for C<walkoptree>. If the optional
480DEBUG argument is non-zero, it sets the debugging flag to that. See
481the description of C<walkoptree> above for what the debugging flag
482does.
483
484=back
485
486=head2 Miscellaneous Utility Functions
487
488=over 4
489
490=item ppname(OPNUM)
491
492Return the PP function name (e.g. "pp_add") of op number OPNUM.
493
494=item hash(STR)
495
496Returns a string in the form "0x..." representing the value of the
497internal hash function used by perl on string STR.
498
499=item cast_I32(I)
500
501Casts I to the internal I32 type used by that perl.
502
503=item minus_c
504
505Does the equivalent of the C<-c> command-line option. Obviously, this
506is only useful in a BEGIN block or else the flag is set too late.
507
508=item cstring(STR)
509
510Returns a double-quote-surrounded escaped version of STR which can
511be used as a string in C source code.
512
513=item perlstring(STR)
514
515Returns a double-quote-surrounded escaped version of STR which can
516be used as a string in Perl source code.
517
518=item class(OBJ)
519
520Returns the class of an object without the part of the classname
521preceding the first C<"::">. This is used to turn C<"B::UNOP"> into
522C<"UNOP"> for example.
523
524=item threadsv_names
525
526In a perl compiled for threads, this returns a list of the special
527per-thread threadsv variables.
528
529=back
530
baccf54f 531=head2 Exported utility variabiles
532
533=over 4
534
535=item @optype
536
537 my $op_type = $optype[$op_type_num];
85cf7f2e 538
baccf54f 539A simple mapping of the op type number to its type (like 'COP' or 'BINOP').
540
541=item @specialsv_name
542
543 my $sv_name = $specialsv_name[$sv_index];
544
545Certain SV types are considered 'special'. They're represented by
546B::SPECIAL and are referred to by a number from the specialsv_list.
547This array maps that number back to the name of the SV (like 'Nullsv'
548or '&PL_sv_undef').
549
550=back
85cf7f2e 551
552
1a52ab62 553=head1 OVERVIEW OF CLASSES
554
555The C structures used by Perl's internals to hold SV and OP
556information (PVIV, AV, HV, ..., OP, SVOP, UNOP, ...) are modelled on a
557class hierarchy and the C<B> module gives access to them via a true
558object hierarchy. Structure fields which point to other objects
559(whether types of SV or types of OP) are represented by the C<B>
85cf7f2e 560module as Perl objects of the appropriate class.
561
562The bulk of the C<B> module is the methods for accessing fields of
563these structures.
564
565Note that all access is read-only. You cannot modify the internals by
f31c3107 566using this module. Also, note that the B::OP and B::SV objects created
567by this module are only valid for as long as the underlying objects
568exist; their creation doesn't increase the reference counts of the
569underlying objects. Trying to access the fields of a freed object will
570give incomprehensible results, or worse.
1a52ab62 571
572=head2 SV-RELATED CLASSES
573
6822775c 574B::IV, B::NV, B::RV, B::PV, B::PVIV, B::PVNV, B::PVMG, B::BM (5.9.5 and
575earlier), B::PVLV, B::AV, B::HV, B::CV, B::GV, B::FM, B::IO. These classes
576correspond in the obvious way to the underlying C structures of similar names.
577The inheritance hierarchy mimics the underlying C "inheritance". For 5.9.5
a01b8a53 578and later this is:
85cf7f2e 579
6822775c 580 B::SV
581 |
582 +------------+------------+------------+
583 | | | |
584 B::PV B::IV B::NV B::RV
585 \ / /
586 \ / /
587 B::PVIV /
b591c46e 588 \ /
589 \ /
590 \ /
591 B::PVNV
592 |
593 |
594 B::PVMG
595 |
6822775c 596 +-----+-----+-----+-----+
597 | | | | |
598 B::AV B::GV B::HV B::CV B::IO
599 | |
600 | |
601 B::PVLV B::FM
602
603
604For 5.9.0 and earlier, PVLV is a direct subclass of PVMG, and BM is still
605present as a distinct type, so the base of this diagram is
606
607
608 |
609 |
610 B::PVMG
611 |
612 +------+-----+-----+-----+-----+-----+
613 | | | | | | |
614 B::PVLV B::BM B::AV B::GV B::HV B::CV B::IO
615 |
616 |
617 B::FM
f5ba1307 618
619
85cf7f2e 620Access methods correspond to the underlying C macros for field access,
1a52ab62 621usually with the leading "class indication" prefix removed (Sv, Av,
622Hv, ...). The leading prefix is only left in cases where its removal
623would cause a clash in method name. For example, C<GvREFCNT> stays
624as-is since its abbreviation would clash with the "superclass" method
625C<REFCNT> (corresponding to the C function C<SvREFCNT>).
626
85cf7f2e 627=head2 B::SV Methods
1a52ab62 628
629=over 4
630
631=item REFCNT
632
633=item FLAGS
634
429a5ce7 635=item object_2svref
636
637Returns a reference to the regular scalar corresponding to this
638B::SV object. In other words, this method is the inverse operation
639to the svref_2object() subroutine. This scalar and other data it points
640at should be considered read-only: modifying them is neither safe nor
641guaranteed to have a sensible effect.
642
1a52ab62 643=back
644
85cf7f2e 645=head2 B::IV Methods
1a52ab62 646
647=over 4
648
649=item IV
650
d9963e60 651Returns the value of the IV, I<interpreted as
652a signed integer>. This will be misleading
653if C<FLAGS & SVf_IVisUV>. Perhaps you want the
654C<int_value> method instead?
655
1a52ab62 656=item IVX
657
d9963e60 658=item UVX
659
660=item int_value
661
662This method returns the value of the IV as an integer.
663It differs from C<IV> in that it returns the correct
664value regardless of whether it's stored signed or
665unsigned.
666
1a52ab62 667=item needs64bits
668
669=item packiv
670
671=back
672
85cf7f2e 673=head2 B::NV Methods
1a52ab62 674
675=over 4
676
677=item NV
678
679=item NVX
680
681=back
682
85cf7f2e 683=head2 B::RV Methods
1a52ab62 684
685=over 4
686
687=item RV
688
689=back
690
85cf7f2e 691=head2 B::PV Methods
1a52ab62 692
693=over 4
694
695=item PV
696
76ef7183 697This method is the one you usually want. It constructs a
698string using the length and offset information in the struct:
699for ordinary scalars it will return the string that you'd see
700from Perl, even if it contains null characters.
701
9d2bbe64 702=item RV
703
704Same as B::RV::RV, except that it will die() if the PV isn't
705a reference.
706
0b40bd6d 707=item PVX
708
76ef7183 709This method is less often useful. It assumes that the string
710stored in the struct is null-terminated, and disregards the
711length information.
712
713It is the appropriate method to use if you need to get the name
714of a lexical variable from a padname array. Lexical variable names
715are always stored with a null terminator, and the length field
716(SvCUR) is overloaded for other purposes and can't be relied on here.
717
1a52ab62 718=back
719
85cf7f2e 720=head2 B::PVMG Methods
1a52ab62 721
722=over 4
723
724=item MAGIC
725
726=item SvSTASH
727
728=back
729
85cf7f2e 730=head2 B::MAGIC Methods
1a52ab62 731
732=over 4
733
734=item MOREMAGIC
735
9d2bbe64 736=item precomp
737
738Only valid on r-magic, returns the string that generated the regexp.
739
1a52ab62 740=item PRIVATE
741
742=item TYPE
743
744=item FLAGS
745
746=item OBJ
747
9d2bbe64 748Will die() if called on r-magic.
749
1a52ab62 750=item PTR
751
9d2bbe64 752=item REGEX
753
754Only valid on r-magic, returns the integer value of the REGEX stored
755in the MAGIC.
756
1a52ab62 757=back
758
85cf7f2e 759=head2 B::PVLV Methods
1a52ab62 760
761=over 4
762
763=item TARGOFF
764
765=item TARGLEN
766
767=item TYPE
768
769=item TARG
770
771=back
772
85cf7f2e 773=head2 B::BM Methods
1a52ab62 774
775=over 4
776
777=item USEFUL
778
779=item PREVIOUS
780
781=item RARE
782
783=item TABLE
784
785=back
786
85cf7f2e 787=head2 B::GV Methods
1a52ab62 788
789=over 4
790
87d7fd28 791=item is_empty
792
793This method returns TRUE if the GP field of the GV is NULL.
794
1a52ab62 795=item NAME
796
002b978b 797=item SAFENAME
798
799This method returns the name of the glob, but if the first
800character of the name is a control character, then it converts
801it to ^X first, so that *^G would return "^G" rather than "\cG".
802
803It's useful if you want to print out the name of a variable.
804If you restrict yourself to globs which exist at compile-time
805then the result ought to be unambiguous, because code like
806C<${"^G"} = 1> is compiled as two ops - a constant string and
807a dereference (rv2gv) - so that the glob is created at runtime.
808
809If you're working with globs at runtime, and need to disambiguate
810*^G from *{"^G"}, then you should use the raw NAME method.
811
1a52ab62 812=item STASH
813
814=item SV
815
816=item IO
817
818=item FORM
819
820=item AV
821
822=item HV
823
824=item EGV
825
826=item CV
827
828=item CVGEN
829
830=item LINE
831
b195d487 832=item FILE
833
1a52ab62 834=item FILEGV
835
836=item GvREFCNT
837
838=item FLAGS
839
840=back
841
85cf7f2e 842=head2 B::IO Methods
1a52ab62 843
844=over 4
845
846=item LINES
847
848=item PAGE
849
850=item PAGE_LEN
851
852=item LINES_LEFT
853
854=item TOP_NAME
855
856=item TOP_GV
857
858=item FMT_NAME
859
860=item FMT_GV
861
862=item BOTTOM_NAME
863
864=item BOTTOM_GV
865
866=item SUBPROCESS
867
868=item IoTYPE
869
870=item IoFLAGS
871
9d2bbe64 872=item IsSTD
873
874Takes one arguments ( 'stdin' | 'stdout' | 'stderr' ) and returns true
875if the IoIFP of the object is equal to the handle whose name was
876passed as argument ( i.e. $io->IsSTD('stderr') is true if
877IoIFP($io) == PerlIO_stdin() ).
878
1a52ab62 879=back
880
85cf7f2e 881=head2 B::AV Methods
1a52ab62 882
883=over 4
884
885=item FILL
886
887=item MAX
888
1a52ab62 889=item ARRAY
890
429a5ce7 891=item ARRAYelt
892
893Like C<ARRAY>, but takes an index as an argument to get only one element,
894rather than a list of all of them.
895
edcc7c74 896=item OFF
897
898This method is deprecated if running under Perl 5.8, and is no longer present
899if running under Perl 5.9
900
901=item AvFLAGS
902
903This method returns the AV specific flags. In Perl 5.9 these are now stored
904in with the main SV flags, so this method is no longer present.
905
1a52ab62 906=back
907
85cf7f2e 908=head2 B::CV Methods
1a52ab62 909
910=over 4
911
912=item STASH
913
914=item START
915
916=item ROOT
917
918=item GV
919
57843af0 920=item FILE
921
1a52ab62 922=item DEPTH
923
924=item PADLIST
925
926=item OUTSIDE
927
a3985cdc 928=item OUTSIDE_SEQ
929
1a52ab62 930=item XSUB
931
932=item XSUBANY
933
9d2bbe64 934For constant subroutines, returns the constant SV returned by the subroutine.
935
5cfd8ad4 936=item CvFLAGS
937
de3f1649 938=item const_sv
939
1a52ab62 940=back
941
85cf7f2e 942=head2 B::HV Methods
1a52ab62 943
944=over 4
945
946=item FILL
947
948=item MAX
949
950=item KEYS
951
952=item RITER
953
954=item NAME
955
1a52ab62 956=item ARRAY
957
edcc7c74 958=item PMROOT
959
960This method is not present if running under Perl 5.9, as the PMROOT
961information is no longer stored directly in the hash.
962
1a52ab62 963=back
964
965=head2 OP-RELATED CLASSES
966
85cf7f2e 967C<B::OP>, C<B::UNOP>, C<B::BINOP>, C<B::LOGOP>, C<B::LISTOP>, C<B::PMOP>,
651aa52e 968C<B::SVOP>, C<B::PADOP>, C<B::PVOP>, C<B::LOOP>, C<B::COP>.
85cf7f2e 969
970These classes correspond in the obvious way to the underlying C
971structures of similar names. The inheritance hierarchy mimics the
972underlying C "inheritance":
973
974 B::OP
975 |
5ce57cc0 976 +---------------+--------+--------+-------+
977 | | | | |
978 B::UNOP B::SVOP B::PADOP B::COP B::PVOP
85cf7f2e 979 ,' `-.
980 / `--.
981 B::BINOP B::LOGOP
982 |
983 |
984 B::LISTOP
985 ,' `.
986 / \
987 B::LOOP B::PMOP
988
989Access methods correspond to the underlying C structre field names,
990with the leading "class indication" prefix (C<"op_">) removed.
991
992=head2 B::OP Methods
1a52ab62 993
a60ba18b 994These methods get the values of similarly named fields within the OP
995data structure. See top of C<op.h> for more info.
996
1a52ab62 997=over 4
998
999=item next
1000
1001=item sibling
1002
3f872cb9 1003=item name
1004
1005This returns the op name as a string (e.g. "add", "rv2av").
1006
1a52ab62 1007=item ppaddr
1008
dc333d64 1009This returns the function name as a string (e.g. "PL_ppaddr[OP_ADD]",
1010"PL_ppaddr[OP_RV2AV]").
1a52ab62 1011
1012=item desc
1013
4369b173 1014This returns the op description from the global C PL_op_desc array
1a52ab62 1015(e.g. "addition" "array deref").
1016
1017=item targ
1018
1019=item type
1020
a60ba18b 1021=item opt
1022
1a52ab62 1023=item flags
1024
1025=item private
1026
a60ba18b 1027=item spare
1028
1a52ab62 1029=back
1030
1031=head2 B::UNOP METHOD
1032
1033=over 4
1034
1035=item first
1036
1037=back
1038
1039=head2 B::BINOP METHOD
1040
1041=over 4
1042
1043=item last
1044
1045=back
1046
1047=head2 B::LOGOP METHOD
1048
1049=over 4
1050
1051=item other
1052
1053=back
1054
1a52ab62 1055=head2 B::LISTOP METHOD
1056
1057=over 4
1058
1059=item children
1060
1061=back
1062
85cf7f2e 1063=head2 B::PMOP Methods
1a52ab62 1064
1065=over 4
1066
1067=item pmreplroot
1068
1069=item pmreplstart
1070
1071=item pmnext
1072
1073=item pmregexp
1074
1075=item pmflags
1076
c737faaf 1077=item extflags
1a52ab62 1078
1079=item precomp
1080
651aa52e 1081=item pmoffset
9d2bbe64 1082
1083Only when perl was compiled with ithreads.
1084
1a52ab62 1085=back
1086
1087=head2 B::SVOP METHOD
1088
1089=over 4
1090
1091=item sv
1092
065a1863 1093=item gv
1094
1a52ab62 1095=back
1096
7934575e 1097=head2 B::PADOP METHOD
1a52ab62 1098
1099=over 4
1100
7934575e 1101=item padix
1a52ab62 1102
1103=back
1104
1105=head2 B::PVOP METHOD
1106
1107=over 4
1108
1109=item pv
1110
1111=back
1112
85cf7f2e 1113=head2 B::LOOP Methods
1a52ab62 1114
1115=over 4
1116
1117=item redoop
1118
1119=item nextop
1120
1121=item lastop
1122
1123=back
1124
85cf7f2e 1125=head2 B::COP Methods
1a52ab62 1126
1127=over 4
1128
1129=item label
1130
1131=item stash
1132
6e6a1aef 1133=item stashpv
1134
57843af0 1135=item file
1a52ab62 1136
1137=item cop_seq
1138
1139=item arybase
1140
1141=item line
1142
6e6a1aef 1143=item warnings
1144
1145=item io
1146
d5ec2987 1147=item hints
1148
b47e7f93 1149=item hints_hash
1150
1a52ab62 1151=back
1152
7f20e9dd 1153
1154=head1 AUTHOR
1155
1156Malcolm Beattie, C<mbeattie@sable.ox.ac.uk>
1157
1158=cut