Module Name: src
Committed By: rillig
Date: Sun Nov 7 07:35:06 UTC 2021
Modified Files:
src/usr.bin/indent: indent.c indent.h lexi.c
Log Message:
indent: distinguish between typename in parentheses and other words
This gets rid of two members of parser_state. No functional change for
well-formed programs. The sequence of '++int' or '--size_t' may be
formatted differently than before, but no program is expected to contain
that sequence.
Rename lsym_ident to lsym_word since 'ident' was too specific. This
token type is used for constants and string literals as well. Strictly
speaking, a string literal is not a word, but at least it's better than
before.
To generate a diff of this commit:
cvs rdiff -u -r1.210 -r1.211 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.79 -r1.80 src/usr.bin/indent/indent.h
cvs rdiff -u -r1.133 -r1.134 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.c
diff -u src/usr.bin/indent/indent.c:1.210 src/usr.bin/indent/indent.c:1.211
--- src/usr.bin/indent/indent.c:1.210 Sun Nov 7 07:06:00 2021
+++ src/usr.bin/indent/indent.c Sun Nov 7 07:35:06 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.c,v 1.210 2021/11/07 07:06:00 rillig Exp $ */
+/* $NetBSD: indent.c,v 1.211 2021/11/07 07:35:06 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)indent.c 5.1
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.210 2021/11/07 07:06:00 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.211 2021/11/07 07:35:06 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
#endif
@@ -747,8 +747,8 @@ want_blank_before_lparen(void)
return false;
if (ps.prev_token == lsym_sizeof)
return opt.blank_after_sizeof;
- if (ps.prev_token == lsym_ident || ps.prev_token == lsym_funcname)
- return ps.prev_is_type;
+ if (ps.prev_token == lsym_word || ps.prev_token == lsym_funcname)
+ return false;
return true;
}
@@ -1511,9 +1511,10 @@ main_loop(void)
process_type(&decl_ind, &tabs_to_var);
goto copy_token;
+ case lsym_type_in_parentheses:
case lsym_offsetof:
case lsym_sizeof:
- case lsym_ident:
+ case lsym_word:
case lsym_funcname:
case lsym_return:
process_ident(lsym, decl_ind, tabs_to_var, &spaced_expr,
Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.79 src/usr.bin/indent/indent.h:1.80
--- src/usr.bin/indent/indent.h:1.79 Sun Nov 7 07:06:00 2021
+++ src/usr.bin/indent/indent.h Sun Nov 7 07:35:06 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.h,v 1.79 2021/11/07 07:06:00 rillig Exp $ */
+/* $NetBSD: indent.h,v 1.80 2021/11/07 07:35:06 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -92,12 +92,13 @@ typedef enum lexer_symbol {
lsym_typedef,
lsym_storage_class,
lsym_type_at_paren_level_0,
+ lsym_type_in_parentheses,
lsym_tag, /* 'struct', 'union' or 'enum' */
lsym_case_label, /* 'case' or 'default' */
lsym_string_prefix, /* 'L' */
lsym_sizeof,
lsym_offsetof,
- lsym_ident, /* identifier, constant or string */
+ lsym_word, /* identifier, constant or string */
lsym_funcname,
lsym_do,
lsym_else,
@@ -261,8 +262,6 @@ extern bool inhibit_formatting; /* true
extern struct parser_state {
lexer_symbol prev_token;
- bool prev_is_type;
- bool curr_is_type;
bool curr_col_1; /* whether the current token started in column
* 1 of the unformatted input */
bool next_col_1;
Index: src/usr.bin/indent/lexi.c
diff -u src/usr.bin/indent/lexi.c:1.133 src/usr.bin/indent/lexi.c:1.134
--- src/usr.bin/indent/lexi.c:1.133 Sun Nov 7 07:06:00 2021
+++ src/usr.bin/indent/lexi.c Sun Nov 7 07:35:06 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lexi.c,v 1.133 2021/11/07 07:06:00 rillig Exp $ */
+/* $NetBSD: lexi.c,v 1.134 2021/11/07 07:35:06 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)lexi.c 8.1 (
#include <sys/cdefs.h>
#if defined(__NetBSD__)
-__RCSID("$NetBSD: lexi.c,v 1.133 2021/11/07 07:06:00 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.134 2021/11/07 07:35:06 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $");
#endif
@@ -70,12 +70,12 @@ static const struct keyword {
{"_Imaginary", lsym_type},
{"auto", lsym_storage_class},
{"bool", lsym_type},
- {"break", lsym_ident},
+ {"break", lsym_word},
{"case", lsym_case_label},
{"char", lsym_type},
{"complex", lsym_type},
{"const", lsym_type},
- {"continue", lsym_ident},
+ {"continue", lsym_word},
{"default", lsym_case_label},
{"do", lsym_do},
{"double", lsym_type},
@@ -84,15 +84,15 @@ static const struct keyword {
{"extern", lsym_storage_class},
{"float", lsym_type},
{"for", lsym_for},
- {"goto", lsym_ident},
+ {"goto", lsym_word},
{"if", lsym_if},
{"imaginary", lsym_type},
- {"inline", lsym_ident},
+ {"inline", lsym_word},
{"int", lsym_type},
{"long", lsym_type},
{"offsetof", lsym_offsetof},
{"register", lsym_storage_class},
- {"restrict", lsym_ident},
+ {"restrict", lsym_word},
{"return", lsym_return},
{"short", lsym_type},
{"signed", lsym_type},
@@ -239,12 +239,13 @@ lsym_name(lexer_symbol sym)
"typedef",
"storage_class",
"type_at_paren_level_0",
+ "type_in_parentheses",
"tag",
"case_label",
"string_prefix",
"sizeof",
"offsetof",
- "ident",
+ "word",
"funcname",
"do",
"else",
@@ -284,8 +285,7 @@ debug_lexi(lexer_symbol lsym)
static struct parser_state prev_ps;
debug_println("");
- debug_printf("line %d: %s%s", line_no, lsym_name(lsym),
- ps.curr_is_type ? " type" : "");
+ debug_printf("line %d: %s", line_no, lsym_name(lsym));
debug_vis_range(" \"", token.s, token.e, "\"\n");
debug_print_buf("label", &lab);
@@ -293,7 +293,6 @@ debug_lexi(lexer_symbol lsym)
debug_print_buf("comment", &com);
debug_println(" ps.prev_token = %s", lsym_name(ps.prev_token));
- debug_ps_bool(prev_is_type);
debug_ps_bool(next_col_1);
debug_ps_bool(curr_col_1);
debug_ps_bool(next_unary);
@@ -499,15 +498,16 @@ lexi_alnum(void)
const struct keyword *kw = bsearch(token.s, keywords,
array_length(keywords), sizeof(keywords[0]), cmp_keyword_by_name);
+ bool is_type = false;
if (kw == NULL) {
if (is_typename()) {
- ps.curr_is_type = true;
+ is_type = true;
ps.next_unary = true;
goto found_typename;
}
} else { /* we have a keyword */
- ps.curr_is_type = kw->lsym == lsym_type;
+ is_type = kw->lsym == lsym_type;
ps.next_unary = true;
if (kw->lsym != lsym_tag && kw->lsym != lsym_type)
return kw->lsym;
@@ -539,12 +539,11 @@ found_typename:
no_function_definition:;
} else if (probably_typename()) {
- ps.curr_is_type = true;
ps.next_unary = true;
return lsym_type_at_paren_level_0;
}
- return lsym_ident; /* the ident is not in the list */
+ return is_type ? lsym_type_in_parentheses : lsym_word;
}
/* Reads the next token, placing it in the global variable "token". */
@@ -554,8 +553,6 @@ lexi(void)
token.e = token.s;
ps.curr_col_1 = ps.next_col_1;
ps.next_col_1 = false;
- ps.prev_is_type = ps.curr_is_type;
- ps.curr_is_type = false;
while (ch_isblank(*inp.s)) {
ps.curr_col_1 = false;
@@ -587,7 +584,7 @@ lexi(void)
case '\'':
case '"':
lex_char_or_string();
- lsym = lsym_ident;
+ lsym = lsym_word;
break;
case '(':
@@ -654,7 +651,7 @@ lexi(void)
if (*inp.s == token.e[-1]) { /* ++, -- */
*token.e++ = *inp.s++;
- if (ps.prev_token == lsym_ident ||
+ if (ps.prev_token == lsym_word ||
ps.prev_token == lsym_rparen_or_rbracket) {
lsym = ps.next_unary ? lsym_unary_op : lsym_postfix_op;
unary_delim = false;