global.log("proxy " + fv + " of " + fv.owner() + " in " + LambdaLift.asFunction(owner));
global.log("proxy " + fv + " of " + fv.owner() + " in " + LambdaLift.enclFun(owner));
    Symbol proxy(Symbol fv, Symbol owner) {        if (global.debug)             global.log("proxy " + fv + " of " + fv.owner() + " in " + LambdaLift.asFunction(owner));        Symbol o = owner;        while (o.kind != NONE) {            if (global.debug)                 global.log("looking in " +  LambdaLift.asFunction(o) + " " +                     ArrayApply.toString(o.typeParams()));            Symbol fowner = LambdaLift.asFunction(o);            if (fowner.isMethod()) {                if (fv.owner() == fowner) return fv;                Type ft = (fowner.isUpdatedAt(this)) ? fowner.nextType()                    : fowner.type();                Symbol[] ownerparams = fv.isType() ? ft.typeParams()                     : ft.firstParams();                for (int i = 0; i < ownerparams.length; i++) {                    if (ownerparams[i].name == fv.name)                        return ownerparams[i];                }            }            assert o.owner() != o;            o = o.owner();        }        return fv;        //throw new ApplicationError("proxy " + fv + " in " + owner);    }