3 use B qw(peekop class ad walkoptree walkoptree_exec
4 main_start main_root cstring sv_undef);
5 use B::Asmdata qw(@specialsv_name);
9 printf <<'EOT', class($op), ad($op), ad($op->next), ad($op->sibling), $op->ppaddr, $op->targ, $op->type, $op->seq, $op->flags, $op->private;
25 printf "\top_first\t0x%x\n", ad($op->first);
30 $op->B::UNOP::debug();
31 printf "\top_last\t\t0x%x\n", ad($op->last);
36 $op->B::UNOP::debug();
37 printf "\top_other\t0x%x\n", ad($op->other);
40 sub B::CONDOP::debug {
42 $op->B::UNOP::debug();
43 printf "\top_true\t0x%x\n", ad($op->true);
44 printf "\top_false\t0x%x\n", ad($op->false);
47 sub B::LISTOP::debug {
49 $op->B::BINOP::debug();
50 printf "\top_children\t%d\n", $op->children;
55 $op->B::LISTOP::debug();
56 printf "\top_pmreplroot\t0x%x\n", ad($op->pmreplroot);
57 printf "\top_pmreplstart\t0x%x\n", ad($op->pmreplstart);
58 printf "\top_pmnext\t0x%x\n", ad($op->pmnext);
59 printf "\top_pmregexp->precomp\t%s\n", cstring($op->precomp);
60 printf "\top_pmshort\t0x%x\n", ad($op->pmshort);
61 printf "\top_pmflags\t0x%x\n", $op->pmflags;
62 printf "\top_pmslen\t%d\n", $op->pmslen;
64 $op->pmreplroot->debug;
70 my ($filegv) = $op->filegv;
71 printf <<'EOT', $op->label, ad($op->stash), ad($filegv), $op->seq, $op->arybase, $op->line;
85 printf "\top_sv\t\t0x%x\n", ad($op->sv);
92 printf "\top_pv\t\t0x%x\n", $op->pv;
98 printf "\top_gv\t\t0x%x\n", ad($op->gv);
104 printf "\top_cv\t\t0x%x\n", ad($op->cv);
109 if (ad($sv) == ad(sv_undef())) {
112 printf "NULL (0x%x)\n", ad($sv);
119 print class($sv), " = NULL\n";
122 printf <<'EOT', class($sv), ad($sv), $sv->REFCNT, $sv->FLAGS;
133 printf <<'EOT', cstring($pv), length($pv);
142 printf "\txiv_iv\t\t%d\n", $sv->IV;
148 printf "\txnv_nv\t\t%s\n", $sv->NV;
154 printf "\txiv_iv\t\t%d\n", $sv->IV;
159 $sv->B::PVIV::debug();
160 printf "\txnv_nv\t\t%s\n", $sv->NV;
165 $sv->B::PVNV::debug();
166 printf "\txlv_targoff\t%d\n", $sv->TARGOFF;
167 printf "\txlv_targlen\t%u\n", $sv->TARGLEN;
168 printf "\txlv_type\t%s\n", cstring(chr($sv->TYPE));
173 $sv->B::PVNV::debug();
174 printf "\txbm_useful\t%d\n", $sv->USEFUL;
175 printf "\txbm_previous\t%u\n", $sv->PREVIOUS;
176 printf "\txbm_rare\t%s\n", cstring(chr($sv->RARE));
181 $sv->B::PVNV::debug();
182 my ($stash) = $sv->STASH;
183 my ($start) = $sv->START;
184 my ($root) = $sv->ROOT;
185 my ($padlist) = $sv->PADLIST;
187 my ($filegv) = $sv->FILEGV;
188 printf <<'EOT', ad($stash), ad($start), ad($root), ad($gv), ad($filegv), $sv->DEPTH, $padlist, ad($sv->OUTSIDE);
198 $start->debug if $start;
199 $root->debug if $root;
201 $filegv->debug if $filegv;
202 $padlist->debug if $padlist;
208 my(@array) = $av->ARRAY;
209 print "\tARRAY\t\t(", join(", ", map("0x" . ad($_), @array)), ")\n";
210 printf <<'EOT', scalar(@array), $av->MAX, $av->OFF, $av->AvFLAGS;
224 printf <<'EOT', $gv->NAME, $gv->STASH, ad($sv), $gv->GvREFCNT, $gv->FORM, ad($av), ad($gv->HV), ad($gv->EGV), ad($cv), $gv->CVGEN, $gv->LINE, $gv->FILEGV, $gv->GvFLAGS;
244 sub B::SPECIAL::debug {
246 print $specialsv_name[$$sv], "\n";
251 if ($order eq "exec") {
252 return sub { walkoptree_exec(main_start, "debug") }
254 return sub { walkoptree(main_root, "debug") }