r51256 - in /trunk/libaspect-perl: ./ debian/ lib/ lib/Aspect/ lib/Aspect/Advice/ lib/Aspect/Library/ lib/Aspect/Library/Listenable/ lib/Aspect/Pointcut/ t/

jawnsy-guest at users.alioth.debian.org jawnsy-guest at users.alioth.debian.org
Tue Jan 19 15:22:30 UTC 2010


Author: jawnsy-guest
Date: Tue Jan 19 15:22:24 2010
New Revision: 51256

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=51256
Log:
New upstream release

Added:
    trunk/libaspect-perl/lib/Aspect/Advice/Hook.pm
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/lib/Aspect/Advice/Hook.pm
    trunk/libaspect-perl/lib/Aspect/Library/Breakpoint.pm
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/lib/Aspect/Library/Breakpoint.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Highest.pm
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/lib/Aspect/Pointcut/Highest.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Throwing.pm
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/lib/Aspect/Pointcut/Throwing.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Wantarray.pm
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/lib/Aspect/Pointcut/Wantarray.pm
    trunk/libaspect-perl/t/10_pointcut.t
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/t/10_pointcut.t
    trunk/libaspect-perl/t/14_pointcut_highest.t
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/t/14_pointcut_highest.t
    trunk/libaspect-perl/t/15_pointcut_wantarray.t
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/t/15_pointcut_wantarray.t
    trunk/libaspect-perl/t/16_pointcut_throwing.t
      - copied unchanged from r51255, branches/upstream/libaspect-perl/current/t/16_pointcut_throwing.t
Modified:
    trunk/libaspect-perl/Changes
    trunk/libaspect-perl/MANIFEST
    trunk/libaspect-perl/META.yml
    trunk/libaspect-perl/debian/changelog
    trunk/libaspect-perl/lib/Aspect.pm
    trunk/libaspect-perl/lib/Aspect/Advice.pm
    trunk/libaspect-perl/lib/Aspect/Advice/After.pm
    trunk/libaspect-perl/lib/Aspect/Advice/AfterReturning.pm
    trunk/libaspect-perl/lib/Aspect/Advice/AfterThrowing.pm
    trunk/libaspect-perl/lib/Aspect/Advice/Around.pm
    trunk/libaspect-perl/lib/Aspect/Advice/Before.pm
    trunk/libaspect-perl/lib/Aspect/AdviceContext.pm
    trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm
    trunk/libaspect-perl/lib/Aspect/Library/Listenable/Event.pm
    trunk/libaspect-perl/lib/Aspect/Library/Singleton.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/And.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/If.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Not.pm
    trunk/libaspect-perl/lib/Aspect/Pointcut/Or.pm

Modified: trunk/libaspect-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/Changes?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/Changes (original)
+++ trunk/libaspect-perl/Changes Tue Jan 19 15:22:24 2010
@@ -1,4 +1,18 @@
 Revision history for Perl extension Aspect
+
+0.40 Tue 19 Jan 2010 - Adam Kennedy
+	- Added experimental Aspect::Library::Throwing pointcut
+	- Only nested pointcuts containing only call() would curry away.
+	  Now nested mixed pointcuts curry out as well.
+	- Nested And|Or pointcuts curry to faster flat 3+ element And|Or
+
+0.39 Tue 19 Jan 2010 - Adam Kennedy
+	- All hook code is now generated in a single namespace
+	- Added the Aspect::Library::Wantarray pointcut
+
+0.38 Tue 19 Jan 2010 - Adam Kennedy
+	- Added experimental support for the "highest" pointcut.
+	- Added experimental support for the Breakpoint reusable library.
 
 0.37 Wed 13 Jan 2010 - Adam Kennedy
 	- Added support for "Aspect ':legacy'", which will cause the Aspect

Modified: trunk/libaspect-perl/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/MANIFEST?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/MANIFEST (original)
+++ trunk/libaspect-perl/MANIFEST Tue Jan 19 15:22:24 2010
@@ -22,7 +22,9 @@
 lib/Aspect/Advice/AfterThrowing.pm
 lib/Aspect/Advice/Around.pm
 lib/Aspect/Advice/Before.pm
+lib/Aspect/Advice/Hook.pm
 lib/Aspect/AdviceContext.pm
+lib/Aspect/Library/Breakpoint.pm
 lib/Aspect/Library/Listenable.pm
 lib/Aspect/Library/Listenable/Event.pm
 lib/Aspect/Library/Singleton.pm
@@ -32,9 +34,12 @@
 lib/Aspect/Pointcut/And.pm
 lib/Aspect/Pointcut/Call.pm
 lib/Aspect/Pointcut/Cflow.pm
+lib/Aspect/Pointcut/Highest.pm
 lib/Aspect/Pointcut/If.pm
 lib/Aspect/Pointcut/Not.pm
 lib/Aspect/Pointcut/Or.pm
+lib/Aspect/Pointcut/Throwing.pm
+lib/Aspect/Pointcut/Wantarray.pm
 LICENSE
 Makefile.PL
 MANIFEST			This list of files
@@ -42,9 +47,13 @@
 README
 t/01_compile.t
 t/02_advice_context.t
+t/10_pointcut.t
 t/11_pointcut_call.t
 t/12_pointcut_cflow.t
 t/13_pointcut_if.t
+t/14_pointcut_highest.t
+t/15_pointcut_wantarray.t
+t/16_pointcut_throwing.t
 t/21_advice_around.t
 t/22_advice_around.t
 t/23_advice_before.t

Modified: trunk/libaspect-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/META.yml?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/META.yml (original)
+++ trunk/libaspect-perl/META.yml Tue Jan 19 15:22:24 2010
@@ -34,4 +34,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.37
+version: 0.40

Modified: trunk/libaspect-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/debian/changelog?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/debian/changelog (original)
+++ trunk/libaspect-perl/debian/changelog Tue Jan 19 15:22:24 2010
@@ -1,3 +1,9 @@
+libaspect-perl (0.40-1) UNRELEASED; urgency=low
+
+  * New upstream release
+
+ -- Jonathan Yu <jawnsy at cpan.org>  Tue, 19 Jan 2010 10:30:09 -0500
+
 libaspect-perl (0.37-1) unstable; urgency=low
 
   * New upstream release

Modified: trunk/libaspect-perl/lib/Aspect.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect.pm (original)
+++ trunk/libaspect-perl/lib/Aspect.pm Tue Jan 19 15:22:24 2010
@@ -20,6 +20,9 @@
 use Aspect::Pointcut::Not          ();
 use Aspect::Pointcut::Call         ();
 use Aspect::Pointcut::Cflow        ();
+use Aspect::Pointcut::Highest      ();
+use Aspect::Pointcut::Wantarray    ();
+use Aspect::Pointcut::Throwing     ();
 use Aspect::Advice                 ();
 use Aspect::AdviceContext          ();
 use Aspect::Advice::Around         ();
@@ -29,7 +32,7 @@
 use Aspect::Advice::AfterThrowing  ();
 use Aspect::AdviceContext          ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 
 # Internal data storage
 my @FOREVER = ();
@@ -94,6 +97,10 @@
 	);
 }
 
+sub highest () {
+	Aspect::Pointcut::Highest->new();
+}
+
 sub if_true (&) {
 	Aspect::Pointcut::If->new(@_);
 }
@@ -104,6 +111,22 @@
 
 sub cflow ($$) {
 	Aspect::Pointcut::Cflow->new(@_);
+}
+
+sub wantlist () {
+	Aspect::Pointcut::Wantarray->new(1);
+}
+
+sub wantscalar () {
+	Aspect::Pointcut::Wantarray->new('');
+}
+
+sub wantvoid () {
+	Aspect::Pointcut::Wantarray->new(undef);
+}
+
+sub throwing ($) {
+	Aspect::Pointcut::Throwing->new(@_);
 }
 
 
@@ -145,7 +168,8 @@
 		# Install new generation API functions
 		foreach ( qw{
 			around after_returning after_throwing
-			if_true
+			if_true highest throwing
+			wantlist wantscalar wantvoid
 		} ) {
 			Sub::Install::install_sub( {
 				code => $_,

Modified: trunk/libaspect-perl/lib/Aspect/Advice.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice.pm Tue Jan 19 15:22:24 2010
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 
 sub new {
 	my $class = shift;

Modified: trunk/libaspect-perl/lib/Aspect/Advice/After.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice/After.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice/After.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice/After.pm Tue Jan 19 15:22:24 2010
@@ -9,9 +9,10 @@
 use Carp                  ();
 use Sub::Uplevel          ();
 use Aspect::Advice        ();
+use Aspect::Advice::Hook  ();
 use Aspect::AdviceContext ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Advice';
 
 # NOTE: To simplify debugging of the generated code, all injected string
@@ -61,6 +62,8 @@
 		# Generate the new function
 		no warnings 'redefine';
 		eval <<"END_PERL"; die $@ if $@;
+		package Aspect::Advice::Hook;
+
 		*$NAME = sub $PROTOTYPE {
 			# Is this a lexically scoped hook that has finished
 			goto &\$original if $MATCH_DISABLED;
@@ -74,6 +77,7 @@
 				] };
 
 				my \$runtime = {
+					wantarray    => \$wantarray,
 					return_value => \$return,
 					exception    => \$\@,
 				};
@@ -84,12 +88,11 @@
 
 				# Create the context
 				my \$context = Aspect::AdviceContext->new(
-					type      => 'after',
-					pointcut  => \$pointcut,
-					sub_name  => \$name,
-					wantarray => \$wantarray,
-					params    => \\\@_,
-					original  => \$original,
+					type     => 'after',
+					pointcut => \$pointcut,
+					sub_name => \$name,
+					params   => \\\@_,
+					original => \$original,
 					\%\$runtime,
 				);
 
@@ -117,6 +120,7 @@
 				};
 
 				my \$runtime = {
+					wantarray    => \$wantarray,
 					return_value => \$return,
 					exception    => \$\@,
 				};
@@ -127,12 +131,11 @@
 
 				# Create the context
 				my \$context = Aspect::AdviceContext->new(
-					type      => 'after',
-					pointcut  => \$pointcut,
-					sub_name  => \$name,
-					wantarray => \$wantarray,
-					params    => \\\@_,
-					original  => \$original,
+					type     => 'after',
+					pointcut => \$pointcut,
+					sub_name => \$name,
+					params   => \\\@_,
+					original => \$original,
 					\%\$runtime,
 				);
 
@@ -154,6 +157,7 @@
 				};
 
 				my \$runtime = {
+					wantarray    => \$wantarray,
 					return_value => undef,
 					exception    => \$\@,
 				};
@@ -164,12 +168,11 @@
 
 				# Create the context
 				my \$context = Aspect::AdviceContext->new(
-					type      => 'after',
-					pointcut  => \$pointcut,
-					sub_name  => \$name,
-					wantarray => \$wantarray,
-					params    => \\\@_,
-					original  => \$original,
+					type     => 'after',
+					pointcut => \$pointcut,
+					sub_name => \$name,
+					params   => \\\@_,
+					original => \$original,
 					\%\$runtime,
 				);
 

Modified: trunk/libaspect-perl/lib/Aspect/Advice/AfterReturning.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice/AfterReturning.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice/AfterReturning.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice/AfterReturning.pm Tue Jan 19 15:22:24 2010
@@ -9,9 +9,10 @@
 use Carp                  ();
 use Sub::Uplevel          ();
 use Aspect::Advice        ();
+use Aspect::Advice::Hook  ();
 use Aspect::AdviceContext ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Advice';
 
 # NOTE: To simplify debugging of the generated code, all injected string
@@ -61,12 +62,16 @@
 		# Generate the new function
 		no warnings 'redefine';
 		eval <<"END_PERL"; die $@ if $@;
+		package Aspect::Advice::Hook;
+
 		*$NAME = sub $PROTOTYPE {
 			# Is this a lexically scoped hook that has finished
 			goto &\$original if $MATCH_DISABLED;
 
-			my \$runtime   = {};
 			my \$wantarray = wantarray;
+			my \$runtime   = {
+				wantarray => \$wantarray,
+			};
 			if ( \$wantarray ) {
 				my \$return = [
 					Sub::Uplevel::uplevel(
@@ -80,7 +85,6 @@
 					type         => 'after_returning',
 					pointcut     => \$pointcut,
 					sub_name     => \$name,
-					wantarray    => \$wantarray,
 					params       => \\\@_,
 					return_value => \$return,
 					original     => \$original,

Modified: trunk/libaspect-perl/lib/Aspect/Advice/AfterThrowing.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice/AfterThrowing.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice/AfterThrowing.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice/AfterThrowing.pm Tue Jan 19 15:22:24 2010
@@ -9,9 +9,10 @@
 use Carp                  ();
 use Sub::Uplevel          ();
 use Aspect::Advice        ();
+use Aspect::Advice::Hook  ();
 use Aspect::AdviceContext ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Advice';
 
 # NOTE: To simplify debugging of the generated code, all injected string
@@ -61,6 +62,8 @@
 		# Generate the new function
 		no warnings 'redefine';
 		eval <<"END_PERL"; die $@ if $@;
+		package Aspect::Advice::Hook;
+
 		*$NAME = sub $PROTOTYPE {
 			# Is this a lexically scoped hook that has finished
 			goto &\$original if $MATCH_DISABLED;
@@ -75,6 +78,7 @@
 				return \@\$return unless \$\@;
 
 				my \$runtime = {
+					wantarray    => \$wantarray,
 					return_value => \$return,
 					exception    => \$\@,
 				};
@@ -82,12 +86,11 @@
 
 				# Create the context
 				my \$context = Aspect::AdviceContext->new(
-					type         => 'after_throwing',
-					pointcut     => \$pointcut,
-					sub_name     => \$name,
-					wantarray    => \$wantarray,
-					params       => \\\@_,
-					original     => \$original,
+					type     => 'after_throwing',
+					pointcut => \$pointcut,
+					sub_name => \$name,
+					params   => \\\@_,
+					original => \$original,
 					\%\$runtime,
 				);
 
@@ -116,6 +119,7 @@
 				return \$return unless \$\@;
 
 				my \$runtime = {
+					wantarray    => \$wantarray,
 					return_value => \$return,
 					exception    => \$\@,
 				};
@@ -123,12 +127,11 @@
 
 				# Create the context
 				my \$context = Aspect::AdviceContext->new(
-					type         => 'after_throwing',
-					pointcut     => \$pointcut,
-					sub_name     => \$name,
-					wantarray    => \$wantarray,
-					params       => \\\@_,
-					original     => \$original,
+					type     => 'after_throwing',
+					pointcut => \$pointcut,
+					sub_name => \$name,
+					params   => \\\@_,
+					original => \$original,
 					\%\$runtime,
 				);
 
@@ -151,6 +154,7 @@
 				return unless \$\@;
 
 				my \$runtime = {
+					wantarray    => \$wantarray,
 					return_value => undef,
 					exception    => \$\@,
 				};
@@ -158,12 +162,11 @@
 
 				# Create the context
 				my \$context = Aspect::AdviceContext->new(
-					type         => 'after_throwing',
-					pointcut     => \$pointcut,
-					sub_name     => \$name,
-					wantarray    => \$wantarray,
-					params       => \\\@_,
-					original     => \$original,
+					type     => 'after_throwing',
+					pointcut => \$pointcut,
+					sub_name => \$name,
+					params   => \\\@_,
+					original => \$original,
 					\%\$runtime,
 				);
 

Modified: trunk/libaspect-perl/lib/Aspect/Advice/Around.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice/Around.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice/Around.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice/Around.pm Tue Jan 19 15:22:24 2010
@@ -9,9 +9,10 @@
 use Carp                  ();
 use Sub::Uplevel          ();
 use Aspect::Advice        ();
+use Aspect::Advice::Hook  ();
 use Aspect::AdviceContext ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Advice';
 
 sub _install {
@@ -58,21 +59,24 @@
 		# Generate the new function
 		no warnings 'redefine';
 		eval <<"END_PERL"; die $@ if $@;
+		package Aspect::Advice::Hook;
+
 		*$NAME = sub $PROTOTYPE {
 			# Is this a lexically scoped hook that has finished
 			goto &\$original if $MATCH_DISABLED;
 
 			# Apply any runtime-specific context checks
-			my \$runtime = {};
+			my \$wantarray = wantarray;
+			my \$runtime   = {
+				wantarray => \$wantarray,
+			};
 			goto &\$original unless $MATCH_RUN;
 
 			# Prepare the context object
-			my \$wantarray = wantarray;
 			my \$context   = Aspect::AdviceContext->new(
 				type         => 'around',
 				pointcut     => \$pointcut,
 				sub_name     => \$name,
-				wantarray    => \$wantarray,
 				params       => \\\@_,
 				return_value => \$wantarray ? [ ] : undef,
 				original     => \$original,

Modified: trunk/libaspect-perl/lib/Aspect/Advice/Before.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Advice/Before.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Advice/Before.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Advice/Before.pm Tue Jan 19 15:22:24 2010
@@ -8,9 +8,10 @@
 use Carp::Heavy           (); 
 use Carp                  ();
 use Aspect::Advice        ();
+use Aspect::Advice::Hook  ();
 use Aspect::AdviceContext ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Advice';
 
 sub _install {
@@ -18,6 +19,13 @@
 	my $pointcut = $self->pointcut;
 	my $code     = $self->code;
 	my $lexical  = $self->lexical;
+
+	# Special case.
+	# The method used by the Highest pointcut is incompatible
+	# with the goto optimisation used by the before() advice.
+	if ( $pointcut->match_contains('Aspect::Pointcut::Highest') ) {
+		Carp::croak("The highest pointcut is not currently supported by this advice");
+	}
 
 	# Get the curried version of the pointcut we will use for the
 	# runtime checks instead of the original.
@@ -57,21 +65,24 @@
 		# Generate the new function
 		no warnings 'redefine';
 		eval <<"END_PERL"; die $@ if $@;
+		package Aspect::Advice::Hook;
+
 		*$NAME = sub $PROTOTYPE {
 			# Is this a lexically scoped hook that has finished
 			goto &\$original if $MATCH_DISABLED;
 
 			# Apply any runtime-specific context checks
-			my \$runtime = {};
+			my \$wantarray = wantarray;
+			my \$runtime   = {
+				wantarray => \$wantarray,
+			};
 			goto &\$original unless $MATCH_RUN;
 
 			# Prepare the context object
-			my \$wantarray = wantarray;
-			my \$context   = Aspect::AdviceContext->new(
+			my \$context = Aspect::AdviceContext->new(
 				type         => 'before',
 				pointcut     => \$pointcut,
 				sub_name     => \$name,
-				wantarray    => \$wantarray,
 				params       => \\\@_,
 				return_value => \$wantarray ? [ ] : undef,
 				original     => \$original,

Modified: trunk/libaspect-perl/lib/Aspect/AdviceContext.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/AdviceContext.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/AdviceContext.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/AdviceContext.pm Tue Jan 19 15:22:24 2010
@@ -5,7 +5,7 @@
 use Carp         ();
 use Sub::Uplevel ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 
 
 

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=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Listenable.pm Tue Jan 19 15:22:24 2010
@@ -12,7 +12,7 @@
 use Aspect::Advice::Before             ();
 use Aspect::Library::Listenable::Event ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = qw{ Aspect::Modular };
 
 sub import {

Modified: trunk/libaspect-perl/lib/Aspect/Library/Listenable/Event.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Library/Listenable/Event.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Listenable/Event.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Listenable/Event.pm Tue Jan 19 15:22:24 2010
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 
 sub new {
 	my $class = shift;

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=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Singleton.pm Tue Jan 19 15:22:24 2010
@@ -6,7 +6,7 @@
 use Aspect::Advice::Before ();
 use Aspect::Pointcut::Call ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Modular';
 
 my %CACHE = ();

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=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Library/Wormhole.pm Tue Jan 19 15:22:24 2010
@@ -8,7 +8,7 @@
 use Aspect::Pointcut::Cflow ();
 use Aspect::Pointcut::And   ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Modular';
 
 sub get_advice {

Modified: trunk/libaspect-perl/lib/Aspect/Modular.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Modular.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Modular.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Modular.pm Tue Jan 19 15:22:24 2010
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 
 sub new {
 	my $class = shift;

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut.pm Tue Jan 19 15:22:24 2010
@@ -7,7 +7,7 @@
 use Aspect::Pointcut::And ();
 use Aspect::Pointcut::Not ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 
 use overload (
 	# Keep traditional Perl boolification and stringification
@@ -96,6 +96,12 @@
 	die("Method 'match_define' not implemented in class '$class'");
 }
 
+sub match_contains {
+	my $self = shift;
+	return 1 if $self->isa($_[0]);
+	return '';
+}
+
 sub curry_run {
 	my $class = ref $_[0] || $_[0];
 	die("Method 'curry' not implemented in class '$class'");

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/And.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/And.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/And.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/And.pm Tue Jan 19 15:22:24 2010
@@ -4,7 +4,7 @@
 use warnings;
 use Aspect::Pointcut ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Pointcut';
 
 
@@ -22,23 +22,37 @@
 	return 1;
 }
 
+sub match_contains {
+	my $self = shift;
+	return 1 if $self->isa($_[0]);
+	foreach my $child ( @$self ) {
+		return 1 if $child->match_contains($_[0]);
+	}
+	return '';
+}
+
 sub curry_run {
 	my $self = shift;
+	my @list = @$self;
 
-	# Reduce our children to the subset which themselves do not curry
-	my @children = grep { $_->curry_run } @$self;
+	# Collapse nested And clauses
+	while ( scalar grep { $_->isa('Aspect::Pointcut::And') } @list ) {
+		@list = map {
+			$_->isa('Aspect::Pointcut::And') ? @$_ : $_
+		} @list;
+	}
+
+	# Curry down our children
+	@list = grep { defined $_ } map { $_->curry_run } @list;
 
 	# If none are left, curry us away to nothing
-	return unless @children;
+	return unless @list;
 
 	# If only one remains, curry us away to just that child
-	if ( @children == 1 ) {
-		return $children[0];
-	}
+	return $list[0] if @list == 1;
 
 	# Create our clone to hold the curried subset
-	my $class = ref($self);
-	return $class->new( @children );
+	return ref($self)->new( @list );
 }
 
 

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=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/Call.pm Tue Jan 19 15:22:24 2010
@@ -6,7 +6,7 @@
 use Params::Util     ();
 use Aspect::Pointcut ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Pointcut';
 
 

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=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/Cflow.pm Tue Jan 19 15:22:24 2010
@@ -8,7 +8,7 @@
 use Aspect::Pointcut::Call ();
 use Aspect::AdviceContext  ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Pointcut';
 
 use constant KEY  => 0;

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/If.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/If.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/If.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/If.pm Tue Jan 19 15:22:24 2010
@@ -4,7 +4,7 @@
 use warnings;
 use Aspect::Pointcut ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Pointcut';
 
 

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/Not.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/Not.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/Not.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/Not.pm Tue Jan 19 15:22:24 2010
@@ -4,7 +4,7 @@
 use warnings;
 use Aspect::Pointcut ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Pointcut';
 
 
@@ -16,6 +16,13 @@
 
 sub match_define {
 	return ! shift->[0]->match_define(@_);
+}
+
+sub match_contains {
+	my $self = shift;
+	return 1 if $self->isa($_[0]);
+	return 1 if $self->[0]->match_contains($_[0]);
+	return '';
 }
 
 # Logical not inherits it's curryability from the element contained

Modified: trunk/libaspect-perl/lib/Aspect/Pointcut/Or.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libaspect-perl/lib/Aspect/Pointcut/Or.pm?rev=51256&op=diff
==============================================================================
--- trunk/libaspect-perl/lib/Aspect/Pointcut/Or.pm (original)
+++ trunk/libaspect-perl/lib/Aspect/Pointcut/Or.pm Tue Jan 19 15:22:24 2010
@@ -4,7 +4,7 @@
 use warnings;
 use Aspect::Pointcut ();
 
-our $VERSION = '0.37';
+our $VERSION = '0.40';
 our @ISA     = 'Aspect::Pointcut';
 
 
@@ -22,23 +22,37 @@
 	return;
 }
 
+sub match_contains {
+	my $self = shift;
+	return 1 if $self->isa($_[0]);
+	foreach my $child ( @$self ) {
+		return 1 if $child->match_contains($_[0]);
+	}
+	return '';
+}
+
 sub curry_run {
 	my $self = shift;
+	my @list = @$self;
 
-	# Reduce our children to the subset which themselves do not curry
-	my @children = grep { $_->curry_run } @$self;
+	# Collapse nested And clauses
+	while ( scalar grep { $_->isa('Aspect::Pointcut::Or') } @list ) {
+		@list = map {
+			$_->isa('Aspect::Pointcut::Or') ? @$_ : $_
+		} @list;
+	}
+
+	# Curry down our children
+	@list = grep { defined $_ } map { $_->curry_run } @list;
 
 	# If none are left, curry us away to nothing
-	return unless @children;
+	return unless @list;
 
 	# If only one remains, curry us away to just that child
-	if ( @children == 1 ) {
-		return $children[0];
-	}
+	return $list[0] if @list == 1;
 
 	# Create our clone to hold the curried subset
-	my $class = ref($self);
-	return $class->new( @children );
+	return ref($self)->new( @list );
 }
 
 




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