Module Name:    src
Committed By:   rillig
Date:           Tue May 16 07:13:05 UTC 2023

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

Log Message:
indent: move parsing of 'INDENT OFF/ON' comments to the lexer

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.142 -r1.143 src/usr.bin/indent/indent.h
cvs rdiff -u -r1.171 -r1.172 src/usr.bin/indent/io.c
cvs rdiff -u -r1.192 -r1.193 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.142 src/usr.bin/indent/indent.h:1.143
--- src/usr.bin/indent/indent.h:1.142	Mon May 15 22:52:21 2023
+++ src/usr.bin/indent/indent.h	Tue May 16 07:13:05 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.h,v 1.142 2023/05/15 22:52:21 rillig Exp $	*/
+/*	$NetBSD: indent.h,v 1.143 2023/05/16 07:13:05 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -414,6 +414,7 @@ void inp_skip(void);
 char inp_next(void);
 
 lexer_symbol lexi(void);
+void lex_indent_comment(void);
 void diag(int, const char *, ...) __printflike(2, 3);
 void output_line(void);
 void output_line_ff(void);

Index: src/usr.bin/indent/io.c
diff -u src/usr.bin/indent/io.c:1.171 src/usr.bin/indent/io.c:1.172
--- src/usr.bin/indent/io.c:1.171	Mon May 15 22:35:41 2023
+++ src/usr.bin/indent/io.c	Tue May 16 07:13:05 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: io.c,v 1.171 2023/05/15 22:35:41 rillig Exp $	*/
+/*	$NetBSD: io.c,v 1.172 2023/05/16 07:13:05 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: io.c,v 1.171 2023/05/15 22:35:41 rillig Exp $");
+__RCSID("$NetBSD: io.c,v 1.172 2023/05/16 07:13:05 rillig Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -359,62 +359,12 @@ compute_label_indent(void)
     return opt.indent_size * (ps.ind_level - 2);
 }
 
-static void
-skip_blank(const char **pp)
-{
-    while (ch_isblank(**pp))
-	(*pp)++;
-}
-
-static bool
-skip_string(const char **pp, const char *s)
-{
-    size_t len = strlen(s);
-    if (strncmp(*pp, s, len) == 0) {
-	*pp += len;
-	return true;
-    }
-    return false;
-}
-
-static void
-parse_indent_comment(void)
-{
-    bool on;
-
-    const char *p = inp.mem;
-
-    skip_blank(&p);
-    if (!skip_string(&p, "/*"))
-	return;
-    skip_blank(&p);
-    if (!skip_string(&p, "INDENT"))
-	return;
-
-    skip_blank(&p);
-    if (*p == '*' || skip_string(&p, "ON"))
-	on = true;
-    else if (skip_string(&p, "OFF"))
-	on = false;
-    else
-	return;
-
-    skip_blank(&p);
-    if (!skip_string(&p, "*/\n"))
-	return;
-
-    if (lab.len > 0 || code.len > 0 || com.len > 0)
-	output_line();
-
-    inhibit_formatting = !on;
-}
-
 void
 inp_read_line(void)
 {
     inp_read_next_line(input);
 
-    parse_indent_comment();
+    lex_indent_comment();
 
     if (inhibit_formatting)
 	output_range(inp.st, inp.len);

Index: src/usr.bin/indent/lexi.c
diff -u src/usr.bin/indent/lexi.c:1.192 src/usr.bin/indent/lexi.c:1.193
--- src/usr.bin/indent/lexi.c:1.192	Mon May 15 22:52:21 2023
+++ src/usr.bin/indent/lexi.c	Tue May 16 07:13:05 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: lexi.c,v 1.192 2023/05/15 22:52:21 rillig Exp $	*/
+/*	$NetBSD: lexi.c,v 1.193 2023/05/16 07:13:05 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: lexi.c,v 1.192 2023/05/15 22:52:21 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.193 2023/05/16 07:13:05 rillig Exp $");
 
 #include <stdlib.h>
 #include <string.h>
@@ -470,6 +470,56 @@ lex_asterisk_unary(void)
     }
 }
 
+static void
+skip_blank(const char **pp)
+{
+    while (ch_isblank(**pp))
+	(*pp)++;
+}
+
+static bool
+skip_string(const char **pp, const char *s)
+{
+    size_t len = strlen(s);
+    if (strncmp(*pp, s, len) == 0) {
+	*pp += len;
+	return true;
+    }
+    return false;
+}
+
+void
+lex_indent_comment(void)
+{
+    bool on;
+
+    const char *p = inp_line_start();
+
+    skip_blank(&p);
+    if (!skip_string(&p, "/*"))
+	return;
+    skip_blank(&p);
+    if (!skip_string(&p, "INDENT"))
+	return;
+
+    skip_blank(&p);
+    if (*p == '*' || skip_string(&p, "ON"))
+	on = true;
+    else if (skip_string(&p, "OFF"))
+	on = false;
+    else
+	return;
+
+    skip_blank(&p);
+    if (!skip_string(&p, "*/\n"))
+	return;
+
+    if (lab.len > 0 || code.len > 0 || com.len > 0)
+	output_line();
+
+    inhibit_formatting = !on;
+}
+
 /* Reads the next token, placing it in the global variable "token". */
 lexer_symbol
 lexi(void)

Reply via email to