Module Name: src Committed By: rillig Date: Sat Oct 30 22:15:51 UTC 2021
Modified Files: src/usr.bin/indent: indent.h lexi.c Log Message: indent: clean up lexical analyzer Use traditional type for small unsigned numbers instead of uint8_t; the required header was not included. Remove assertion for debug mode; lint takes care of ensuring that the enum constants match the length of the names array. Constify a name array. Move the comparison function for bsearch closer to its caller. No functional change. To generate a diff of this commit: cvs rdiff -u -r1.64 -r1.65 src/usr.bin/indent/indent.h cvs rdiff -u -r1.114 -r1.115 src/usr.bin/indent/lexi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/indent/indent.h diff -u src/usr.bin/indent/indent.h:1.64 src/usr.bin/indent/indent.h:1.65 --- src/usr.bin/indent/indent.h:1.64 Sat Oct 30 11:49:38 2021 +++ src/usr.bin/indent/indent.h Sat Oct 30 22:15:51 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: indent.h,v 1.64 2021/10/30 11:49:38 rillig Exp $ */ +/* $NetBSD: indent.h,v 1.65 2021/10/30 22:15:51 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD @@ -69,6 +69,7 @@ __FBSDID("$FreeBSD: head/usr.bin/indent/ #endif #include <stdbool.h> +#include <stdio.h> typedef enum lexer_symbol { lsym_eof, Index: src/usr.bin/indent/lexi.c diff -u src/usr.bin/indent/lexi.c:1.114 src/usr.bin/indent/lexi.c:1.115 --- src/usr.bin/indent/lexi.c:1.114 Fri Oct 29 23:48:50 2021 +++ src/usr.bin/indent/lexi.c Sat Oct 30 22:15:51 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lexi.c,v 1.114 2021/10/29 23:48:50 rillig Exp $ */ +/* $NetBSD: lexi.c,v 1.115 2021/10/30 22:15:51 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -43,14 +43,11 @@ static char sccsid[] = "@(#)lexi.c 8.1 ( #include <sys/cdefs.h> #if defined(__NetBSD__) -__RCSID("$NetBSD: lexi.c,v 1.114 2021/10/29 23:48:50 rillig Exp $"); +__RCSID("$NetBSD: lexi.c,v 1.115 2021/10/30 22:15:51 rillig Exp $"); #elif defined(__FreeBSD__) __FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $"); #endif -#include <sys/param.h> -#include <assert.h> -#include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h> @@ -157,7 +154,7 @@ static const unsigned char lex_number_st }; /* INDENT ON */ -static const uint8_t lex_number_row[] = { +static const unsigned char lex_number_row[] = { ['0'] = 1, ['1'] = 2, ['2'] = 3, ['3'] = 3, ['4'] = 3, ['5'] = 3, ['6'] = 3, ['7'] = 3, @@ -211,12 +208,6 @@ token_add_char(char ch) *token.e++ = ch; } -static int -cmp_keyword_by_name(const void *key, const void *elem) -{ - return strcmp(key, ((const struct keyword *)elem)->name); -} - #ifdef debug static const char * lsym_name(lexer_symbol sym) @@ -255,15 +246,13 @@ lsym_name(lexer_symbol sym) "while", }; - assert(array_length(name) == (int)lsym_while + 1); - return name[sym]; } static const char * kw_name(enum keyword_kind kw) { - static const char *name[] = { + static const char *const name[] = { "0", "offsetof", "sizeof", @@ -376,12 +365,12 @@ lexi_end(lexer_symbol lsym) static void lex_number(void) { - for (uint8_t s = 'A'; s != 'f' && s != 'i' && s != 'u';) { - uint8_t ch = (uint8_t)*inp.s; + for (unsigned char s = 'A'; s != 'f' && s != 'i' && s != 'u';) { + unsigned char ch = (unsigned char)*inp.s; if (ch >= array_length(lex_number_row) || lex_number_row[ch] == 0) break; - uint8_t row = lex_number_row[ch]; + unsigned char row = lex_number_row[ch]; if (lex_number_state[row][s - 'A'] == ' ') { /*- * lex_number_state[0][s - 'A'] now indicates the type: @@ -485,6 +474,12 @@ is_typename(void) return bsearch_typenames(token.s) >= 0; } +static int +cmp_keyword_by_name(const void *key, const void *elem) +{ + return strcmp(key, ((const struct keyword *)elem)->name); +} + /* Read an alphanumeric token into 'token', or return end_of_file. */ static lexer_symbol lexi_alnum(void)