Changes for version 0.98
- Production release, no change from 0.97_06
- Major refactoring, documentation and and 1.00 preparation release
- The API has now moved closed to the AspectJ API where sensible
Changes for version 0.97_06
- Generalised and moved Aspec::Pointcut::Highest::Clean to Aspect::Guard
- Removed dedicated Aspect::Advice::AfterReturning advice type
- Removed dedicated Aspect::Advice::AfterThrowing advice type
- Collapsing of nested and/or pointcuts is now done at constructor time
- Expanded testing for corner case pointcut currying scenarios
- Deprecated after_returning and after_throwing
Changes for version 0.97_05
- Advice code is now always run consistently in void context, the ->wantarray method is now the only way to check the calling context of the active joint point. This is not only more consistent in having all context come from methods, is also prevents inconsistent behaviour when calling methods directly with $_->self->method and it allows context-senstive behaviour to be added to the advice methods.
- Replaced params and params_ref with args, with a different behaviour based on the wantarray context it is called in. This is semantically much closer to the AspectJ version, and more importantly it has no "convenience" features which will prevent weird complexity later on.
- Rewrote return_value to act on context in the same manner as args. This is theoretically not backwards compatible, but the entire test suite continued to pass after change, which shows that the only things backcompatible would be things using methods in a strange manner.
- Added POD documentation for most of the methods in Aspect::Point.
- Added basic POD skeletons for the different Aspect::Advice:: classes.
- Minor optimisation in generated code to check for exceptions directly, rather than via the slower accessor method.
- Clarified that only after and after_throwing support exception handling and throwing.
- Aspect::Advice::AfterReturning now inherits from ::After
- Aspect::Advice::AfterThrowing now inherits from ::After
- Added the returning pointcut for use with after advice
- Added a second curry method for use prior to weave-time compilation
- Added support for naked throwing() without a specific exception value
Changes for version 0.97_04
- Added more POD to the main page, this is closer to the final form
Changes for version 0.97_03
- Simplified if_true to true and ::If to ::True
- Expanded XS acceleration to more classes and methods
- Completed reasonable thorough main documentation for Aspect.pm
- Prohibit usage of the highest pointcut to one per advice declaration due to implementation complexity and unclear semantics.
- Added Advice::Point::Static for the cflow point details in line with AspectJ's idea of "static parts" of join points.
- Removed deprecated Aspect::AdviceContext now it is no longer needed by the cflow pointcut.
- Pointcut logic operations & | ! now validate their children
- The cflow declarator is now documented everywhere as single param, defaulting to an "enclosing" accessor, which is accelerated.
- Added specific accelerated Aspect::Point::pointcut method
- Move Aspect::Pointcut::Highest::Cleanup into its own module file
Changes for version 0.97_02
- Removed the barely document, untested and rarely used append_param(s)
- Added an improved SYNOPSIS and generally improving main POD
- Added limited XS acceleration if Class::XSAccessor 1.08 installed.
- Remove the use of test recursion in preparation for XS vs PP copying
Changes for version 0.97_01
- Now all standard keys have their own methods, remove the weird automagic from the AUTOLOAD method.
- Some more minor performance tweaks
- Removed excessive exception method from begin advice
- Moved proceed to the specific method it is used
- Renamed run_original to proceed, keeping the original as an alias
Modules
Aspect-Oriented Programming (AOP) for Perl
Change how Perl code is run at a pointcut
Execute code after a function is called
Execute code both before and after a function
Execute code before a function is called
General purpose guard object for destroy-time actions
Holding area for internal generated code
Base class for all reusable aspects
A breakpoint aspect
Observer pattern with events
A singleton aspect
A wormhole between call frames
First generation base class for reusable aspects
The Join Point context
The Join Point context for "after" advice code
The Join Point context for "around" advice code
The Join Point context for "before" advice code
The Join Point context for join point static parts
API for determining which events should be hooked
Logical 'and' pointcut
Call pointcut
Cflow pointcut
Pointcut for preventing recursive matching
Pointcut logic role
Logical 'not' pointcut
Logical 'or' pointcut
Function returning without exception
Exception typing pointcut
Pointcut that allows arbitrary Perl code
A pointcut for the run-time wantarray context
Provides
in lib/Aspect/Advice/After.pm
in lib/Aspect/Advice/Around.pm
in lib/Aspect/Advice/Before.pm
in lib/Aspect/Library/Listenable/Event.pm