/usr/share/perl5/Aspect/Pointcut/Cflow.pm is in libaspect-perl 1.04-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | package Aspect::Pointcut::Cflow;
use strict;
use Carp ();
use Params::Util ();
use Aspect::Pointcut ();
use Aspect::Pointcut::Call ();
use Aspect::Point::Static ();
our $VERSION = '1.04';
our @ISA = 'Aspect::Pointcut';
use constant KEY => 0;
use constant SPEC => 2;
######################################################################
# Constructor Methods
sub new {
my $class = shift;
# Check and default the cflow key
my $key = @_ > 1 ? shift : 'enclosing';
unless ( Params::Util::_IDENTIFIER($key) ) {
Carp::croak('Invalid runtime context key');
}
# Generate it via call
my $call = Aspect::Pointcut::Call->new(shift);
return bless [ $key, @$call ], $class;
}
######################################################################
# Weaving Methods
# The cflow pointcut is currently of no value at weave time, because it is
# actually implemented as something closer to cflowbelow.
sub curry_weave {
return;
}
# The cflow pointcuts do not curry at all.
# So they don't need to clone, and can be used directly.
sub curry_runtime {
return $_[0];
}
######################################################################
# Runtime Methods
sub compile_runtime {
my $self = shift;
return sub {
my $level = 2;
my $caller = undef;
while ( my $cc = caller_info($level++) ) {
next unless $self->[SPEC]->( $cc->{sub_name} );
$caller = $cc;
last;
}
return 0 unless $caller;
my $static = bless {
sub_name => $caller->{sub_name},
pointcut => $Aspect::POINT->{pointcut},
args => $caller->{args},
}, 'Aspect::Point::Static';
$Aspect::POINT->{$self->[KEY]} = $static;
return 1;
};
}
sub caller_info {
my $level = shift;
package DB;
my %call_info;
@call_info{ qw(
calling_package
sub_name
has_params
) } = (CORE::caller($level))[0, 3, 4];
return defined $call_info{calling_package}
? {
%call_info,
args => [
$call_info{has_params} ? @DB::args : ()
],
} : 0;
}
1;
__END__
=pod
=head1 NAME
Aspect::Pointcut::Cflow - Cflow pointcut
=head1 SYNOPSIS
Aspect::Pointcut::Cflow->new;
=head1 DESCRIPTION
None yet.
=head1 AUTHORS
Adam Kennedy E<lt>adamk@cpan.orgE<gt>
Marcel GrE<uuml>nauer E<lt>marcel@cpan.orgE<gt>
Ran Eilam E<lt>eilara@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright 2001 by Marcel GrE<uuml>nauer
Some parts copyright 2009 - 2013 Adam Kennedy.
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut
|