Revision history for Perl extension Aspect

0.26 Thu 31 Dec 2009 - Adam Kennedy
	- With the primary internals refactoring completely, we now start
	  a series of commits to remove excessive abstractions, and to alter
	  others to more appropriate abstractions (still without changing
	  any of the APIs)
	- Cleaning up and refactoring the Aspect/Advice constructor code in
	  Aspect.pm
	- Removed the weird Aspect::Advice->new( type, code, pointcut ) for
	  a more conventional ->new setup.
	- Attempt to load Sub::Uplevel earlier (before we load Exporter) so
	  there is an increased likelyhood that we don't have to reload
	  Exporter later.
	- Removed redundant references to Hook::LexWrap from the POD, and
	  removed the "Convert to Sub::Uplevel" item from the TO DO list.
	- Rewrote the Pointcut family of classes to have a simpler structure
	  which should be faster. Some now use blessed ARRAYs as a
	  preparatory step for allowing the AndOp/OrOp pointcuts to have
	  more than just two elements (and to allow enable certain
	  optimisation strategies down the line).
	- Removed the faulty Aspect::Pointcut::BinOp abstraction entirely.
	  It was causing boolean and/or operations to always run both sides,
	  so unlike the overloaded expression they were created from, they
	  would never shortcut. This is now resolved, and the an/or pointcut
	  elements now shortcut properly.

0.25 Thu 31 Dec 2009 - Adam Kennedy
	- Debundled various out-of-date testing libraries, and reverted
	  to more conventional build_requires dependencies now that our
	  downstream packaging systems have the ability to consume them.
	- Since the code documents the Aspect::Advice->install method as
	  private (and it is undocumented) rename to ->_install as a
	  precursor to changing it's behaviour at an API level.
	- Now that the descope execution of the closure hook is able to be
	  trusted, we no longer need the Aspect::Cleanup DESTROY-time
	  self-execution magick.
	- Added the ->wantarray property to the AdviceContext object.
	  This is provided as a convenience to the user (since the wantarray)
	  function works properly inside the advice code. It's main use is
	  for some AspectContext internals.
	- Added wantarray context test, which uncovered a bug where
	  void-context calls were incorrectly running the advice in scalar
	  context.

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 <marcel@cpan.org>)
	- fixed version in all modules. *sigh*

0.14 Thu Jul 24 22:46:43 CEST 2008 (Marcel Gruenauer <marcel@cpan.org>)
	- fixed dist style

0.13 Thu Jul 24 18:22:15 CEST 2008 (Marcel Gruenauer <marcel@cpan.org>)
	- 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 <ran.eilam@gmail.com>)
	- 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 <ran.eilam@gmail.com>)
	- 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 <ran.eilam@gmail.com>)
	- 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 <ran.eilam@gmail.com>)
	- 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 <ran.eilam@gmail.com>)
	- 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 <ran.eilam@gmail.com>)
	- 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 <marcel@cpan.org>)
	- The distribution has been adapted for use with perl5.8.0.
	  C<Hook::LexWrap> 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 <marcel@cpan.org>)
	- 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 <marcel@cpan.org>)
	- 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 <marcel@cpan.org>)
	- removed dependency on Data::Denter

0.04 Mon, 01 Oct 2001 18:33:00 +0200 (Marcel Gruenauer <marcel@cpan.org>)
	- 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 <marcel@cpan.org>)
	- 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 <marcel@cpan.org>)
	- 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 <marcel@cpan.org>)
	- original version