Techniques that allow the operations of a program to be intercepted and
intervened with are known. These techniques are restricted by the same
limited view of the program's data that is currently available at a base
level of an object or method. Some aspects need access to more
information about the program's data of one or more objects than is
available at the base level. An aspect of aspect-oriented programming
systems, methods and environments examines the results of a computation
at one stage. That aspect affects only subsequent stages of the
computation, so that no circularity exists. Custom flow analyses, whether
local or global, can also be performed at each stage to propagate
non-local information. "Macro" style programming can be reduced or
avoided, as programming can be facilitated in terms of manipulating the
results of various computational stages instead of in terms of
manipulating blocks of code.