summaryrefslogtreecommitdiff
path: root/js/dojo-1.7.2/dojox/lang/oo/aop.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.7.2/dojox/lang/oo/aop.js')
-rw-r--r--js/dojo-1.7.2/dojox/lang/oo/aop.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/js/dojo-1.7.2/dojox/lang/oo/aop.js b/js/dojo-1.7.2/dojox/lang/oo/aop.js
new file mode 100644
index 0000000..df2f03b
--- /dev/null
+++ b/js/dojo-1.7.2/dojox/lang/oo/aop.js
@@ -0,0 +1,79 @@
+//>>built
+// wrapped by build app
+define("dojox/lang/oo/aop", ["dijit","dojo","dojox","dojo/require!dojox/lang/oo/Decorator,dojox/lang/oo/general"], function(dijit,dojo,dojox){
+dojo.provide("dojox.lang.oo.aop");
+
+dojo.require("dojox.lang.oo.Decorator");
+dojo.require("dojox.lang.oo.general");
+
+(function(){
+ var oo = dojox.lang.oo, md = oo.makeDecorator, oog = oo.general, ooa = oo.aop,
+ isF = dojo.isFunction;
+
+ // five decorators implementing light-weight AOP weaving
+
+ /*=====
+ ooa.before = md(function(name, newValue, oldValue){
+ // summary: creates a "before" advise, by calling new function
+ // before the old one
+
+ // dummy body
+ });
+
+ ooa.around = md(function(name, newValue, oldValue){
+ // summary: creates an "around" advise,
+ // the previous value is passed as a first argument and can be null,
+ // arguments are passed as a second argument
+
+ // dummy body
+ });
+ =====*/
+
+ // reuse existing decorators
+ ooa.before = oog.before;
+ ooa.around = oog.wrap;
+
+ ooa.afterReturning = md(function(name, newValue, oldValue){
+ // summary: creates an "afterReturning" advise,
+ // the returned value is passed as the only argument
+ return isF(oldValue) ?
+ function(){
+ var ret = oldValue.apply(this, arguments);
+ newValue.call(this, ret);
+ return ret;
+ } : function(){ newValue.call(this); };
+ });
+
+ ooa.afterThrowing = md(function(name, newValue, oldValue){
+ // summary: creates an "afterThrowing" advise,
+ // the exception is passed as the only argument
+ return isF(oldValue) ?
+ function(){
+ var ret;
+ try{
+ ret = oldValue.apply(this, arguments);
+ }catch(e){
+ newValue.call(this, e);
+ throw e;
+ }
+ return ret;
+ } : oldValue;
+ });
+
+ ooa.after = md(function(name, newValue, oldValue){
+ // summary: creates an "after" advise,
+ // it takes no arguments
+ return isF(oldValue) ?
+ function(){
+ var ret;
+ try{
+ ret = oldValue.apply(this, arguments);
+ }finally{
+ newValue.call(this);
+ }
+ return ret;
+ } : function(){ newValue.call(this); }
+ });
+})();
+
+});