[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 52/60] json: Eliminate lexer state IN_WHITESP
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH v2 52/60] json: Eliminate lexer state IN_WHITESPACE, pseudo-token JSON_SKIP |
Date: |
Mon, 20 Aug 2018 13:51:29 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Eric Blake <address@hidden> writes:
> On 08/17/2018 10:05 AM, Markus Armbruster wrote:
>> Bonus: static json_lexer[] loses its unused elements. It shrinks from
>> 8KiB to 4.75KiB for me.
>>
>> Signed-off-by: Markus Armbruster <address@hidden>
>> Reviewed-by: Eric Blake <address@hidden>
>> ---
>
>> ['a' ... 'z'] = IN_KEYWORD,
>> - [' '] = IN_WHITESPACE,
>> - ['\t'] = IN_WHITESPACE,
>> - ['\r'] = IN_WHITESPACE,
>> - ['\n'] = IN_WHITESPACE,
>> + [' '] = IN_START,
>> + ['\t'] = IN_START,
>> + ['\r'] = IN_START,
>> + ['\n'] = IN_START,
>> },
>> [IN_START_INTERPOL]['%'] = IN_INTERPOL,
>> + [IN_START_INTERPOL][' '] = IN_START_INTERPOL,
>> + [IN_START_INTERPOL]['\t'] = IN_START_INTERPOL,
>> + [IN_START_INTERPOL]['\r'] = IN_START_INTERPOL,
>> + [IN_START_INTERPOL]['\n'] = IN_START_INTERPOL,
>
> Hmm, if we did this:
>
> [IN_START_INTERPOL] {
> ['%'] = IN_INTERPOL,
> ['\t'] = IN_START_INTERPOL,
> ...
> }
>
> for similarity with all our other constructs, will gcc remember that
> we've already initialized other members not listed in the clause
> before, or will it mistakenly re-0-initialize the array members not
> mentioned?
Fails make check.
(gdb) p json_lexer[IN_START_INTERPOL]
$1 = "\000\000\000\000\000\000\000\000\000\016\016\000\000\016", '\000'
<repeats 18 times>, "\016\000\000\000\000\035", '\000' <repeats 217 times>
(gdb) p json_lexer[IN_START]
$2 = "\000\000\000\000\000\000\000\000\000\r\r\000\000\r", '\000' <repeats 18
times>,
"\r\000\020\000\000\000\000\022\000\000\000\000\006\033\000\000\023\032\032\032\032\032\032\032\032\032\005",
'\000' <repeats 32 times>, "\003\000\004\000\000\000", '\034' <repeats 26
times>, "\001\000\002", '\000' <repeats 129 times>
- Re: [Qemu-devel] [PATCH v2 28/60] json: Fix \uXXXX for surrogate pairs, (continued)
- [Qemu-devel] [PATCH v2 21/60] json: Reject invalid UTF-8 sequences, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 24/60] json: Accept overlong \xC0\x80 as U+0000 ("modified UTF-8"), Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 13/60] check-qjson: Fix utf8_string() to test all invalid sequences, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 18/60] json: Revamp lexer documentation, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 27/60] json: Reject invalid \uXXXX, fix \u0000, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 36/60] json: Rename token JSON_ESCAPE & friends to JSON_INTERPOL, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 52/60] json: Eliminate lexer state IN_WHITESPACE, pseudo-token JSON_SKIP, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 20/60] check-qjson: Document we expect invalid UTF-8 to be rejected, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 35/60] json: Don't create JSON_ERROR tokens that won't be used, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 37/60] json: Treat unwanted interpolation as lexical error, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 29/60] check-qjson: Fix and enable utf8_string()'s disabled part, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 58/60] json: Keep interpolation state in JSONParserContext, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 60/60] json: Support %% in JSON strings when interpolating, Markus Armbruster, 2018/08/17
- [Qemu-devel] [PATCH v2 26/60] json: Simplify parse_string(), Markus Armbruster, 2018/08/17