if (symbol.isInitializer()) break;
    private Code vapply(Tree target, Symbol symbol, Tree[] trees) {        // !!! optimize ?        Code object = object(target);        if (symbol == definitions.BOOLEAN_OR()) {            return Code.Or(object, compute(trees[0]));        }        if (symbol == definitions.BOOLEAN_AND()) {            return Code.And(object, compute(trees[0]));        }        // !!! System.out.println("!!! method: " + Debug.show(symbol));        // !!! System.out.println("!!! -owner: " + Debug.show(symbol.owner()));        Function function = context.lookupFunction(symbol);        if (trees.length == 0            && (symbol.name == plus_N || symbol.name == minus_N)            // !!! the following line does not work. why? (because of erasure?)            // !!! symbol.owner().isSubClass(definitions.DOUBLE_CLASS))            && (                symbol.owner().isSubClass(definitions.INT_CLASS) ||                symbol.owner().isSubClass(definitions.LONG_CLASS) ||                symbol.owner().isSubClass(definitions.FLOAT_CLASS) ||                symbol.owner().isSubClass(definitions.DOUBLE_CLASS)))        {            function = symbol.name == plus_N ? Function.Pos : Function.Neg;        }        switch (target) {        case Select(Super(_, _), _):            Template template = context.lookupTemplate(symbol.owner());            switch (template) {            case Global(ScalaTemplate template_):                function = Function.Global(template_.getMethod(symbol));                break;            case JavaClass(Class clasz):                throw Debug.abort("!!! illegal super on java class", symbol);            default:                throw Debug.abort("illegal template", template);            }        }        Code[] args = compute(trees);        return Code.Invoke(object, function, args, target.pos);    }