-/*
- * TODO
- * super methods caller
- */
function Extends(sub)
{
inh.xynt_sup = [];
inh.xynt_sup_cl = [];
- console.log("INIZIO EXT");
+ console.log("EXT START");
var multi = function(sub, super, is_last)
{
console.log("LOOP: "+f);
if( f != "constructor" && typeof(proto[f]) == "function" && !is_last){
- console.log("M_FU: "+proto['name']+" F: "+f);
+ console.log("M_FU: "+proto[f]+" F: "+f);
// sub[f] = proto[f];
- sub[f] = function(){
- console.log("INFU PR: " + proto['name'] + " FUNC: "+f+" THIS: " + this);
+ sub[f] = function() {
+ // console.log("INFU PR: " + proto[f] + " FUNC: "+f+" THIS: " + this);
+ console.log("SIMPLE LOG");
return proto[f].apply(this,arguments);
}
}
}
multi(inh, sub, true);
+
+
+ inh.callSuper = function(fnc){
+ var len = this.xynt_sup_cl.length;
+ for ( var i=0 ; i<len ; i++) {
+ var super = this.xynt_sup_cl[i];
+ if( (fnc in super.prototype) && (typeof super.prototype[fnc] == "function") ){
+ return super.prototype[fnc].apply(this,[].splice.call(arguments,1));
+ }
+ }
+ return null;
+ }
+
/*
inh.superrr = function(cl, method) {
console.log("xyx "+cl);
*/
sub.prototype = inh;
- console.log(sub.prototype.xynt_sup);
- console.log(sub.prototype.xynt_sup_cl);
+ console.log("EXT FINISH");
}
function ExtendsInst(sub)
{
var proto = super.prototype;
+ var single = function(sub, fun) {
+ var cur_fun = fun;
+
+ sub[cur_fun] = function(){
+ // console.log("INFU PR: " + proto[f] + " FUNC: "+f+" THIS: " + this);
+ console.log("SIMPLE LOG INST: "+cur_fun);
+ console.log(proto[cur_fun]);
+ console.log(sub);
+ console.log(arguments);
+ return proto[cur_fun].apply(this, arguments);
+ }
+ };
+
if (typeof(sub.xynt_sup) == 'undefined')
sub.xynt_sup = new Array();
if (typeof(sub.xynt_sup_cl) == 'undefined')
sub.xynt_sup_cl = new Array();
for (var f in proto) {
+ /* NOTE: this allow potentially TO BREAK by the extending class
+ if we disable it we don't have a reason to keep the callSuper function,
+ I need to meditate on it */
if (f == "xynt_sup" || f == "xynt_sup_cl")
continue;
- if (typeof(sub[f]) != 'undefined')
+ console.log("ExtensInst::multi: "+f+" type: "+typeof(sub[f]));
+ if (typeof(sub[f]) != 'undefined') {
+ if (typeof(sub[f]) == typeof(proto[f]))
+ continue;
+ console.log("MULTI: false1");
return false;
+ }
console.log("LOOP: "+f);
if( f != "constructor" && typeof(proto[f]) == "function" && !is_last){
- console.log("M_FU: "+proto['name']+" F: "+f);
- sub[f] = function(){
- console.log("INFU PR: " + proto[f] + " FUNC: "+f+" THIS: " + this);
- return proto[f].apply(this, arguments);
- }
+ console.log("M_FU: "+proto[f]+" F: "+f);
+ single(sub, f);
}
else {
console.log("M_PR: "+proto.name+" A: "+f+" FUN: "+proto[f]);
}
}
return true;
- }
+ };
console.log("POST FUNC");
sub.xynt_sup_cl.push(cl);
}
+ sub.callSuper = function(fnc){
+ var len = this.xynt_sup_cl.length;
+ for ( var i=0 ; i<len ; i++) {
+ var super = this.xynt_sup_cl[i];
+ if( (fnc in super.prototype) && (typeof super.prototype[fnc] == "function") ){
+ return super.prototype[fnc].apply(this,[].splice.call(arguments,1));
+ }
+ }
+ return null;
+ }
+
console.log("FINE EXT INST");
return true;
}
function show_class(cl) {
console.log("Attributes Class of "+cl);
for (f in cl.prototype) {
- console.log(f+": ["+cl.prototype[f]+"]");
+ console.log(f+"-v");
+ console.log(cl.prototype[f]);
}
console.log("---");
}
function show_inst(inst) {
console.log("Attributes Instance of "+inst);
for (f in inst) {
- console.log(f+": ["+inst[f]+"]");
+ console.log(f+"-v");
+ // console.log(inst[f]);
}
console.log("---");
}