    /*
     *  call-seq:
     *     token.cmp(other_token) -> bool
     *
     *  Used to compare two tokens. Token is extended by Comparable so you can
     *  also use +<+, +>+, +<=+, +>=+ etc. to compare tokens.
     *
     *  Tokens are sorted by the position in the text at which they occur, ie
     *  the start offset. If two tokens have the same start offset, (see
     *  pos_inc=) then, they are sorted by the end offset and then
     *  lexically by the token text.
     */
    static VALUE
    frb_token_cmp(VALUE self, VALUE rother)
    {
        RToken *token, *other;
        int cmp;
        GET_TK(token, self);
        GET_TK(other, rother);
        if (token->start > other->start) {
            cmp = 1;
        } else if (token->start < other->start) {
            cmp = -1;
        } else {
            if (token->end > other->end) {
                cmp = 1;
            } else if (token->end < other->end) {
                cmp = -1;
            } else {
                cmp = strcmp(rs2s(token->text), rs2s(other->text));
            }
        }
        return INT2FIX(cmp);
    }