Revision history for Perl extension Aspect 0.24 Wed 30 Dec 2009 - Adam Kennedy - Changes file now uses tabs (to make it less annoying for me) :) - Moved the inline Aspect::Hook::LexWrap::Cleanup class into it's own dedicated Aspect::Cleanup class. - Merged Advice-specific hooks from Aspect::Hook::Lexwrap into the advice classes. - Removed the now-redundant Aspect::Hook::Lexwrap entirely - Simplified the Aspect::AdviceContext constructor to make it faster - Logically merged the code-generated functionality from ->install and the Hook::LexWrap-inspired ->hook methods for each Advice class. This removes a lot of guess work and double handling from the main execution path, and should be significantly faster. - With the code merged, pushed the scope exit flag outside the symbol table iteration in the installer. Instead of a large array of separate exit-tracking objects, we can instead use one single shared lexical hook that works via mixed depth closure Magick. - Only call wantarray once per hook execution and share the result therafter as a variable. Saves two function calls per hook. 0.23 Thu 24 Dec 2009 - Adam Kennedy - 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 - Adam Kennedy - Part one of an upcoming series of major upgrades - Migrating to Sub::Uplevel to remove our custom CORE::GLOBAL::caller 0.21 Tue 21 Jul 2009 - Adam Kennedy - Bumped the version to 0.21 so the Hook::LexWrap module indexes 0.16 Tue 19 May 2009 - Adam Kennedy - Moved out Aspect::Library::Profiler into a standalone distribution 0.15 Thu Jul 24 23:02:11 CEST 2008 (Marcel Gruenauer ) - fixed version in all modules. *sigh* 0.14 Thu Jul 24 22:46:43 CEST 2008 (Marcel Gruenauer ) - fixed dist style 0.13 Thu Jul 24 18:22:15 CEST 2008 (Marcel Gruenauer ) - Made sure every module has a $VERSION - updated MANIFEST and MANIFEST.SKIP - removed META.yml as it is being generated by Module::Install - added requirements to Makefile.PL - converted Makefile.PL to use Module::Install - Aspect::Hook::LexWrap now uses warnings and strict; some changes were necessary for those to go through - fixed POD error in Aspect::Modular - added spaces where necessary to avoid having the template's start_tag in the code - renamed t/all_tests.t to t/01_all.t - added t/perlcriticrc - added .shipit - set version to 0.13 - updated MANIFEST - updated t/perlcriticrc 0.12 Sat, 24 Mar 2007 00:00:00 +0100 (Ran Eilam ) - You can now attach advice to subs in main:: package, see Advice tests - Made everything easier to install by including dependencies required for testing - Added __always_fire option to Listenable - Listenable: You can now let listeners receive any parameters, not just the event, see the test object_listener - Modified our hack on Hook::LexWrap so it does not ignore prototypes, see Advice tests - Removed old warning from Makefile.PL 0.11 Tue, 03 Aug 2004 00:00:00 +0100 (Ran Eilam ) - Fixed problem in upgrading from 0.08, CPAN.pm was getting confused on Advice and Modular, because they had no version numbers, and undef is smaller than 0.08. (merlyn) - Lowered dependency on Test::Class to 0.03 0.10 Fri, 30 Jul 2004 00:00:00 +0100 (Ran Eilam ) - No longer a developer release - Added Listenable reusable aspect - Added subject_params() support for TestClass library aspect 0.09_03 Tue, 06 Jul 2004 00:00:00 +0100 (Ran Eilam ) - Added Carp::Heavy to list of untouchables in Weaver.pm, to avoid Carp dumping core - Test::Class aspect allows for customizing IUT through init_subject_state 0.09_02 Sat, 06 Mar 2004 00:00:00 +0100 (Ran Eilam ) - AdviceContext now has the original code, so you can do AspectJ-style around advice. You can call the original code from before or after advice. Added AdviceContext::run_original. - Memoize can memoize in any context, not just scalar, again - Added Test::Class helper aspect - Started using Devel::Symdump 0.09_01 Sat, 06 Mar 2004 00:00:00 +0100 (Ran Eilam ) - Released for review by participants in YAPC::Israel 2004 - New syntax is incompatible with old - New maintainer, Ran Eilam - Control flow pointcut: cflow(), done according to Marcel's design - Advice context trapping for control flow pointcuts - Use Test::Class for unit tests - Wormhole reusable aspect - Added prototypes so you can dispense with parentheses - Removed return/around pointcuts, added after advice - Removed attribute interface - Added a mutated version of Hook::LexWrap with support for appending/removing arguments - Moved reusable aspects to Aspect::Library - regression: Aspect exported subs generate join points again 0.07 Wed, 31 Jul 2002 22:42:27 +0200 (Marcel Gruenauer ) - The distribution has been adapted for use with perl5.8.0. C is now a core module, but there was a problem with context (wantarray) handling with Aspect::Memoize. Sorry about the perl 5.6.x users, but this is bleeding-edge stuff, so you're expected to use the very latest gear. Anyway, you can still get an earlier version (up to 0.07) from CPAN, which will work with perl 5.6.x. - Aspect::Memoize is now intended for subroutines returning scalars only. That is, if the sub is called in list context, it will still only memoize, and return, a memoized scalar. Void context obviously doesn't matter when it comes to memoization; subroutines returning lists are something I have to think about. - Tests now use Test::More 0.07 Fri, 15 Mar 2002 09:04:51 +0100 (Marcel Gruenauer ) - symbols exported from Aspect.pm now don't generate join points. So I added Aspect::import() and modified Aspect::JoinPoint::enum() to check for %Aspect::exp_syms. 0.06 Fri, 26 Oct 2001 16:42:51 +0200 (Marcel Gruenauer ) - added around() function to Aspect.pm - added Aspect::Profiled - added Aspect::Attribute interface to creating advice - made Aspect::Advice's enable() and disable() return $self - added cookbook example program callflow_attr.pl - added cookbook recipes for bounds checking and change tracking, plus sample programs 0.05 Thu, 11 Oct 2001 09:44:50 +0200 (Marcel Gruenauer ) - removed dependency on Data::Denter 0.04 Mon, 01 Oct 2001 18:33:00 +0200 (Marcel Gruenauer ) - removed the patched Hook::LexWrap now that 0.20 is out which fixes all the problems of 0.10 - added documentation (a recurring theme, never finishes) 0.03 Sun, 30 Sep 2001 19:43:56 +0200 (Marcel Gruenauer ) - added documentation - Included a patched Hook::LexWrap that fixes a bug with wantarray preservation in subroutine wrappers. Will be removed if and when Damian approves of the patch or otherwise fixes the bug. 0.02 Fri, 28 Sep 2001 12:59:06 +0200 (Marcel Gruenauer ) - added documentation - added '$::thisjp' global variable - added modular memoization aspect: Aspect::Memoize - added modular tracing aspect: Aspect::Trace 0.01 Fri, 28 Sep 2001 10:36:08 +0200 (Marcel Gruenauer ) - original version