Module Name: src Committed By: rillig Date: Thu Mar 11 21:47:36 UTC 2021
Modified Files: src/usr.bin/indent: lexi.c Log Message: indent: merge duplicate code for reading from the input buffer No functional change. To generate a diff of this commit: cvs rdiff -u -r1.31 -r1.32 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/lexi.c diff -u src/usr.bin/indent/lexi.c:1.31 src/usr.bin/indent/lexi.c:1.32 --- src/usr.bin/indent/lexi.c:1.31 Tue Mar 9 19:23:08 2021 +++ src/usr.bin/indent/lexi.c Thu Mar 11 21:47:36 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lexi.c,v 1.31 2021/03/09 19:23:08 rillig Exp $ */ +/* $NetBSD: lexi.c,v 1.32 2021/03/11 21:47:36 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -46,7 +46,7 @@ static char sccsid[] = "@(#)lexi.c 8.1 ( #include <sys/cdefs.h> #ifndef lint #if defined(__NetBSD__) -__RCSID("$NetBSD: lexi.c,v 1.31 2021/03/09 19:23:08 rillig Exp $"); +__RCSID("$NetBSD: lexi.c,v 1.32 2021/03/11 21:47:36 rillig Exp $"); #elif defined(__FreeBSD__) __FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $"); #endif @@ -171,6 +171,28 @@ static char const *table[] = { [0] = "uuiifuufiuuiiuiiiiiuiuuuuu", }; +static char +inbuf_peek(void) +{ + return *buf_ptr; +} + +static void +inbuf_skip(void) +{ + buf_ptr++; + if (buf_ptr >= buf_end) + fill_buffer(); +} + +static char +inbuf_next(void) +{ + char ch = inbuf_peek(); + inbuf_skip(); + return ch; +} + static void check_size_token(size_t desired_size) { @@ -273,8 +295,7 @@ lexi(struct parser_state *state) while (*buf_ptr == ' ' || *buf_ptr == '\t') { /* get rid of blanks */ state->col_1 = false; /* leading blanks imply token is not in column * 1 */ - if (++buf_ptr >= buf_end) - fill_buffer(); + inbuf_skip(); } /* Scan an alphanumeric token */ @@ -300,9 +321,7 @@ lexi(struct parser_state *state) } s = table[i][s - 'A']; check_size_token(1); - *e_token++ = *buf_ptr++; - if (buf_ptr >= buf_end) - fill_buffer(); + *e_token++ = inbuf_next(); } /* s now indicates the type: f(loating), i(integer), u(nknown) */ } @@ -320,10 +339,7 @@ lexi(struct parser_state *state) break; } check_size_token(1); - /* copy it over */ - *e_token++ = *buf_ptr++; - if (buf_ptr >= buf_end) - fill_buffer(); + *e_token++ = inbuf_next(); } *e_token = '\0'; @@ -331,10 +347,8 @@ lexi(struct parser_state *state) (*buf_ptr == '"' || *buf_ptr == '\'')) return lexi_end(string_prefix); - while (*buf_ptr == ' ' || *buf_ptr == '\t') { /* get rid of blanks */ - if (++buf_ptr >= buf_end) - fill_buffer(); - } + while (*buf_ptr == ' ' || *buf_ptr == '\t') /* get rid of blanks */ + inbuf_next(); state->keyword = rw_0; if (state->last_token == keyword_struct_union_enum && !state->p_l_follow) { @@ -440,11 +454,9 @@ lexi(struct parser_state *state) /* Scan a non-alphanumeric token */ check_size_token(3); /* things like "<<=" */ - *e_token++ = *buf_ptr; /* if it is only a one-character token, it is + *e_token++ = inbuf_next(); /* if it is only a one-character token, it is * moved here */ *e_token = '\0'; - if (++buf_ptr >= buf_end) - fill_buffer(); switch (*token) { case '\n': @@ -468,17 +480,13 @@ lexi(struct parser_state *state) goto stop_lit; } check_size_token(2); - *e_token = *buf_ptr++; - if (buf_ptr >= buf_end) - fill_buffer(); + *e_token = inbuf_next(); if (*e_token == '\\') { /* if escape, copy extra char */ if (*buf_ptr == '\n') /* check for escaped newline */ ++line_no; - *++e_token = *buf_ptr++; + *++e_token = inbuf_next(); ++e_token; /* we must increment this again because we * copied two chars */ - if (buf_ptr >= buf_end) - fill_buffer(); } else break; /* we copied one character */ @@ -596,11 +604,8 @@ stop_lit: case '>': case '<': case '!': /* ops like <, <<, <=, !=, etc */ - if (*buf_ptr == '>' || *buf_ptr == '<' || *buf_ptr == '=') { - *e_token++ = *buf_ptr; - if (++buf_ptr >= buf_end) - fill_buffer(); - } + if (*buf_ptr == '>' || *buf_ptr == '<' || *buf_ptr == '=') + *e_token++ = inbuf_next(); if (*buf_ptr == '=') *e_token++ = *buf_ptr++; code = (state->last_u_d ? unary_op : binary_op); @@ -620,8 +625,7 @@ stop_lit: check_size_token(1); *e_token++ = *buf_ptr; } - if (++buf_ptr >= buf_end) - fill_buffer(); + inbuf_skip(); } if (ps.in_decl) { char *tp = buf_ptr; @@ -640,10 +644,7 @@ stop_lit: default: if (token[0] == '/' && (*buf_ptr == '*' || *buf_ptr == '/')) { /* it is start of comment */ - *e_token++ = *buf_ptr; - - if (++buf_ptr >= buf_end) - fill_buffer(); + *e_token++ = inbuf_next(); code = comment; unary_delim = state->last_u_d; @@ -654,9 +655,7 @@ stop_lit: * handle ||, &&, etc, and also things as in int *****i */ check_size_token(1); - *e_token++ = *buf_ptr; - if (++buf_ptr >= buf_end) - fill_buffer(); + *e_token++ = inbuf_next(); } code = (state->last_u_d ? unary_op : binary_op); unary_delim = true;