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