static int codePointBeforeImpl(char[] a, int index, int start) {
        char c2 = a[--index];
        if (isLowSurrogate(c2) && index > start) {
            char c1 = a[--index];
            if (isHighSurrogate(c1)) {
                return toCodePoint(c1, c2);
            }
        }
        return c2;
    }
static int codePointBeforeImpl ( char [ ] a , int index , int start ) { char c2 = a [ -- index ] ; if ( isLowSurrogate ( c2 ) && index > start ) { char c1 = a [ -- index ] ; if ( isHighSurrogate ( c1 ) ) { return toCodePoint ( c1 , c2 ) ; } } return c2 ; }
throws ArrayIndexOutOfBoundsException if index-1 out of bounds