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 
*/
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to