Module Name: src
Committed By: rillig
Date: Thu Nov 25 17:46:51 UTC 2021
Modified Files:
src/tests/usr.bin/indent: lsym_binary_op.c
src/usr.bin/indent: lexi.c
Log Message:
indent: extract lex_asterisk_unary into separate function
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/indent/lsym_binary_op.c
cvs rdiff -u -r1.160 -r1.161 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/tests/usr.bin/indent/lsym_binary_op.c
diff -u src/tests/usr.bin/indent/lsym_binary_op.c:1.1 src/tests/usr.bin/indent/lsym_binary_op.c:1.2
--- src/tests/usr.bin/indent/lsym_binary_op.c:1.1 Thu Nov 18 21:19:19 2021
+++ src/tests/usr.bin/indent/lsym_binary_op.c Thu Nov 25 17:46:51 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_binary_op.c,v 1.1 2021/11/18 21:19:19 rillig Exp $ */
+/* $NetBSD: lsym_binary_op.c,v 1.2 2021/11/25 17:46:51 rillig Exp $ */
/* $FreeBSD$ */
/*
@@ -27,3 +27,16 @@
#indent end
#indent run-equals-input
+
+
+/*
+ * If a '*' is immediately followed by another '*', they still form separate
+ * operators. The first is a binary operator, the second is unary.
+ */
+#indent input
+int var = expr**ptr;
+#indent end
+
+#indent run -di0
+int var = expr * *ptr;
+#indent end
Index: src/usr.bin/indent/lexi.c
diff -u src/usr.bin/indent/lexi.c:1.160 src/usr.bin/indent/lexi.c:1.161
--- src/usr.bin/indent/lexi.c:1.160 Thu Nov 25 17:35:46 2021
+++ src/usr.bin/indent/lexi.c Thu Nov 25 17:46:51 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: lexi.c,v 1.160 2021/11/25 17:35:46 rillig Exp $ */
+/* $NetBSD: lexi.c,v 1.161 2021/11/25 17:46:51 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.160 2021/11/25 17:35:46 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.161 2021/11/25 17:46:51 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $");
#endif
@@ -552,6 +552,34 @@ found_typename:
return is_type ? lsym_type_in_parentheses : lsym_word;
}
+static void
+lex_asterisk_unary(void)
+{
+ while (inp_peek() == '*' || ch_isspace(inp_peek())) {
+ if (inp_peek() == '*')
+ token_add_char('*');
+ inp_skip();
+ }
+
+ if (ps.in_decl) {
+ const char *tp = inp_p(), *e = inp_line_end();
+
+ while (tp < e) {
+ if (ch_isspace(*tp))
+ tp++;
+ else if (is_identifier_start(*tp)) {
+ tp++;
+ while (tp < e && is_identifier_part(*tp))
+ tp++;
+ } else
+ break;
+ }
+
+ if (tp < e && *tp == '(')
+ ps.is_function_definition = true;
+ }
+}
+
/* Reads the next token, placing it in the global variable "token". */
lexer_symbol
lexi(void)
@@ -675,30 +703,7 @@ lexi(void)
break;
}
- while (inp_peek() == '*' || ch_isspace(inp_peek())) {
- if (inp_peek() == '*')
- token_add_char('*');
- inp_skip();
- }
-
- if (ps.in_decl) {
- const char *tp = inp_p(), *e = inp_line_end();
-
- while (tp < e) {
- if (ch_isspace(*tp))
- tp++;
- else if (is_identifier_start(*tp)) {
- tp++;
- while (tp < e && is_identifier_part(*tp))
- tp++;
- } else
- break;
- }
-
- if (tp < e && *tp == '(')
- ps.is_function_definition = true;
- }
-
+ lex_asterisk_unary();
lsym = lsym_unary_op;
next_unary = true;
break;