svn commit: r303599 - head/usr.bin/indent
Pedro F. Giffuni
pfg at FreeBSD.org
Sun Jul 31 21:29:12 UTC 2016
Author: pfg
Date: Sun Jul 31 21:29:10 2016
New Revision: 303599
URL: https://svnweb.freebsd.org/changeset/base/303599
Log:
indent(1): Don't newline on cpp lines like #endif unless -bacc is on.
Reference:
https://github.com/pstef/freebsd_indent/commit/01f36f4141c71754b3a73a91886fb425bab0df3e
Differential Revision: https://reviews.freebsd.org/D6966 (Partial)
Submitted by: Piotr Stefaniak
Modified:
head/usr.bin/indent/indent.c
Modified: head/usr.bin/indent/indent.c
==============================================================================
--- head/usr.bin/indent/indent.c Sun Jul 31 21:09:22 2016 (r303598)
+++ head/usr.bin/indent/indent.c Sun Jul 31 21:29:10 2016 (r303599)
@@ -1100,13 +1100,7 @@ check_type:
ps.pcase = false;
}
- if (strncmp(s_lab, "#if", 3) == 0) {
- if (blanklines_around_conditional_compilation) {
- int c;
- prefix_blankline_requested++;
- while ((c = getc(input)) == '\n');
- ungetc(c, input);
- }
+ if (strncmp(s_lab, "#if", 3) == 0) { /* also ifdef, ifndef */
if ((size_t)ifdef_level < nitems(state_stack)) {
match_state[ifdef_level].tos = -1;
state_stack[ifdef_level++] = ps;
@@ -1114,34 +1108,49 @@ check_type:
else
diag2(1, "#if stack overflow");
}
- else if (strncmp(s_lab, "#else", 5) == 0)
+ else if (strncmp(s_lab, "#el", 3) == 0) { /* else, elif */
if (ifdef_level <= 0)
- diag2(1, "Unmatched #else");
+ diag2(1, s_lab[3] == 'i' ? "Unmatched #elif" : "Unmatched #else");
else {
match_state[ifdef_level - 1] = ps;
ps = state_stack[ifdef_level - 1];
}
+ }
else if (strncmp(s_lab, "#endif", 6) == 0) {
if (ifdef_level <= 0)
diag2(1, "Unmatched #endif");
- else {
+ else
ifdef_level--;
-
-#ifdef undef
- /*
- * This match needs to be more intelligent before the
- * message is useful
- */
- if (match_state[ifdef_level].tos >= 0
- && bcmp(&ps, &match_state[ifdef_level], sizeof ps))
- diag2(0, "Syntactically inconsistent #ifdef alternatives");
-#endif
+ } else {
+ struct directives {
+ int size;
+ const char *string;
}
- if (blanklines_around_conditional_compilation) {
- postfix_blankline_requested++;
- n_real_blanklines = 0;
+ recognized[] = {
+ {7, "include"},
+ {6, "define"},
+ {5, "undef"},
+ {4, "line"},
+ {5, "error"},
+ {6, "pragma"}
+ };
+ int d = nitems(recognized);
+ while (--d >= 0)
+ if (strncmp(s_lab + 1, recognized[d].string, recognized[d].size) == 0)
+ break;
+ if (d < 0) {
+ diag2(1, "Unrecognized cpp directive");
+ break;
}
}
+ if (blanklines_around_conditional_compilation) {
+ postfix_blankline_requested++;
+ n_real_blanklines = 0;
+ }
+ else {
+ postfix_blankline_requested = 0;
+ prefix_blankline_requested = 0;
+ }
break; /* subsequent processing of the newline
* character will cause the line to be printed */
More information about the svn-src-head
mailing list