bc: make keyword POSIXness check more readable
No binary (build failed)
—
(log yok)
| @@ -508,34 +508,35 @@ typedef enum BcLexType { | |
| struct BcLexKeyword { | |
| char name8[8]; | |
| }; | |
| - | #define BC_LEX_KW_ENTRY(a, b, c) \ |
| - | { .name8 = a /*, .len = b, .posix = c*/ } |
| + | #define BC_LEX_KW_ENTRY(a, b) \ |
| + | { .name8 = a /*, .posix = b */ } |
| static const struct BcLexKeyword bc_lex_kws[20] = { | |
| - | BC_LEX_KW_ENTRY("auto" , 4, 1), // 0 |
| - | BC_LEX_KW_ENTRY("break" , 5, 1), // 1 |
| - | BC_LEX_KW_ENTRY("continue", 8, 0), // 2 note: this one has no terminating NUL |
| - | BC_LEX_KW_ENTRY("define" , 6, 1), // 3 |
| - | |
| - | BC_LEX_KW_ENTRY("else" , 4, 0), // 4 |
| - | BC_LEX_KW_ENTRY("for" , 3, 1), // 5 |
| - | BC_LEX_KW_ENTRY("halt" , 4, 0), // 6 |
| - | BC_LEX_KW_ENTRY("ibase" , 5, 1), // 7 |
| - | |
| - | BC_LEX_KW_ENTRY("if" , 2, 1), // 8 |
| - | BC_LEX_KW_ENTRY("last" , 4, 0), // 9 |
| - | BC_LEX_KW_ENTRY("length" , 6, 1), // 10 |
| - | BC_LEX_KW_ENTRY("limits" , 6, 0), // 11 |
| - | |
| - | BC_LEX_KW_ENTRY("obase" , 5, 1), // 12 |
| - | BC_LEX_KW_ENTRY("print" , 5, 0), // 13 |
| - | BC_LEX_KW_ENTRY("quit" , 4, 1), // 14 |
| - | BC_LEX_KW_ENTRY("read" , 4, 0), // 15 |
| - | |
| - | BC_LEX_KW_ENTRY("return" , 6, 1), // 16 |
| - | BC_LEX_KW_ENTRY("scale" , 5, 1), // 17 |
| - | BC_LEX_KW_ENTRY("sqrt" , 4, 1), // 18 |
| - | BC_LEX_KW_ENTRY("while" , 5, 1), // 19 |
| + | BC_LEX_KW_ENTRY("auto" , 1), // 0 |
| + | BC_LEX_KW_ENTRY("break" , 1), // 1 |
| + | BC_LEX_KW_ENTRY("continue", 0), // 2 note: this one has no terminating NUL |
| + | BC_LEX_KW_ENTRY("define" , 1), // 3 |
| + | |
| + | BC_LEX_KW_ENTRY("else" , 0), // 4 |
| + | BC_LEX_KW_ENTRY("for" , 1), // 5 |
| + | BC_LEX_KW_ENTRY("halt" , 0), // 6 |
| + | BC_LEX_KW_ENTRY("ibase" , 1), // 7 |
| + | |
| + | BC_LEX_KW_ENTRY("if" , 1), // 8 |
| + | BC_LEX_KW_ENTRY("last" , 0), // 9 |
| + | BC_LEX_KW_ENTRY("length" , 1), // 10 |
| + | BC_LEX_KW_ENTRY("limits" , 0), // 11 |
| + | |
| + | BC_LEX_KW_ENTRY("obase" , 1), // 12 |
| + | BC_LEX_KW_ENTRY("print" , 0), // 13 |
| + | BC_LEX_KW_ENTRY("quit" , 1), // 14 |
| + | BC_LEX_KW_ENTRY("read" , 0), // 15 |
| + | |
| + | BC_LEX_KW_ENTRY("return" , 1), // 16 |
| + | BC_LEX_KW_ENTRY("scale" , 1), // 17 |
| + | BC_LEX_KW_ENTRY("sqrt" , 1), // 18 |
| + | BC_LEX_KW_ENTRY("while" , 1), // 19 |
| }; | |
| + | #undef BC_LEX_KW_ENTRY |
| enum { | |
| POSIX_KWORD_MASK = 0 | |
| | (1 << 0) | |
| @@ -563,6 +564,7 @@ enum { | |
| | (1 << 18) | |
| | (1 << 19) | |
| }; | |
| + | #define bc_lex_kws_POSIX(i) ((1 << (i)) & POSIX_KWORD_MASK) |
| #endif | |
| struct BcLex; | |
| @@ -2982,7 +2984,7 @@ static BcStatus bc_lex_identifier(BcLex *l) | |
| match: | |
| // buf starts with keyword bc_lex_kws[i] | |
| l->t.t = BC_LEX_KEY_1st_keyword + i; | |
| - | if (!((1 << i) & POSIX_KWORD_MASK)) { |
| + | if (!bc_lex_kws_POSIX(i)) { |
| s = bc_posix_error_fmt("%sthe '%.8s' keyword", "POSIX does not allow ", bc_lex_kws[i].name8); | |
| if (s) return s; | |
| } | |