157141b15b0d130ff7a43a116b0dfe45e4fbf253
[xynt.git] / xynt-base.js
1 /*
2  * TODO
3  *   super methods caller
4  */
5
6 function Extends(sub)
7 {
8     var proto;
9     thinF = function(){};
10     inh = new thinF();
11     inh.xynt_sup = [];
12     inh.xynt_sup_cl = [];
13
14     console.log("INIZIO EXT");
15
16     var multi = function(sub, super, is_last)
17     {
18         var proto = super.prototype;
19
20         for (var f in proto) {
21             if (f == "xynt_sup" || f == "xynt_sup_cl")
22                 continue;
23
24             console.log("LOOP: "+f);
25             if( f != "constructor" && typeof(proto[f]) == "function" && !is_last){
26                 console.log("M_FU: "+proto['name']+"  F: "+f);
27                 // sub[f] = proto[f];
28                 sub[f] = function(){
29                     console.log("INFU PR: " + proto['name'] + " FUNC: "+f+" THIS: " + this);
30                     return proto[f].apply(this,arguments);
31                 }
32             }
33             else {
34                 console.log("M_PR: "+proto.name+"  A: "+f+" FUN: "+proto[f]);
35                 sub[f] = proto[f];
36             }
37         }
38     }
39
40     for( var i=1; i < arguments.length ; i++){
41         multi(inh, arguments[i], false);
42         inh.xynt_sup.push(arguments[i].prototype);
43         inh.xynt_sup_cl.push(arguments[i]);
44     }
45
46     multi(inh, sub, true);
47     /*
48     inh.superrr = function(cl, method) {
49         console.log("xyx "+cl);
50         // console.log("xx"+arguments[0]);
51     //    return this.xynt_sup_cl[cl].method.apply(this,arguments.slice(2));
52     }
53     */
54     sub.prototype = inh;
55
56     console.log(sub.prototype.xynt_sup);
57     console.log(sub.prototype.xynt_sup_cl);
58 }
59
60 function ExtendsInst(sub)
61 {
62     var proto, cl, args;
63     
64     console.log("INIZIO EXT INST");
65
66     var multi = function(sub, super, is_last)
67     {
68         var proto = super.prototype;
69
70         if (typeof(sub.xynt_sup) == 'undefined')
71             sub.xynt_sup = new Array();
72         if (typeof(sub.xynt_sup_cl) == 'undefined')
73             sub.xynt_sup_cl = new Array();
74
75         for (var f in proto) {
76             if (f == "xynt_sup" || f == "xynt_sup_cl")
77                 continue;
78             
79             if (typeof(sub[f]) != 'undefined')
80                 return false;
81
82             console.log("LOOP: "+f);
83             if( f != "constructor" && typeof(proto[f]) == "function" && !is_last){
84                 console.log("M_FU: "+proto['name']+"  F: "+f);
85                 sub[f] = function(){
86                     console.log("INFU PR: " + proto[f] + " FUNC: "+f+" THIS: " + this);
87                     return proto[f].apply(this, arguments);
88                 }
89             }
90             else {
91                 console.log("M_PR: "+proto.name+"  A: "+f+" FUN: "+proto[f]);
92                 sub[f] = proto[f];
93             }
94         }
95         return true;
96     }
97
98     console.log("POST FUNC");
99
100     for( var i=1; i < arguments.length ; i++){
101         console.log("POST FUNC IN LOOP");
102         cl = arguments[i];
103         if (i+1 < arguments.length && typeof(arguments[i+1]) != 'function') {
104             i++;
105             args = arguments[i];
106         }
107         if (multi(sub, cl, false) == false) {
108             console.log("POST FUNC FALSE 1");
109             return (false);
110         }
111
112         console.log("POST FUNC PRE APPLY");
113         cl.apply(sub, args);
114         console.log("POST FUNC POST APPLY");
115
116         sub.xynt_sup.push(cl.prototype);
117         sub.xynt_sup_cl.push(cl);
118     }
119
120     console.log("FINE EXT INST");
121     return true;
122 }
123
124 function show_class(cl) {
125     console.log("Attributes Class of "+cl);
126     for (f in cl.prototype) {
127         console.log(f+": ["+cl.prototype[f]+"]");
128     }
129     console.log("---");
130 }
131
132 function show_inst(inst) {
133     console.log("Attributes Instance of "+inst);
134     for (f in inst) {
135         console.log(f+": ["+inst[f]+"]");
136     }
137     console.log("---");
138 }
139