assert !isOverloaded() : this; Symbol sym1 = base.lookupNonPrivate(name); if (sym1.kind == Kinds.NONE || (sym1.flags & STATIC) != 0) { return Symbol.NONE; } else {   Type symtype = this.type().derefDef(); Type sym1type = owner.thisType().memberType(sym1).derefDef(); switch (sym1type) { case OverloadedType(Symbol[] alts, Type[] alttypes): for (int i = 0; i < alts.length; i++) { if (symtype.isSubType(alttypes[i].derefDef())) return alts[i]; } return Symbol.NONE; default: if (symtype.isSubType(sym1type)) return sym1; else { if (Global.instance.debug) System.out.println(this + locationString() + " does not override " + sym1 + sym1.locationString() + ", since " + symtype + " !<= " + sym1type); return Symbol.NONE; } } }
return overriddenSymbol(base, false);
    public Symbol overriddenSymbol(Type base) {        assert !isOverloaded() : this;        Symbol sym1 = base.lookupNonPrivate(name);        if (sym1.kind == Kinds.NONE || (sym1.flags & STATIC) != 0) {            return Symbol.NONE;        } else {            //System.out.println(this + ":" + this.type() + locationString() + " overrides? " + sym1 + ":" + owner.thisType().memberType(sym1) + sym1.locationString()); //DEBUG            Type symtype = this.type().derefDef();            Type sym1type = owner.thisType().memberType(sym1).derefDef();            switch (sym1type) {            case OverloadedType(Symbol[] alts, Type[] alttypes):                for (int i = 0; i < alts.length; i++) {                    if (symtype.isSubType(alttypes[i].derefDef()))                         return alts[i];                }                return Symbol.NONE;            default:                if (symtype.isSubType(sym1type)) return sym1;                else {                     if (Global.instance.debug) System.out.println(this + locationString() + " does not override " + sym1 + sym1.locationString() + ", since " + symtype + " !<= " + sym1type);//DEBUG                    return Symbol.NONE;                }            }        }    }