r49358 - in /trunk/libaspect-perl: ./ debian/ lib/ lib/Aspect/ lib/Aspect/Advice/ lib/Aspect/Hook/ lib/Aspect/Library/ lib/Aspect/Pointcut/ t/ t/lib/Aspect/tests/ t/lib/Test/ t/lib/Test/Builder/ t/lib/Test/Class/

jawnsy-guest at users.alioth.debian.org jawnsy-guest at users.alioth.debian.org
Fri Dec 25 14:24:00 UTC 2009


Author: jawnsy-guest
Date: Fri Dec 25 14:23:55 2009
New Revision: 49358

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=49358
Log:
* New upstream release
* Now needs Test::NoWarnings for build

Added:
    trunk/libaspect-perl/lib/Aspect/Advice/
      - copied from r49354, branches/upstream/libaspect-perl/current/lib/Aspect/Advice/
    trunk/libaspect-perl/t/03_context.t
      - copied unchanged from r49354, branches/upstream/libaspect-perl/current/t/03_context.t
Removed:
    trunk/libaspect-perl/lib/Aspect/Weaver.pm
    trunk/libaspect-perl/t/lib/Aspect/tests/Weaver.pm
Modified:
    trunk/libaspect-perl/Changes
    trunk/libaspect-perl/MANIFEST
    trunk/libaspect-perl/META.yml
    trunk/libaspect-perl/Makefile.PL
    trunk/libaspect-perl/debian/changelog
    trunk/libaspect-perl/debian/control
    trunk/libaspect-perl/lib/Aspect.pm
    trunk/libaspect-perl/lib/Aspect/Advice.pm
    trunk/libaspect-perl/lib/Aspect/AdviceContext.pm
    trunk/libaspect-perl/lib/Aspect/Hook/LexWrap.pm
    trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm
    trunk/libaspect-perl/lib/Aspect/Library/Memoize.pm
    trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm
    trunk/libaspect-perl/lib/Aspect/Library/TestClass.pm
    trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm
    trunk/libaspect-perl/lib/Aspect/Modular.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/AndOp.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/BinOp.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/NotOp.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/OrOp.pm
    trunk/libaspect-perl/t/01_all.t
    trunk/libaspect-perl/t/02_caller.t
    trunk/libaspect-perl/t/lib/Test/Builder/Tester.pm
    trunk/libaspect-perl/t/lib/Test/Class.pm
    trunk/libaspect-perl/t/lib/Test/Class/MethodInfo.pm
    trunk/libaspect-perl/t/lib/Test/Exception.pm

Modified: trunk/libaspect-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/Changes?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/Changes (original)
+++ trunk/libaspect-perl/Changes Fri Dec 25 14:23:55 2009
@@ -1,4 +1,15 @@
 Revision history for Perl extension Aspect
+
+0.23 Thu 24 Dec 2009
+     - Removed the concept of a standalone Aspect::Weaver class
+     - Each Aspect::Advice:: subclass now does most of the setup for the weaving
+       individually, with similar but slightly different implementations.
+       This adds some duplication of code, but removes a lot of architectural
+       complexity. It should make the creation of new types of Advice simpler.
+     - Corrected the versions of the test libs (which went out of sync)
+     - The Hook::LexWrap wrap function is now split into Advice-specific hooks
+       before and after, duplicating some code but making each type simpler and
+       faster.
 
 0.22 Mon 21 Dec 2009
      - Part one of an upcoming series of major upgrades

Modified: trunk/libaspect-perl/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/MANIFEST?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/MANIFEST (original)
+++ trunk/libaspect-perl/MANIFEST Fri Dec 25 14:23:55 2009
@@ -19,6 +19,8 @@
 inc/Module/Install/WriteAll.pm
 lib/Aspect.pm
 lib/Aspect/Advice.pm
+lib/Aspect/Advice/After.pm
+lib/Aspect/Advice/Before.pm
 lib/Aspect/AdviceContext.pm
 lib/Aspect/Hook/LexWrap.pm
 lib/Aspect/Library/Listenable.pm
@@ -34,7 +36,6 @@
 lib/Aspect/Pointcut/Cflow.pm
 lib/Aspect/Pointcut/NotOp.pm
 lib/Aspect/Pointcut/OrOp.pm
-lib/Aspect/Weaver.pm
 LICENSE
 Makefile.PL
 MANIFEST			This list of files
@@ -42,6 +43,7 @@
 README
 t/01_all.t
 t/02_caller.t
+t/03_context.t
 t/97_meta.t
 t/98_pod.t
 t/99_pmv.t
@@ -59,7 +61,6 @@
 t/lib/Aspect/Pointcut/tests/Cflow.pm
 t/lib/Aspect/tests/Advice.pm
 t/lib/Aspect/tests/AdviceContext.pm
-t/lib/Aspect/tests/Weaver.pm
 t/lib/Test/Builder/Tester.pm
 t/lib/Test/Builder/Tester/Color.pm
 t/lib/Test/Class.pm

Modified: trunk/libaspect-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/META.yml?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/META.yml (original)
+++ trunk/libaspect-perl/META.yml Fri Dec 25 14:23:55 2009
@@ -6,6 +6,7 @@
   ExtUtils::MakeMaker: 6.42
   Test::Class: 0.28
   Test::More: 0.70
+  Test::NoWarnings: 0.084
 configure_requires:
   ExtUtils::MakeMaker: 6.42
 distribution_type: module
@@ -30,4 +31,4 @@
   ChangeLog: http://fisheye2.atlassian.com/changelog/cpan/trunk/Aspect
   license: http://dev.perl.org/licenses/
   repository: http://svn.ali.as/cpan/trunk/Aspect
-version: 0.22
+version: 0.23

Modified: trunk/libaspect-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/Makefile.PL?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/Makefile.PL (original)
+++ trunk/libaspect-perl/Makefile.PL Fri Dec 25 14:23:55 2009
@@ -1,7 +1,8 @@
 use inc::Module::Install::DSL 0.91;
 
 all_from      lib/Aspect.pm
-requires      Devel::Symdump 2.04
-requires      Sub::Uplevel   0.2002
-test_requires Test::Class    0.28
-test_requires Test::More     0.70
+requires      Devel::Symdump   2.04
+requires      Sub::Uplevel     0.2002
+test_requires Test::More       0.70
+test_requires Test::Class      0.28
+test_requires Test::NoWarnings 0.084

Modified: trunk/libaspect-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/debian/changelog?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/debian/changelog (original)
+++ trunk/libaspect-perl/debian/changelog Fri Dec 25 14:23:55 2009
@@ -1,3 +1,10 @@
+libaspect-perl (0.23-1) UNRELEASED; urgency=low
+
+  * New upstream release
+  * Now needs Test::NoWarnings for build
+
+ -- Jonathan Yu <jawnsy at cpan.org>  Fri, 25 Dec 2009 06:13:26 -0500
+
 libaspect-perl (0.22-1) unstable; urgency=low
 
   * New upstream release

Modified: trunk/libaspect-perl/debian/control
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/debian/control?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/debian/control (original)
+++ trunk/libaspect-perl/debian/control Fri Dec 25 14:23:55 2009
@@ -6,7 +6,7 @@
  perl (>= 5.10.1) | libpod-simple-perl (>= 3.07), libtest-cpan-meta-perl,
  libtest-pod-perl (>= 1.26), libtest-class-perl (>= 0.28),
  libperl-minimumversion-perl, libtest-minimumversion-perl,
- libsub-uplevel-perl (>= 0.2002)
+ libsub-uplevel-perl (>= 0.2002), libtest-nowarnings-perl (>= 0.084)
 Maintainer: Debian Perl Group <pkg-perl-maintainers at lists.alioth.debian.org>
 Uploaders: Jonathan Yu <jawnsy at cpan.org>,
  gregor herrmann <gregoa at debian.org>, Ryan Niebur <ryan at debian.org>

Modified: trunk/libaspect-perl/lib/Aspect.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect.pm (original)
+++ trunk/libaspect-perl/lib/Aspect.pm Fri Dec 25 14:23:55 2009
@@ -9,7 +9,7 @@
 use Aspect::Pointcut::Call  ();
 use Aspect::Pointcut::Cflow ();
 
-our $VERSION = '0.22';
+our $VERSION = '0.23';
 our @ISA     = 'Exporter';
 our @EXPORT  = qw{ aspect before after call cflow };
 

Modified: trunk/libaspect-perl/lib/Aspect/Advice.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice.pm Fri Dec 25 14:23:55 2009
@@ -3,20 +3,19 @@
 use strict;
 use warnings;
 use Carp;
-use Aspect::AdviceContext;
-use Aspect::Weaver;
+use Aspect::AdviceContext  ();
+use Aspect::Advice::After  ();
+use Aspect::Advice::Before ();
 
-our $VERSION = '0.22';
+our $VERSION = '0.23';
 
 sub new {
-	my ($class, $type, $code, $pointcut) = @_;
-	my $self = bless {
-		weaver   => Aspect::Weaver->new, # a weaver that will install advice code
-		hooks    => undef,               # list of Hook::LexWrap hooks
-		type     => $type,               # before or after
-		code     => $code,               # the advice code
-		pointcut => $pointcut,           # the advice pointcut
-	}, $class;
+	my $class = "Aspect::Advice::" . ucfirst($_[1]); # Yes, a bit hacky
+	my $self  = $class->new(
+		hooks    => undef, # List of symbol table hooks
+		code     => $_[2], # the advice code
+		pointcut => $_[3], # the advice pointcut
+	);
 	$self->install;
 	return $self;
 }
@@ -24,72 +23,15 @@
 # private ---------------------------------------------------------------------
 
 sub install {
-	my $self     = shift;
-	my $weaver   = $self->weaver;
-	my $type     = $self->type;
-	my $pointcut = $self->pointcut;
-	my $code     = $self->code;
-
-	# Find all pointcuts that are statically matched
-	# wrap the method with advice code and install the wrapper
-	foreach my $sub_name ($weaver->get_sub_names) {
-		next unless $pointcut->match_define($sub_name);
-		my $wrapped_code = $self->wrap_code($type, $code, $pointcut, $sub_name);
-		$self->add_hooks(
-			$weaver->install($type, $sub_name, $wrapped_code)
-		);
-	}
-}
-
-# return wrapper sub to be installed instead of original
-# wrapper sub creates context then calls advice code
-# it runs only if the pointcut answers true to match_run()
-sub wrap_code {
-	my ($self, $type, $code, $pointcut, $sub_name) = @_;
-
-	return sub {
-		# Hacked Hook::LexWrap calls hooks with 3 params
-		my ($params, $original, $return_value) = @_;
-		my $runtime_context = {};
-		return unless $pointcut->match_run($sub_name, $runtime_context);
-
-		# Create context for advice code
-		my $advice_context = Aspect::AdviceContext->new(
-			sub_name       => $sub_name,
-			type           => $type,
-			pointcut       => $pointcut,
-			params         => $params,
-			return_value   => $return_value,
-			original       => $original,
-			%$runtime_context,
-		);
-		
-		# Execute advice code with its context
-		if (wantarray)
-			{ () = &$code($advice_context) }
-		elsif (defined wantarray)
-			{ my $dummy = &$code($advice_context) }
-		else
-			{ &$code($advice_context) }
-
-		# If proceeding to original, modify params, else modify return value
-		if ($type eq 'before' && $advice_context->proceed)
-			{ @$params = $advice_context->params }
-		else
-			{ $_[-1] = $advice_context->return_value }
-	};
+	die("Method 'install' is not implemented by " . ref($_[0]));
 }
 
 sub add_hooks {
 	push @{shift->{hooks}}, shift;
 }
 
-sub weaver {
-	$_[0]->{weaver};
-}
-
 sub type {
-	$_[0]->{type};
+	die("Method 'type' is not implemented by " . ref($_[0]));
 }
 
 sub code {

Modified: trunk/libaspect-perl/lib/Aspect/AdviceContext.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/AdviceContext.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/AdviceContext.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/AdviceContext.pm Fri Dec 25 14:23:55 2009
@@ -5,7 +5,7 @@
 use Carp;
 
 
-our $VERSION = '0.22';
+our $VERSION = '0.23';
 
 
 sub new {

Modified: trunk/libaspect-perl/lib/Aspect/Hook/LexWrap.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Hook/LexWrap.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Hook/LexWrap.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Hook/LexWrap.pm Fri Dec 25 14:23:55 2009
@@ -7,27 +7,89 @@
 use Carp         ();
 use Sub::Uplevel ();
 
-our $VERSION = '0.22';
+our $VERSION = '0.23';
 
-sub wrap {
-	my ($typeglob, $pre, $post) = @_;
+sub before {
+	my ($typeglob, $code) = @_;
 
 	# Check and normalise the typeglob
-	$typeglob = (ref $typeglob || $typeglob =~ /::/)
-		? $typeglob
-		: caller()."::$typeglob";
 	no strict 'refs';
-	my $original = ref $typeglob eq 'CODE' ? $typeglob : *$typeglob{CODE};
+	my $original = *$typeglob{CODE};
 	unless ( $original ) {
 		Carp::croak("Can't wrap non-existent subroutine ", $typeglob);
 	}
 
 	# Check the wrappers
-	if ( $pre and ref $pre ne 'CODE' ) {
-		Carp::croak("'pre' value is not a subroutine reference");
+	unless ( ref $code eq 'CODE' ) {
+		Carp::croak("Code value is not a subroutine reference");
 	}
-	if ( $post and ref $post ne 'CODE' ) {
-		Carp::croak("'post' value is not a subroutine reference");
+
+	# State variable for use in the closure (eep)
+	my $unwrap = undef;
+
+	# Any way to set prototypes other than eval?
+	my $prototype = prototype($original);
+	   $prototype = defined($prototype) ? "($prototype)" : '';
+
+	# Generate the new function
+	no warnings 'redefine';
+	eval "sub $typeglob $prototype " . q{{
+			if ( $unwrap ) { goto &$original }
+			my ($return, $prereturn);
+			if ( wantarray ) {
+				$prereturn = $return = [];
+				() = $code->( \@_, $original, $return );
+				unless (
+					# It's still an array
+					ref $return eq 'ARRAY'
+					and
+					# It's still the SAME array
+					$return == $prereturn
+					and
+					# It's still empty
+					! @$return
+				) {
+					return ref $return eq 'ARRAY'
+						? @$return
+						: ( $return );
+				}
+
+			} elsif ( defined wantarray ) {
+				$return = bless sub {
+					$prereturn = 1
+				}, 'Aspect::Hook::LexWrap::Cleanup';
+				my $dummy = $code->( \@_, $original, $return );
+				return $return if $prereturn;
+
+			} else {
+				$return = bless sub {
+					$prereturn = 1
+				}, 'Aspect::Hook::LexWrap::Cleanup';
+				$code->( \@_, $original, $return );
+				return if $prereturn;
+			}
+
+			goto &$original;
+	}};
+	die $@ if $@;
+	return bless sub {
+		$unwrap = 1
+	}, 'Aspect::Hook::LexWrap::Cleanup';
+}
+
+sub after {
+	my ($typeglob, $post) = @_;
+
+	# Check and normalise the typeglob
+	no strict 'refs';
+	my $original = *$typeglob{CODE};
+	unless ( $original ) {
+		Carp::croak("Can't wrap non-existent subroutine ", $typeglob);
+	}
+
+	# Check the wrappers
+	if ( ref $post ne 'CODE' ) {
+		Carp::croak("Code is not a subroutine reference");
 	}
 
 	# State variable for use in the closure (eep)
@@ -41,76 +103,36 @@
 			if ( $unwrap ) { goto &$original }
 			my ($return, $prereturn);
 			if ( wantarray ) {
-				$prereturn = $return = [];
-				() = $pre->(
+				$return = [
+					Sub::Uplevel::uplevel(
+						1, $original, @_,
+					)
+				];
+				() = $post->(
 					\@_, $original, $return
-				) if $pre;
-				if (
-					# It's still an array
-					ref $return eq 'ARRAY'
-					and
-					# It's still the SAME array
-					$return == $prereturn
-					and
-					# It's still empty
-					! @$return
-				) {
-					$return = [
-						Sub::Uplevel::uplevel(
-							1, $original, @_,
-						)
-					];
-					() = $post->(
-						\@_, $original, $return
-					) if $post;
-				}
+				);
 				return ref $return eq 'ARRAY'
 					? @$return
 					: ( $return );
 
 			} elsif ( defined wantarray ) {
-				$return = bless sub {
-					$prereturn = 1
-				}, 'Aspect::Hook::LexWrap::Cleanup';
-				my $dummy = $pre->(
+				$return = Sub::Uplevel::uplevel(
+					1, $original, @_,
+				);
+				my $dummy = scalar $post->(
 					\@_, $original, $return
-				) if $pre;
-				unless ( $prereturn ) {
-					$return = Sub::Uplevel::uplevel(
-						1, $original, @_,
-					);
-					$dummy = scalar $post->(
-						\@_, $original, $return
-					) if $post;
-				}
+				);
 				return $return;
 
 			} else {
-				$return = bless sub {
-					$prereturn = 1
-				}, 'Aspect::Hook::LexWrap::Cleanup';
-				$pre->(
-					\@_, $original, $return
-				) if $pre;
-				unless ( $prereturn ) {
-					Sub::Uplevel::uplevel(
-						1, $original, @_,
-					);
-					$post->(
-						\@_, $original, $return
-					) if $post;
-				}
+				Sub::Uplevel::uplevel(
+					1, $original, @_,
+				);
+				$post->( \@_, $original, [] );
 				return;
 			}
 	}};
-	if ( ref $typeglob eq 'CODE' ) {
-		unless ( defined wantarray ) {
-			Carp::carp("Uselessly wrapped subroutine reference in void context");
-		}
-		return $imposter;
-	}
-	*{$typeglob} = $imposter;
-	return unless defined wantarray;
+	*$typeglob = $imposter;
 	return bless sub {
 		$unwrap = 1
 	}, 'Aspect::Hook::LexWrap::Cleanup';

Modified: trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm Fri Dec 25 14:23:55 2009
@@ -6,16 +6,14 @@
 use strict;
 use warnings;
 use Carp;
+use Exporter ();
 use Scalar::Util qw(weaken);
 use Aspect;
-
-
-our $VERSION = '0.22';
-
-
-use base qw(Aspect::Modular Exporter);
-
-our @EXPORT = qw(add_listener remove_listener);
+use Aspect::Modular ();
+
+our $VERSION = '0.23';
+our @ISA     = qw{Aspect::Modular Exporter};
+our @EXPORT  = qw{add_listener remove_listener};
 
 sub get_advice {
 	my ($self, $event_name, $pointcut, %event_params) = @_;

Modified: trunk/libaspect-perl/lib/Aspect/Library/Memoize.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Library/Memoize.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Memoize.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Memoize.pm Fri Dec 25 14:23:55 2009
@@ -5,12 +5,10 @@
 use Carp;
 use Memoize;
 use Aspect;
+use Aspect::Modular ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Modular';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Modular';
 
 sub get_advice {
 	my ($self, $pointcut) = @_;

Modified: trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm Fri Dec 25 14:23:55 2009
@@ -4,10 +4,10 @@
 use warnings;
 use Carp;
 use Aspect;
+use Aspect::Modular ();
 
-our $VERSION = '0.22';
-
-use base 'Aspect::Modular';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Modular';
 
 my %Cache;
 

Modified: trunk/libaspect-perl/lib/Aspect/Library/TestClass.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Library/TestClass.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/TestClass.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/TestClass.pm Fri Dec 25 14:23:55 2009
@@ -5,12 +5,14 @@
 use Carp;
 use Test::Class;
 use Aspect;
+use Aspect::Modular ();
 
-our $VERSION = '0.22';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Modular';
 
-use base 'Aspect::Modular';
-
-sub Test::Class::make_subject { shift->subject_class->new(@_) }
+sub Test::Class::make_subject {
+	shift->subject_class->new(@_);
+}
 
 sub get_advice {
 	my ($self, $pointcut) = @_;

Modified: trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm Fri Dec 25 14:23:55 2009
@@ -4,12 +4,10 @@
 use warnings;
 use Carp;
 use Aspect;
+use Aspect::Modular ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Modular';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Modular';
 
 sub get_advice {
 	my ($self, $source, $target) = @_;

Modified: trunk/libaspect-perl/lib/Aspect/Modular.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Modular.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Modular.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Modular.pm Fri Dec 25 14:23:55 2009
@@ -5,7 +5,7 @@
 use Carp;
 
 
-our $VERSION = '0.22';
+our $VERSION = '0.23';
 
 
 # creating --------------------------------------------------------------------

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut.pm Fri Dec 25 14:23:55 2009
@@ -3,20 +3,20 @@
 use strict;
 use warnings;
 use Carp;
+use Data::Dumper   ();
+use Devel::Symdump ();
 use Aspect::Pointcut::AndOp;
 use Aspect::Pointcut::OrOp;
 use Aspect::Pointcut::NotOp;
-use Data::Dumper;
 
-
-our $VERSION = '0.22';
+our $VERSION = '0.23';
 
 
 use overload
 	'&'  => sub { Aspect::Pointcut::AndOp->new(@_) },
 	'|'  => sub { Aspect::Pointcut::OrOp ->new(@_) },
 	'!'  => sub { Aspect::Pointcut::NotOp->new(@_) },
-	'""' => sub { Dumper shift };
+	'""' => sub { Data::Dumper::Dumper shift };
 
 sub new {
 	my ($class, @spec) = @_;
@@ -35,6 +35,28 @@
 }
 
 sub init {}
+
+# weaving methods -------------------------------------------------------------
+
+my %UNTOUCHABLE = map { $_ => 1 } qw(
+	attributes base fields lib strict warnings Carp Carp::Heavy Config CORE
+	CORE::GLOBAL DB DynaLoader Exporter Exporter::Heavy IO IO::Handle UNIVERSAL
+);
+
+# Find the list of all matching subs
+sub match_all {
+	my $self    = shift;
+	my @matches = ();
+	foreach my $package ( Devel::Symdump->rnew->packages, 'main' ) {
+		next if $UNTOUCHABLE{$package};
+		next if $package =~ /^Aspect::/;
+		foreach my $name ( Devel::Symdump->new($package)->functions ) {
+			# TODO: Need to filter Aspect exportable functions!
+			push @matches, $name if $self->match_define($name);
+		}
+	}
+	return @matches;
+}
 
 # template methods ------------------------------------------------------------
 

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/AndOp.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/AndOp.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/AndOp.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/AndOp.pm Fri Dec 25 14:23:55 2009
@@ -3,18 +3,14 @@
 use strict;
 use warnings;
 use Carp;
+use Aspect::Pointcut::BinOp ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Pointcut::BinOp';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Pointcut::BinOp';
 
 sub binop { $_[1] && $_[2] }
 
-
 1;
-
 
 __END__
 

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/BinOp.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/BinOp.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/BinOp.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/BinOp.pm Fri Dec 25 14:23:55 2009
@@ -3,12 +3,10 @@
 use strict;
 use warnings;
 use Carp;
+use Aspect::Pointcut ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Pointcut';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Pointcut';
 
 sub init {
 	my $self = shift;

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm Fri Dec 25 14:23:55 2009
@@ -3,23 +3,21 @@
 use strict;
 use warnings;
 use Carp;
+use Aspect::Pointcut ();
 
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Pointcut';
 
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Pointcut';
-
-sub init { shift->{spec} = pop }
+sub init {
+	shift->{spec} = pop;
+}
 
 sub match_define {
 	my ($self, $sub_name) = @_;
 	return $self->match($self->{spec}, $sub_name);
 }
 
-
 1;
-
 
 __END__
 

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm Fri Dec 25 14:23:55 2009
@@ -4,12 +4,10 @@
 use warnings;
 use Carp;
 use Aspect::AdviceContext;
+use Aspect::Pointcut ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Pointcut';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Pointcut';
 
 sub init {
 	my $self = shift;

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/NotOp.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/NotOp.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/NotOp.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/NotOp.pm Fri Dec 25 14:23:55 2009
@@ -3,12 +3,10 @@
 use strict;
 use warnings;
 use Carp;
+use Aspect::Pointcut ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Pointcut';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Pointcut';
 
 sub init { shift->{op} = pop }
 

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/OrOp.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/OrOp.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/OrOp.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/OrOp.pm Fri Dec 25 14:23:55 2009
@@ -3,18 +3,14 @@
 use strict;
 use warnings;
 use Carp;
+use Aspect::Pointcut::BinOp ();
 
-
-our $VERSION = '0.22';
-
-
-use base 'Aspect::Pointcut::BinOp';
+our $VERSION = '0.23';
+our @ISA     = 'Aspect::Pointcut::BinOp';
 
 sub binop { $_[1] || $_[2] }
 
-
 1;
-
 
 __END__
 

Modified: trunk/libaspect-perl/t/01_all.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/t/01_all.t?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/t/01_all.t (original)
+++ trunk/libaspect-perl/t/01_all.t Fri Dec 25 14:23:55 2009
@@ -3,13 +3,16 @@
 require 5.008;
 
 use strict;
-use warnings;
+BEGIN {
+	$|  = 1;
+	$^W = 1;
+}
 use Carp;
 use FindBin;
 use lib ("$FindBin::Bin/../lib", "$FindBin::Bin/lib");
 use Test::Class;
+# use Test::NoWarnings;
 
-$| = 1;
 $ENV{TEST_VERBOSE} = 0;
 
 sub runtime_use {
@@ -24,7 +27,6 @@
 	my @ALL_TESTS = qw(
  		Aspect::Pointcut::tests::Call
  		Aspect::Pointcut::tests::Cflow
- 		Aspect::tests::Weaver
  		Aspect::tests::AdviceContext
 		Aspect::tests::Advice
  		Aspect::Library::tests::Singleton

Modified: trunk/libaspect-perl/t/02_caller.t
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/t/02_caller.t?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/t/02_caller.t (original)
+++ trunk/libaspect-perl/t/02_caller.t Fri Dec 25 14:23:55 2009
@@ -1,8 +1,12 @@
 #!/usr/bin/perl
 
 use strict;
-use warnings;
-use Test::More tests => 8;
+BEGIN {
+	$|  = 1;
+	$^W = 1;
+}
+use Test::More tests => 10;
+use Test::NoWarnings;
 use Aspect;
 
 my @CALLER = ();
@@ -29,6 +33,7 @@
 # Set up the Aspect
 my $aspect = before { $BEFORE++ } call 'Bar::bar';
 isa_ok( $aspect, 'Aspect::Advice' );
+isa_ok( $aspect, 'Aspect::Advice::Before' );
 is( $BEFORE,         0, '$BEFORE is false' );
 is( scalar(@CALLER), 0, '@CALLER is empty' );
 

Modified: trunk/libaspect-perl/t/lib/Test/Builder/Tester.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/t/lib/Test/Builder/Tester.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/t/lib/Test/Builder/Tester.pm (original)
+++ trunk/libaspect-perl/t/lib/Test/Builder/Tester.pm Fri Dec 25 14:23:55 2009
@@ -2,7 +2,7 @@
 
 use strict;
 use vars qw(@EXPORT $VERSION @ISA);
-$VERSION = "0.21";
+$VERSION = "0.23";
 
 use Test::Builder;
 use Symbol;

Modified: trunk/libaspect-perl/t/lib/Test/Class.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/t/lib/Test/Class.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/t/lib/Test/Class.pm (original)
+++ trunk/libaspect-perl/t/lib/Test/Class.pm Fri Dec 25 14:23:55 2009
@@ -14,7 +14,7 @@
 use Test::Class::MethodInfo;
 
 
-our $VERSION = '0.21';
+our $VERSION = '0.23';
 
 
 use constant NO_PLAN	=> "no_plan";

Modified: trunk/libaspect-perl/t/lib/Test/Class/MethodInfo.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/t/lib/Test/Class/MethodInfo.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/t/lib/Test/Class/MethodInfo.pm (original)
+++ trunk/libaspect-perl/t/lib/Test/Class/MethodInfo.pm Fri Dec 25 14:23:55 2009
@@ -6,7 +6,7 @@
 use warnings;
 use Carp;
 
-our $VERSION = '0.21';
+our $VERSION = '0.23';
 
 sub is_method_type { 
 	my ($self, $type) = @_;

Modified: trunk/libaspect-perl/t/lib/Test/Exception.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/t/lib/Test/Exception.pm?rev=49358&op=diff
==============================================================================
--- trunk/libaspect-perl/t/lib/Test/Exception.pm (original)
+++ trunk/libaspect-perl/t/lib/Test/Exception.pm Fri Dec 25 14:23:55 2009
@@ -3,13 +3,15 @@
 package Test::Exception;
 use 5.005;
 use strict;
+use Exporter ();
 use Test::Builder;
 use Sub::Uplevel;
-use base qw(Exporter);
+
+our @ISA = 'Exporter';
 
 use vars qw($VERSION @EXPORT @EXPORT_OK);
 
-$VERSION = '0.21';
+$VERSION = '0.23';
 @EXPORT = qw(dies_ok lives_ok throws_ok lives_and);
 
 my $Tester = Test::Builder->new;




More information about the Pkg-perl-cvs-commits mailing list