Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/indent indent: use named constants for the different...



details:   https://anonhg.NetBSD.org/src/rev/1a6b40d97241
branches:  trunk
changeset: 953395:1a6b40d97241
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Mar 07 20:30:48 2021 +0000

description:
indent: use named constants for the different types of keywords

This reduces the magic numbers in the code.  Most of these had their
designated constant name written in a nearby comment anyway.

The one instance where arithmetic was performed on this new enum type
(in indent.c) was a bit tricky to understand.

The combination rw_continue_or_inline_or_restrict looks strange, the
'continue' should intuitively belong to the other control flow keywords
in rw_break_or_goto_or_return.

No functional change.

diffstat:

 usr.bin/indent/indent.c       |   12 +--
 usr.bin/indent/indent_codes.h |   14 ++--
 usr.bin/indent/indent_globs.h |   21 ++++++-
 usr.bin/indent/lexi.c         |  118 ++++++++++++++++++++---------------------
 4 files changed, 89 insertions(+), 76 deletions(-)

diffs (truncated from 305 to 300 lines):

diff -r c4027161eeac -r 1a6b40d97241 usr.bin/indent/indent.c
--- a/usr.bin/indent/indent.c   Sun Mar 07 20:06:48 2021 +0000
+++ b/usr.bin/indent/indent.c   Sun Mar 07 20:30:48 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: indent.c,v 1.30 2021/03/07 10:56:18 rillig Exp $       */
+/*     $NetBSD: indent.c,v 1.31 2021/03/07 20:30:48 rillig Exp $       */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -46,7 +46,7 @@
 #include <sys/cdefs.h>
 #ifndef lint
 #if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.30 2021/03/07 10:56:18 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.31 2021/03/07 20:30:48 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
 #endif
@@ -642,10 +642,8 @@
            else if (ps.want_blank &&
                    ((ps.last_token != ident && ps.last_token != funcname) ||
                    opt.proc_calls_space ||
-                   /* offsetof (1) is never allowed a space; sizeof (2) gets
-                    * one iff -bs; all other keywords (>2) always get a space
-                    * before lparen */
-                       ps.keyword + opt.Bill_Shannon > 2))
+                   (ps.keyword == rw_sizeof ? opt.Bill_Shannon :
+                   ps.keyword != rw_0 && ps.keyword != rw_offsetof)))
                *e_code++ = ' ';
            ps.want_blank = false;
            *e_code++ = token[0];
@@ -664,7 +662,7 @@
                                         * initialization */
            }
            /* parenthesized type following sizeof or offsetof is not a cast */
-           if (ps.keyword == 1 || ps.keyword == 2)
+           if (ps.keyword == rw_offsetof || ps.keyword == rw_sizeof)
                ps.not_cast_mask |= 1 << ps.p_l_follow;
            break;
 
diff -r c4027161eeac -r 1a6b40d97241 usr.bin/indent/indent_codes.h
--- a/usr.bin/indent/indent_codes.h     Sun Mar 07 20:06:48 2021 +0000
+++ b/usr.bin/indent/indent_codes.h     Sun Mar 07 20:30:48 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: indent_codes.h,v 1.7 2021/03/07 10:56:18 rillig Exp $  */
+/*     $NetBSD: indent_codes.h,v 1.8 2021/03/07 20:30:48 rillig Exp $  */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -43,12 +43,12 @@
 typedef enum token_type {
     end_of_file,
     newline,
-    lparen,
-    rparen,
-    unary_op,
-    binary_op,
-    postop,
-    question,
+    lparen,                    /* '(' or '[' */
+    rparen,                    /* ')' or ']' */
+    unary_op,                  /* e.g. '+' or '&' */
+    binary_op,                 /* e.g. '<<' or '+' or '&&' or '/=' */
+    postop,                    /* trailing '++' or '--' */
+    question,                  /* the '?' from a '?:' expression */
     casestmt,
     colon,
     semicolon,
diff -r c4027161eeac -r 1a6b40d97241 usr.bin/indent/indent_globs.h
--- a/usr.bin/indent/indent_globs.h     Sun Mar 07 20:06:48 2021 +0000
+++ b/usr.bin/indent/indent_globs.h     Sun Mar 07 20:30:48 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: indent_globs.h,v 1.13 2021/03/07 10:56:18 rillig Exp $ */
+/*     $NetBSD: indent_globs.h,v 1.14 2021/03/07 20:30:48 rillig Exp $ */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -221,6 +221,23 @@
                                 * are printed */
 } opt;
 
+enum rwcode {
+    rw_0,
+    rw_offsetof,
+    rw_sizeof,
+    rw_struct_or_union_or_enum,
+    rw_type,
+    rw_for_or_if_or_while,
+    rw_do_or_else,
+    rw_switch,
+    rw_case_or_default,
+    rw_break_or_goto_or_return,
+    rw_storage_class,
+    rw_typedef,
+    rw_continue_or_inline_or_restrict
+};
+
+
 extern int         found_err;
 extern int         n_real_blanklines;
 extern int         prefix_blankline_requested;
@@ -308,7 +325,7 @@
     int         want_blank;    /* set to true when the following token should
                                 * be prefixed by a blank. (Said prefixing is
                                 * ignored in some cases.) */
-    int         keyword;       /* the type of a keyword or 0 */
+    enum rwcode keyword;       /* the type of a keyword or 0 */
     int         dumped_decl_indent;
     int         in_parameter_declaration;
     int         tos;           /* pointer to top of stack */
diff -r c4027161eeac -r 1a6b40d97241 usr.bin/indent/lexi.c
--- a/usr.bin/indent/lexi.c     Sun Mar 07 20:06:48 2021 +0000
+++ b/usr.bin/indent/lexi.c     Sun Mar 07 20:30:48 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lexi.c,v 1.20 2021/03/07 11:32:05 rillig Exp $ */
+/*     $NetBSD: lexi.c,v 1.21 2021/03/07 20:30:48 rillig Exp $ */
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -46,7 +46,7 @@
 #include <sys/cdefs.h>
 #ifndef lint
 #if defined(__NetBSD__)
-__RCSID("$NetBSD: lexi.c,v 1.20 2021/03/07 11:32:05 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.21 2021/03/07 20:30:48 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $");
 #endif
@@ -70,7 +70,7 @@
 
 struct templ {
     const char *rwd;
-    int         rwcode;
+    enum rwcode rwcode;
 };
 
 /*
@@ -79,48 +79,48 @@
  */
 struct templ specials[] =
 {
-    {"_Bool", 4},
-    {"_Complex", 4},
-    {"_Imaginary", 4},
-    {"auto", 10},
-    {"bool", 4},
-    {"break", 9},
-    {"case", 8},
-    {"char", 4},
-    {"complex", 4},
-    {"const", 4},
-    {"continue", 12},
-    {"default", 8},
-    {"do", 6},
-    {"double", 4},
-    {"else", 6},
-    {"enum", 3},
-    {"extern", 10},
-    {"float", 4},
-    {"for", 5},
-    {"global", 4},
-    {"goto", 9},
-    {"if", 5},
-    {"imaginary", 4},
-    {"inline", 12},
-    {"int", 4},
-    {"long", 4},
-    {"offsetof", 1},
-    {"register", 10},
-    {"restrict", 12},
-    {"return", 9},
-    {"short", 4},
-    {"signed", 4},
-    {"sizeof", 2},
-    {"static", 10},
-    {"struct", 3},
-    {"switch", 7},
-    {"typedef", 11},
-    {"union", 3},
-    {"unsigned", 4},
-    {"void", 4},
-    {"volatile", 4},
-    {"while", 5}
+    {"_Bool", rw_type},
+    {"_Complex", rw_type},
+    {"_Imaginary", rw_type},
+    {"auto", rw_storage_class},
+    {"bool", rw_type},
+    {"break", rw_break_or_goto_or_return},
+    {"case", rw_case_or_default},
+    {"char", rw_type},
+    {"complex", rw_type},
+    {"const", rw_type},
+    {"continue", rw_continue_or_inline_or_restrict},
+    {"default", rw_case_or_default},
+    {"do", rw_do_or_else},
+    {"double", rw_type},
+    {"else", rw_do_or_else},
+    {"enum", rw_struct_or_union_or_enum},
+    {"extern", rw_storage_class},
+    {"float", rw_type},
+    {"for", rw_for_or_if_or_while},
+    {"global", rw_type},
+    {"goto", rw_break_or_goto_or_return},
+    {"if", rw_for_or_if_or_while},
+    {"imaginary", rw_type},
+    {"inline", rw_continue_or_inline_or_restrict},
+    {"int", rw_type},
+    {"long", rw_type},
+    {"offsetof", rw_offsetof},
+    {"register", rw_storage_class},
+    {"restrict", rw_continue_or_inline_or_restrict},
+    {"return", rw_break_or_goto_or_return},
+    {"short", rw_type},
+    {"signed", rw_type},
+    {"sizeof", rw_sizeof},
+    {"static", rw_storage_class},
+    {"struct", rw_struct_or_union_or_enum},
+    {"switch", rw_switch},
+    {"typedef", rw_typedef},
+    {"union", rw_struct_or_union_or_enum},
+    {"unsigned", rw_type},
+    {"void", rw_type},
+    {"volatile", rw_type},
+    {"while", rw_for_or_if_or_while}
 };
 
 const char **typenames;
@@ -313,7 +313,7 @@
            if (++buf_ptr >= buf_end)
                fill_buffer();
        }
-       state->keyword = 0;
+       state->keyword = rw_0;
        if (state->last_token == structure && !state->p_l_follow) {
                                /* if last token was 'struct' and we're not
                                 * in parentheses, then this token
@@ -339,7 +339,7 @@
                strcmp(u, "_t") == 0) || (typename_top >= 0 &&
                  bsearch(s_token, typenames, typename_top + 1,
                    sizeof(typenames[0]), strcmp_type))) {
-               state->keyword = 4;     /* a type name */
+               state->keyword = rw_type;
                state->last_u_d = true;
                goto found_typename;
            }
@@ -347,39 +347,37 @@
            state->keyword = p->rwcode;
            state->last_u_d = true;
            switch (p->rwcode) {
-           case 7:             /* it is a switch */
+           case rw_switch:
                return lexi_end(swstmt);
-           case 8:             /* a case or default */
+           case rw_case_or_default:
                return lexi_end(casestmt);
-
-           case 3:             /* a "struct" */
-               /* FALLTHROUGH */
-           case 4:             /* one of the declaration keywords */
+           case rw_struct_or_union_or_enum:
+           case rw_type:
            found_typename:
                if (state->p_l_follow) {
                    /* inside parens: cast, param list, offsetof or sizeof */
                    state->cast_mask |= (1 << state->p_l_follow) & ~state->not_cast_mask;
                }
                if (state->last_token == period || state->last_token == unary_op) {
-                   state->keyword = 0;
+                   state->keyword = rw_0;
                    break;
                }
-               if (p != NULL && p->rwcode == 3)
+               if (p != NULL && p->rwcode == rw_struct_or_union_or_enum)
                    return lexi_end(structure);
                if (state->p_l_follow)
                    break;
                return lexi_end(decl);
 
-           case 5:             /* if, while, for */
+           case rw_for_or_if_or_while:
                return lexi_end(sp_paren);
 
-           case 6:             /* do, else */
+           case rw_do_or_else:
                return lexi_end(sp_nparen);
 
-           case 10:            /* storage class specifier */
+           case rw_storage_class:
                return lexi_end(storage);
 
-           case 11:            /* typedef */
+           case rw_typedef:
                return lexi_end(type_def);
 
            default:            /* all others are treated like any other
@@ -410,7 +408,7 @@
                isalpha((unsigned char)*buf_ptr)) &&
            (state->last_token == semicolon || state->last_token == lbrace ||
                state->last_token == rbrace)) {



Home | Main Index | Thread Index | Old Index