123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- // copied from \ign\xf\nginx_tx\j9_dep\i0.js
-
- glob_u.cls_dec = glob_u.cls_dec || {
- orig_map:new Map(),
-
- }
-
- glob_u.cls_dec.get_proto_chain = function get_proto_chain(cls){
- var r = {
- arr:[],
- arr_:[],
- }
- var _cls
- if (typeof(cls.__proto__) == "function"){
- _cls = cls.prototype
-
- } else {
- _cls = cls.__proto__
-
- }
- // r.arr.push(_cls)
- while (_cls != Object.prototype){
- if (r.arr.includes(_cls)){
- clog("CLS includes",cls)
- break
- }
- r.arr.push(_cls)
- _cls = _cls.__proto__
- r.arr_.push(_cls)
- }
- return r
-
- }
-
- function save_orig_class(cls){
- var m = glob_u.cls_dec.orig_map
- var _cls = cls.prototype
- if (m.has(_cls)){
- clog("cls already saved",_cls)
- return
- }
- var o = {
- methods:{},
- // methods:{},
- // desc:
- }
-
- m.set(_cls,o)
- o.desc = Object.getOwnPropertyDescriptors(_cls)
- o.proto_chain = glob_u.cls_dec.get_proto_chain(cls)
-
- var k,v
- for ([k,v] of Object.entries(o.desc)){
- o.methods[k] = v.value
- }
- o.inherited_methods = {}
-
-
- }
-
- function dec_class_method_v2(cls,fn_name,fn1=nop,fn2=nop,o={}){
- var _cls = cls.prototype
- clog("j9_",{_cls,cls})
- if (!glob_u.cls_dec.orig_map.has(_cls)){
- save_orig_class(cls)
- }
- var ocls = glob_u.cls_dec.orig_map.get(_cls)
- // var orig_method = ocls.methods[fn_name]
- var orig_method = ocls.methods[fn_name] || ocls.inherited_methods[fn_name]
- if (!orig_method && _cls[fn_name]){
- orig_method = ocls.inherited_methods[fn_name] = _cls[fn_name]
- }
-
- // cls.prototype[fn_name] = _method_dec_v3(orig_method,fn1,fn2,fn_name,cls)
- _cls[fn_name] = _method_dec_v1(orig_method,fn1,fn2,fn_name,_cls,o)
- // cls[fn_name].ao = {orig_method,fn1,fn2,fn_name,cls,o}
-
- }
-
- function dec_class_method_v1(cls,fn_name,fn1=nop,fn2=nop,o={}){
- var ocls = glob_u.cls_dec.orig_map.get(cls)
- // var orig_method = ocls.methods[fn_name]
- var orig_method = ocls.methods[fn_name] || ocls.inherited_methods[fn_name]
- if (!orig_method && cls[fn_name]){
- orig_method = ocls.inherited_methods[fn_name] = cls[fn_name]
- }
-
- // cls.prototype[fn_name] = _method_dec_v3(orig_method,fn1,fn2,fn_name,cls)
- cls[fn_name] = _method_dec_v1(orig_method,fn1,fn2,fn_name,cls,o)
- // cls[fn_name].ao = {orig_method,fn1,fn2,fn_name,cls,o}
-
- }
-
-
- function dec_class_method_v0(cls,fn_name,fn1=nop,fn2=nop,o={}){
- var ocls = glob_u.cls_dec.orig_map.get(cls)
- // var orig_method = ocls.methods[fn_name]
- clog("j9_",ocls)
- var orig_method = ocls.methods[fn_name] || ocls.inherited_methods[fn_name]
- if (!orig_method && cls[fn_name]){
- orig_method = ocls.inherited_methods[fn_name] = cls[fn_name]
- }
-
- // cls.prototype[fn_name] = _method_dec_v3(orig_method,fn1,fn2,fn_name,cls)
- cls[fn_name] = _method_dec_v0(orig_method,fn1,fn2,fn_name,cls,o)
- // cls[fn_name].ao = {orig_method,fn1,fn2,fn_name,cls,o}
-
- }
-
-
- // [ret_flag,ret]
- function _method_dec_v00(fn,fn1,fn2,fn_name,cls,o){
- var args_dec = {fn,fn1,fn2,fn_name,cls,o}
- return function() {
- try {
- // const ret1 = fn1 ? fn1({that:this, args:arguments,args_dec}) : 0
- const ret1 = fn1 ? fn1.call(this,{that:this, args:arguments,args_dec}) : 0
-
- if (ret1?.ret_flag == "ret"){
- return ret1.ret
- }
-
- const ret = fn.apply(this, arguments);
- // const ret2 = fn2 ? fn2({that:this, args:arguments,args_dec,ret,ret1}) : 0
- const ret2 = fn2 ? fn2.call(this,{that:this, args:arguments,args_dec,ret,ret1}) : 0
- if (ret2?.ret_flag == "ret"){
- return ret2.ret
- }
- return ret
-
- } catch (err){
- console.error("_method_dec_v0 ERR:",err)
- return fn.apply(this, arguments);
- }
- }
- }
-
-
- function _method_dec_v0(fn,fn1,fn2,fn_name,cls,o){
- // clog("IDK?",{fn,fn1,fn2,fn_name,cls,o})
- var args_dec = {fn,fn1,fn2,fn_name,cls,o}
- const ret = function() {
- try {
- const ret1 = fn1 ? fn1({that:this, args:arguments,args_dec}) : 0
- // const ret1 = fn1 ? fn1.call(this,{that:this, args:arguments,args_dec}) : 0
-
- if (ret1?.ret_flag == "ret"){
- return ret1.ret
- }
-
- const ret = fn.apply(this, arguments);
- const ret2 = fn2 ? fn2({that:this, args:arguments,args_dec,ret,ret1}) : 0
- // const ret2 = fn2 ? fn2.call(this,{that:this, args:arguments,args_dec,ret,ret1}) : 0
- if (ret2?.ret_flag == "ret"){
- return ret2.ret
- }
- return ret
-
- } catch (err){
- console.error("_method_dec_v0 ERR:",err)
- return fn.apply(this, arguments);
- }
- }
- ret.isDecorator = true
- return ret
- }
-
-
- function _method_dec_v1(fn,fn1,fn2,fn_name,cls,o){
- // clog("IDK?",{fn,fn1,fn2,fn_name,cls,o})
- var args_dec = {fn,fn1,fn2,fn_name,cls,o}
- const ret = function() {
- try {
- const ret1 = fn1 ? fn1.apply(this,[{that:this, args:arguments,args_dec}]) : 0
- // const ret1 = fn1 ? fn1.call(this,{that:this, args:arguments,args_dec}) : 0
-
- if (ret1?.ret_flag == "ret"){
- return ret1.ret
- }
-
- const ret = fn.apply(this, arguments);
- const ret2 = fn2 ? fn2.apply(this,[{that:this, args:arguments,args_dec,ret,ret1}]) : 0
- // const ret2 = fn2 ? fn2.call(this,{that:this, args:arguments,args_dec,ret,ret1}) : 0
- if (ret2?.ret_flag == "ret"){
- return ret2.ret
- }
- return ret
-
- } catch (err){
- console.error("_method_dec_v0 ERR:",err)
- return fn.apply(this, arguments);
- }
- }
- ret.isDecorator = true
- return ret
- }
-
-
-
-
|