The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#define FAILUTF8(want)					\
    parser->bad_beginning = startofutf8string - 1;	\
    parser->bad_type = json_string;			\
    parser->bad_byte = parser->end - 1;			\
    parser->expected = want;				\
    parser->error = json_error_unexpected_character;	\
    failbadinput(parser)

 byte_last_80_bf:

    switch (NEXTBYTE) {

    case BYTE_80_BF:
	ADDBYTE;
	goto string_start;
    default:
	FAILUTF8(XBYTES_80_BF);
    }

 byte_penultimate_80_bf:

    switch (NEXTBYTE) {

    case BYTE_80_BF:
	ADDBYTE;
	goto byte_last_80_bf;
    default:
	FAILUTF8(XBYTES_80_BF);
    }

 byte24_90_bf:

    switch (NEXTBYTE) {

    case BYTE_90_BF:
	ADDBYTE;
	goto byte_penultimate_80_bf;
    default:
	FAILUTF8(XBYTES_90_BF);
    }

 byte23_80_9f:

    switch (NEXTBYTE) {

    case BYTE_80_9F:
	ADDBYTE;
	goto byte_last_80_bf;
    default:
	FAILUTF8(XBYTES_80_9F);
    }

 byte23_a0_bf:

    switch (NEXTBYTE) {

    case BYTE_A0_BF:
	ADDBYTE;
	goto byte_last_80_bf;
    default:
	FAILUTF8(XBYTES_A0_BF);
    }

 byte24_80_bf:

    switch (NEXTBYTE) {

    case BYTE_80_BF:
	ADDBYTE;
	goto byte_penultimate_80_bf;
    default:
	FAILUTF8(XBYTES_80_BF);
    }

 byte24_80_8f:

    switch (NEXTBYTE) {

    case BYTE_80_8F:
	ADDBYTE;
	goto byte_penultimate_80_bf;
    default:
	FAILUTF8(XBYTES_80_8F);
    }