process_switch(hashCodes, new ProcessSwitchCallback() {
process_switch(getSwitchKeys(buckets), new ProcessSwitchCallback() {
    private void string_switch_hash(final String[] strings,                                    final StringSwitchCallback callback) throws Exception {        final Map buckets = bucket(Arrays.asList(strings), new Indexer() {            public int index(Object value) {                return value.hashCode();            }        });        int[] hashCodes = getSwitchKeys(buckets);        final Label def = make_label();        final Label end = make_label();        dup();        invoke(MethodConstants.HASH_CODE);        process_switch(hashCodes, new ProcessSwitchCallback() {            public void processCase(int key, Label ignore_end) throws Exception {                List bucket = (List)buckets.get(new Integer(key));                Label next = null;                for (Iterator it = bucket.iterator(); it.hasNext();) {                    String string = (String)it.next();                    if (next != null) {                        mark(next);                    }                    if (it.hasNext()) {                        dup();                    }                    push(string);                    invoke(MethodConstants.EQUALS);                    if (it.hasNext()) {                        ifeq(next = make_label());                        pop();                    } else {                        ifeq(def);                    }                    callback.processCase(string, end);                }            }            public void processDefault() {                pop();            }        });        mark(def);        callback.processDefault();        mark(end);    }