Aspect
view release on metacpan or search on metacpan
- Implemented Pointcut currying. The pointcut objects will
optimise themselves down to just the section that should run
if we assume the function was hooked correctly.
This not only makes the hooks much more efficient in working
out if they need to fire, but it also fixes a major bug with
negative call pointcuts always causing all functions to not fire.
- Resolved RT #36527 - Minor doc bug s/Profiled/Profiler/
- Moved Aspect::Library::Listenable into it's own distribution
- Migrated all the tests from Test::Class to normal Test::More
- Various code clean up and simplification, with less exporting
- Added missing Task::Weaken dependency
- Fixed, hopefully, the "variables will not remain shared" but
by moving from using pure named hook functions to assigning
anonymous subroutines to the typeglob instead.
- Pointcuts now boolify (quickly) to true, and don't stringify to
a Data::Dumper debugging spew any more.
- Implemted the internals needed to support AndOp and OrOp pointcuts
with more than 2 elements, so that in future long chained
collections of & or | pointcuts will collapse down into a single
object, instead of building as giant nested trees of boolean pairs.
0.27 Sun 3 Jan 2010 - Adam Kennedy
- Various micro-optimisation of Aspect::AdviceContext which would
normally be somewhat pointless, but is useful in this case when
an Aspect hook is applied to something which is in the hot loop
for some program.
- Added a test script to specifically hunt down the problems with
variable sharing in string-eval'ed closures.
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
( run in 0.900 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )