Source-Changes-HG archive

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

[src/trunk]: src/usr.bin/xlint/lint1 lint: rename pushctrl and popctrl to be ...



details:   https://anonhg.NetBSD.org/src/rev/4548a7d808f2
branches:  trunk
changeset: 960689:4548a7d808f2
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Mar 26 18:54:39 2021 +0000

description:
lint: rename pushctrl and popctrl to be more expressive

While here, remove the magic number 0 that in this context means
"function body".

No functional change.

diffstat:

 usr.bin/xlint/lint1/cgram.y    |   8 ++++----
 usr.bin/xlint/lint1/externs1.h |   6 +++---
 usr.bin/xlint/lint1/func.c     |  32 ++++++++++++++++----------------
 usr.bin/xlint/lint1/lint1.h    |  13 +++++++++++--
 4 files changed, 34 insertions(+), 25 deletions(-)

diffs (222 lines):

diff -r b7cdd8c84b94 -r 4548a7d808f2 usr.bin/xlint/lint1/cgram.y
--- a/usr.bin/xlint/lint1/cgram.y       Fri Mar 26 17:44:52 2021 +0000
+++ b/usr.bin/xlint/lint1/cgram.y       Fri Mar 26 18:54:39 2021 +0000
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.202 2021/03/26 17:44:52 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.203 2021/03/26 18:54:39 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: cgram.y,v 1.202 2021/03/26 17:44:52 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.203 2021/03/26 18:54:39 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -447,10 +447,10 @@
                block_level--;
                check_func_lint_directives();
                check_func_old_style_arguments();
-               pushctrl(0);
+               begin_control_statement(CS_FUNCTION_BODY);
          } compound_statement {
                funcend();
-               popctrl(0);
+               end_control_statement(CS_FUNCTION_BODY);
          }
        ;
 
diff -r b7cdd8c84b94 -r 4548a7d808f2 usr.bin/xlint/lint1/externs1.h
--- a/usr.bin/xlint/lint1/externs1.h    Fri Mar 26 17:44:52 2021 +0000
+++ b/usr.bin/xlint/lint1/externs1.h    Fri Mar 26 18:54:39 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: externs1.h,v 1.86 2021/03/26 17:44:52 rillig Exp $     */
+/*     $NetBSD: externs1.h,v 1.87 2021/03/26 18:54:39 rillig Exp $     */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -252,8 +252,8 @@
 extern bool    plibflg;
 extern bool    quadflg;
 
-extern void    pushctrl(int);
-extern void    popctrl(int);
+extern void    begin_control_statement(control_statement_kind);
+extern void    end_control_statement(control_statement_kind);
 extern void    check_statement_reachable(void);
 extern void    funcdef(sym_t *);
 extern void    funcend(void);
diff -r b7cdd8c84b94 -r 4548a7d808f2 usr.bin/xlint/lint1/func.c
--- a/usr.bin/xlint/lint1/func.c        Fri Mar 26 17:44:52 2021 +0000
+++ b/usr.bin/xlint/lint1/func.c        Fri Mar 26 18:54:39 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: func.c,v 1.95 2021/03/21 19:14:40 rillig Exp $ */
+/*     $NetBSD: func.c,v 1.96 2021/03/26 18:54:39 rillig Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: func.c,v 1.95 2021/03/21 19:14:40 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.96 2021/03/26 18:54:39 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -153,12 +153,12 @@
  * Puts a new element at the top of the stack used for control statements.
  */
 void
-pushctrl(int env)
+begin_control_statement(control_statement_kind kind)
 {
        cstk_t  *ci;
 
        ci = xcalloc(1, sizeof (cstk_t));
-       ci->c_env = env;
+       ci->c_kind = kind;
        ci->c_surrounding = cstmt;
        cstmt = ci;
 }
@@ -167,13 +167,13 @@
  * Removes the top element of the stack used for control statements.
  */
 void
-popctrl(int env)
+end_control_statement(control_statement_kind kind)
 {
        cstk_t  *ci;
        case_label_t *cl, *next;
 
        lint_assert(cstmt != NULL);
-       lint_assert(cstmt->c_env == env);
+       lint_assert(cstmt->c_kind == kind);
 
        ci = cstmt;
        cstmt = ci->c_surrounding;
@@ -611,7 +611,7 @@
                tn = check_controlling_expression(tn);
        if (tn != NULL)
                expr(tn, false, true, false, false);
-       pushctrl(T_IF);
+       begin_control_statement(CS_IF);
 
        if (tn != NULL && tn->tn_op == CON && !tn->tn_system_dependent) {
                /* XXX: what if inside 'if (0)'? */
@@ -648,7 +648,7 @@
        else if (!els)
                set_reached(true);
 
-       popctrl(T_IF);
+       end_control_statement(CS_IF);
 }
 
 /*
@@ -695,7 +695,7 @@
        check_getopt_begin_switch();
        expr(tn, true, false, true, false);
 
-       pushctrl(T_SWITCH);
+       begin_control_statement(CS_SWITCH);
        cstmt->c_switch = true;
        cstmt->c_swtype = tp;
 
@@ -755,7 +755,7 @@
                 * if the end of the last statement inside it is reached.
                 */
 
-       popctrl(T_SWITCH);
+       end_control_statement(CS_SWITCH);
 }
 
 /*
@@ -776,7 +776,7 @@
        if (tn != NULL)
                tn = check_controlling_expression(tn);
 
-       pushctrl(T_WHILE);
+       begin_control_statement(CS_WHILE);
        cstmt->c_loop = true;
        cstmt->c_maybe_endless = is_nonzero(tn);
        body_reached = !is_zero(tn);
@@ -802,7 +802,7 @@
        set_reached(!cstmt->c_maybe_endless || cstmt->c_break);
 
        check_getopt_end_while();
-       popctrl(T_WHILE);
+       end_control_statement(CS_WHILE);
 }
 
 /*
@@ -818,7 +818,7 @@
                set_reached(true);
        }
 
-       pushctrl(T_DO);
+       begin_control_statement(CS_DO_WHILE);
        cstmt->c_loop = true;
 }
 
@@ -854,7 +854,7 @@
        if (cstmt->c_break)
                set_reached(true);
 
-       popctrl(T_DO);
+       end_control_statement(CS_DO_WHILE);
 }
 
 /*
@@ -874,7 +874,7 @@
                set_reached(true);
        }
 
-       pushctrl(T_FOR);
+       begin_control_statement(CS_FOR);
        cstmt->c_loop = true;
 
        /*
@@ -944,7 +944,7 @@
        /* TODO: What if the loop contains a 'return'? */
        set_reached(cstmt->c_break || !cstmt->c_maybe_endless);
 
-       popctrl(T_FOR);
+       end_control_statement(CS_FOR);
 }
 
 /*
diff -r b7cdd8c84b94 -r 4548a7d808f2 usr.bin/xlint/lint1/lint1.h
--- a/usr.bin/xlint/lint1/lint1.h       Fri Mar 26 17:44:52 2021 +0000
+++ b/usr.bin/xlint/lint1/lint1.h       Fri Mar 26 18:54:39 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.87 2021/03/21 15:34:13 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.88 2021/03/26 18:54:39 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -378,11 +378,20 @@
        struct case_label *cl_next;
 } case_label_t;
 
+typedef enum {
+       CS_DO_WHILE,
+       CS_FOR,
+       CS_FUNCTION_BODY,
+       CS_IF,
+       CS_SWITCH,
+       CS_WHILE
+} control_statement_kind;
+
 /*
  * Used to keep information about nested control statements.
  */
 typedef struct control_statement {
-       int     c_env;                  /* type of statement (T_IF, ...) */
+       control_statement_kind c_kind;  /* to ensure proper nesting */
        bool    c_loop : 1;             /* continue && break are valid */
        bool    c_switch : 1;           /* case && break are valid */
        bool    c_break : 1;            /* the loop/switch has a reachable



Home | Main Index | Thread Index | Old Index