Module Name:    src
Committed By:   rillig
Date:           Sun Jun 25 19:35:45 UTC 2023

Modified Files:
        src/usr.bin/indent: indent.c lexi.c

Log Message:
indent: move cast detection from the lexer to the main processor

It is not the job of the lexer to modify the parser state.


To generate a diff of this commit:
cvs rdiff -u -r1.383 -r1.384 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.235 -r1.236 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.383 src/usr.bin/indent/indent.c:1.384
--- src/usr.bin/indent/indent.c:1.383	Sun Jun 25 19:19:42 2023
+++ src/usr.bin/indent/indent.c	Sun Jun 25 19:35:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.383 2023/06/25 19:19:42 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.384 2023/06/25 19:35:45 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.383 2023/06/25 19:19:42 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.384 2023/06/25 19:35:45 rillig Exp $");
 
 #include <sys/param.h>
 #include <err.h>
@@ -958,6 +958,10 @@ process_type_outside_parentheses(void)
 static void
 process_word(lexer_symbol lsym)
 {
+	if (lsym == lsym_type	/* in parentheses */
+	    && ps.paren.item[ps.paren.len - 1].cast == cast_unknown)
+		ps.paren.item[ps.paren.len - 1].cast = cast_maybe;
+
 	if (ps.in_decl) {
 		if (lsym == lsym_funcname) {
 			ps.in_decl = false;

Index: src/usr.bin/indent/lexi.c
diff -u src/usr.bin/indent/lexi.c:1.235 src/usr.bin/indent/lexi.c:1.236
--- src/usr.bin/indent/lexi.c:1.235	Sun Jun 25 19:29:57 2023
+++ src/usr.bin/indent/lexi.c	Sun Jun 25 19:35:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: lexi.c,v 1.235 2023/06/25 19:29:57 rillig Exp $	*/
+/*	$NetBSD: lexi.c,v 1.236 2023/06/25 19:35:45 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: lexi.c,v 1.235 2023/06/25 19:29:57 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.236 2023/06/25 19:35:45 rillig Exp $");
 
 #include <stdlib.h>
 #include <string.h>
@@ -296,6 +296,8 @@ bsearch_typenames(const char *key)
 static bool
 is_typename(void)
 {
+	if (ps.prev_lsym == lsym_tag)
+		return true;
 	if (opt.auto_typedefs &&
 	    token.len >= 2 && memcmp(token.s + token.len - 2, "_t", 2) == 0)
 		return true;
@@ -335,6 +337,7 @@ cmp_keyword_by_name(const void *key, con
 static bool
 probably_function_definition(const char *p)
 {
+	// TODO: Don't look at characters in comments, see lsym_funcname.c.
 	int paren_level = 0;
 	for (; *p != '\n'; p++) {
 		if (*p == '(')
@@ -409,29 +412,20 @@ lexi_alnum(void)
 	    array_length(keywords), sizeof(keywords[0]), cmp_keyword_by_name);
 	lexer_symbol lsym = lsym_word;
 	if (kw != NULL) {
-		if (kw->lsym == lsym_type)
-			lsym = lsym_type;
+		lsym = kw->lsym;
 		ps.next_unary = true;
-		if (kw->lsym == lsym_tag || kw->lsym == lsym_type)
+		if (lsym == lsym_tag || lsym == lsym_type)
 			goto found_typename;
-		return kw->lsym;
+		return lsym;
 	}
 
 	if (is_typename()) {
 		lsym = lsym_type;
 		ps.next_unary = true;
 found_typename:
-		if (ps.paren.len > 0) {
-			/* inside parentheses: cast, param list, offsetof or
-			 * sizeof */
-			struct paren_level *paren_level =
-			    ps.paren.item + ps.paren.len - 1;
-			if (paren_level->cast == cast_unknown)
-				paren_level->cast = cast_maybe;
-		}
 		if (ps.prev_lsym != lsym_period
 		    && ps.prev_lsym != lsym_unary_op) {
-			if (kw != NULL && kw->lsym == lsym_tag)
+			if (lsym == lsym_tag)
 				return lsym_tag;
 			if (ps.paren.len == 0)
 				return lsym_type;

Reply via email to