protected CCMap cc_obj() throws Exception {
        if (!tk_m('{')) {
            throw syntax_error("XOObject exception '{' ");
        }
        CCMap xo = new CCMap();
        for (;;) {
            tk_csp();
            if (tk_m('}')) {
                return xo;
            }
            String key = cc_next(idPattern).toString();
            tk_csp();
            if (!tk_m(':')) {
                throw syntax_error("XOObject expected ':' ");
            }
            tk_csp();
            xo.put(key, cc_next(valuePattern));
            tk_csp();
            if (tk_m('}')) {
                return xo;
            }
            if (!tk_m(',')) {
                throw syntax_error("XOObject expected ( ',' | '}' ) ");
            }
        }
    }