1
1
package B::Xref ;
2
2
3
- our $VERSION = ' 1.05 ' ;
3
+ our $VERSION = ' 1.07_02 ' ;
4
4
5
5
=head1 NAME
6
6
@@ -76,7 +76,7 @@ A line number may be prefixed by a single letter:
76
76
77
77
=item i
78
78
79
- Lexical variable introduced (declared with my() ) for the first time.
79
+ Lexical variable introduced (declared with my,our,state ) for the first time.
80
80
81
81
=item &
82
82
@@ -136,14 +136,14 @@ reported properly.
136
136
137
137
=head1 AUTHOR
138
138
139
- Malcolm Beattie, [email protected] .
139
+ Malcolm Beattie C< retired > .
140
140
141
141
=cut
142
142
143
143
use strict;
144
144
use Config;
145
- use B qw( peekop class comppadlist main_start svref_2object walksymtable
146
- OPpLVAL_INTRO SVf_POK OPpOUR_INTRO cstring
145
+ use B qw( peekop comppadlist main_start svref_2object walksymtable
146
+ OPpLVAL_INTRO SVf_POK SVf_ROK OPpOUR_INTRO cstring
147
147
) ;
148
148
149
149
sub UNKNOWN { [" ?" , " ?" , " ?" ] }
@@ -192,12 +192,12 @@ sub load_pad {
192
192
my $padlist = shift ;
193
193
my ($namelistav , $vallistav , @namelist , $ix );
194
194
@pad = ();
195
- return if class($padlist ) =~ ' ^(?:SPECIAL|NULL)\z' ;
195
+ return if B:: class($padlist ) =~ ' ^(?:SPECIAL|NULL)\z' ;
196
196
($namelistav ,$vallistav ) = $padlist -> ARRAY;
197
197
@namelist = $namelistav -> ARRAY;
198
198
for ($ix = 1; $ix < @namelist ; $ix ++) {
199
199
my $namesv = $namelist [$ix ];
200
- next if class($namesv ) eq " SPECIAL" ;
200
+ next if B:: class($namesv ) eq " SPECIAL" ;
201
201
my ($type , $name ) = $namesv -> PV =~ / ^(.)([^\0 ]*)(\0 .*)?$ / ;
202
202
$pad [$ix ] = [" (lexical)" , $type || ' ?' , $name || ' ?' ];
203
203
}
@@ -206,8 +206,8 @@ sub load_pad {
206
206
@vallist = $vallistav -> ARRAY;
207
207
for ($ix = 1; $ix < @vallist ; $ix ++) {
208
208
my $valsv = $vallist [$ix ];
209
- next unless class($valsv ) eq " GV" ;
210
- next if class($valsv -> STASH) eq ' SPECIAL' ;
209
+ next unless B:: class($valsv ) eq " GV" ;
210
+ next if B:: class($valsv -> STASH) eq ' SPECIAL' ;
211
211
# these pad GVs don't have corresponding names, so same @pad
212
212
# array can be used without collisions
213
213
$pad [$ix ] = [$valsv -> STASH-> NAME, " *" , $valsv -> NAME];
@@ -331,7 +331,13 @@ sub pp_gv {
331
331
}
332
332
else {
333
333
$gv = $op -> gv;
334
- $top = [$gv -> STASH-> NAME, " *" , $gv -> SAFENAME];
334
+ if ($gv -> FLAGS & SVf_ROK) { # sub ref
335
+ my $cv = $gv -> RV;
336
+ $top = [$cv -> STASH-> NAME, ' *' , B::safename($cv -> NAME_HEK)]
337
+ }
338
+ else {
339
+ $top = [$gv -> STASH-> NAME, ' *' , $gv -> SAFENAME];
340
+ }
335
341
}
336
342
process($top , $op -> private & OPpLVAL_INTRO ? " intro" : " used" );
337
343
}
@@ -342,7 +348,7 @@ sub pp_const {
342
348
# constant could be in the pad (under useithreads)
343
349
if ($$sv ) {
344
350
$top = [" ?" , " " ,
345
- (class($sv ) ne " SPECIAL" && $sv -> FLAGS & SVf_POK)
351
+ (B:: class($sv ) ne " SPECIAL" && $sv -> FLAGS & SVf_POK)
346
352
? cstring($sv -> PV) : " ?" ];
347
353
}
348
354
else {
@@ -373,7 +379,7 @@ sub pp_entersub {
373
379
sub B ::GV::xref {
374
380
my $gv = shift ;
375
381
my $cv = $gv -> CV;
376
- if ($$cv ) {
382
+ if ($$cv and ref $cv eq ' B::CV ' ) {
377
383
# return if $done{$$cv}++;
378
384
$file = $gv -> FILE;
379
385
$line = $gv -> LINE;
@@ -449,7 +455,7 @@ sub compile {
449
455
last OPTION;
450
456
} elsif ($opt eq " o" ) {
451
457
$arg ||= shift @options ;
452
- open (STDOUT , " > $arg " ) or return " $arg : $! \n " ;
458
+ open (STDOUT , ' > ' , $arg ) or return " $arg : $! \n " ;
453
459
} elsif ($opt eq " d" ) {
454
460
$nodefs = 1;
455
461
} elsif ($opt eq " r" ) {
0 commit comments