X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2Fsubs%2Fauto.pm;h=928ea7e51bf8401b9f4648e9629d7ed27c88eac5;hb=c6f479c1cfb222821a7770155ee3fd18f44e0992;hp=9334561798fb34558c85afe1d6c348cfb1c5b820;hpb=1eb337eeed082df75aee942bde1854ca61d4f011;p=perl%2Fmodules%2Fsubs-auto.git diff --git a/lib/subs/auto.pm b/lib/subs/auto.pm index 9334561..928ea7e 100644 --- a/lib/subs/auto.pm +++ b/lib/subs/auto.pm @@ -63,7 +63,7 @@ use B; use B::Keywords; -use Variable::Magic qw/wizard cast dispell getdata/; +use Variable::Magic 0.31 qw/wizard cast dispell getdata/; BEGIN { unless (Variable::Magic::VMG_UVAR) { @@ -108,15 +108,23 @@ sub _reset { sub _fetch { (undef, my $data, my $func) = @_; - return if $data->{guard} or $func =~ /::/ or exists $core{$func}; + return if $data->{guard}; local $data->{guard} = 1; + return if $func =~ /::/ + or exists $core{$func}; + + my $op_name = $_[-1] || ''; + return if $op_name =~ /method/; + + my $pkg = $data->{pkg}; + my $hints = (caller 0)[10]; if ($hints and $hints->{+(__PACKAGE__)}) { my $pm = $func . '.pm'; return if exists $INC{$pm}; - my $fqn = $data->{pkg} . '::' . $func; + my $fqn = $pkg . '::' . $func; my $cb = do { no strict 'refs'; *$fqn{CODE} }; if ($cb) { if (_REFCNT_PLACEHOLDERS and defined(my $data = getdata(&$cb, $tag))) { @@ -136,7 +144,7 @@ sub _fetch { no strict 'refs'; *$fqn = $cb; } else { - _reset($data->{pkg}, $func); + _reset($pkg, $func); } return; @@ -153,9 +161,10 @@ sub _store { return; } -my $wiz = wizard data => sub { +{ pkg => $_[1], guard => 0 } }, - fetch => \&_fetch, - store => \&_store; +my $wiz = wizard data => sub { +{ pkg => $_[1], guard => 0 } }, + fetch => \&_fetch, + store => \&_store, + op_info => Variable::Magic::VMG_OP_INFO_NAME; my %pkgs;