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