block = e.begin_block();
    public FastClassEmitter(ClassVisitor v, String className, Class type) {        super(v);        begin_class(Constants.ACC_PUBLIC, className, FAST_CLASS, null, Constants.SOURCE_FILE);        // constructor        CodeEmitter e = begin_method(Constants.ACC_PUBLIC, CSTRUCT_CLASS, null);        e.load_this();        e.load_args();        e.super_invoke_constructor(CSTRUCT_CLASS);        e.return_value();        e.end_method();        VisibilityPredicate vp = new VisibilityPredicate(type, false);        List methodList = ReflectUtils.addAllMethods(type, new ArrayList());        CollectionUtils.filter(methodList, vp);        CollectionUtils.filter(methodList, new DuplicatesPredicate());        final Method[] methods = (Method[])methodList.toArray(new Method[methodList.size()]);        final Constructor[] constructors = (Constructor[])CollectionUtils.filter(type.getDeclaredConstructors(), vp);                // getIndex(String)        emitIndexBySignature(methods);        // getIndex(String, Class[])        e = begin_method(Constants.ACC_PUBLIC, METHOD_GET_INDEX, null);        e.load_args();        ComplexOps.method_switch(e, methods, new GetIndexCallback(e, methods));        e.end_method();        // getIndex(Class[])        e = begin_method(Constants.ACC_PUBLIC, CONSTRUCTOR_GET_INDEX, null);        e.load_args();        ComplexOps.constructor_switch(e, constructors, new GetIndexCallback(e, constructors));        e.end_method();        // invoke(int, Object, Object[])        e = begin_method(Constants.ACC_PUBLIC, INVOKE, INVOCATION_TARGET_EXCEPTION_ARRAY);        Block block = e.begin_block();        e.load_arg(1);        e.checkcast(Type.getType(type));        e.load_arg(0);        invokeSwitchHelper(e, methods, 2);        block.end();        ComplexOps.wrap_checked_exception(block, INVOCATION_TARGET_EXCEPTION);        e.end_method();        // newInstance(int, Object[])        e = begin_method(Constants.ACC_PUBLIC, NEW_INSTANCE, INVOCATION_TARGET_EXCEPTION_ARRAY);        block = e.begin_block();        e.new_instance(Type.getType(type));        e.dup();        e.load_arg(0);        invokeSwitchHelper(e, constructors, 1);        block.end();        ComplexOps.wrap_checked_exception(block, INVOCATION_TARGET_EXCEPTION);        e.end_method();        end_class();    }