switch (fun) { case Ident(_): return make.Goto(tree, fun.symbol(), expression(vargs)); default: return apply(tree, method(fun), targs, vargs);
Symbol symbol = fun.symbol(); ACode[] codes = expression(vargs); if (symbol.isLabel()) return make.Goto(tree, symbol, codes); Type[] types = Tree.typeOf(targs); AFunction function = function(fun); switch (function) { case Method(ACode object, Symbol method, AInvokeStyle style): if (!style.isDynamic()) break; Symbol clasz = method.owner(); Object state = states.get(clasz); if (state == null) break; if (state != Boolean.TRUE) addGeneratorsOf(clasz); Object generator = generators.get(method); if (generator == null) break; return generate((Generator)generator, tree, object, types, vargs);
    private ACode apply(Tree tree, Tree fun, Tree[] targs, Tree[] vargs) {        switch (fun) {        case Ident(_):            return make.Goto(tree, fun.symbol(), expression(vargs));        default:            return apply(tree, method(fun), targs, vargs);        }    }