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: merge duplicate code for non-zero ...



details:   https://anonhg.NetBSD.org/src/rev/30a09b642762
branches:  trunk
changeset: 958650:30a09b642762
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Jan 15 23:43:51 2021 +0000

description:
lint: merge duplicate code for non-zero detection

diffstat:

 usr.bin/xlint/lint1/func.c  |  30 +++++++-----------------------
 usr.bin/xlint/lint1/lint1.h |  19 ++++++++++++++++++-
 usr.bin/xlint/lint1/tree.c  |  25 ++++++-------------------
 3 files changed, 31 insertions(+), 43 deletions(-)

diffs (154 lines):

diff -r 201570040aaa -r 30a09b642762 usr.bin/xlint/lint1/func.c
--- a/usr.bin/xlint/lint1/func.c        Fri Jan 15 23:19:33 2021 +0000
+++ b/usr.bin/xlint/lint1/func.c        Fri Jan 15 23:43:51 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: func.c,v 1.57 2021/01/12 20:42:01 rillig Exp $ */
+/*     $NetBSD: func.c,v 1.58 2021/01/15 23:43:51 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.57 2021/01/12 20:42:01 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.58 2021/01/15 23:43:51 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -725,13 +725,8 @@
 
        pushctrl(T_WHILE);
        cstmt->c_loop = 1;
-       if (tn != NULL && tn->tn_op == CON) {
-               if (is_integer(tn->tn_type->t_tspec)) {
-                       cstmt->c_infinite = tn->tn_val->v_quad != 0;
-               } else {
-                       cstmt->c_infinite = tn->tn_val->v_ldbl != 0.0;
-               }
-       }
+       if (tn != NULL && tn->tn_op == CON)
+               cstmt->c_infinite = is_nonzero(tn);
 
        expr(tn, 0, 1, 1);
 }
@@ -790,11 +785,7 @@
                tn = check_controlling_expression(tn);
 
        if (tn != NULL && tn->tn_op == CON) {
-               if (is_integer(tn->tn_type->t_tspec)) {
-                       cstmt->c_infinite = tn->tn_val->v_quad != 0;
-               } else {
-                       cstmt->c_infinite = tn->tn_val->v_ldbl != 0.0;
-               }
+               cstmt->c_infinite = is_nonzero(tn);
                if (!cstmt->c_infinite && cstmt->c_cont)
                        /* continue in 'do ... while (0)' loop */
                        error(323);
@@ -850,15 +841,8 @@
        if (tn2 != NULL)
                expr(tn2, 0, 1, 1);
 
-       if (tn2 == NULL) {
-               cstmt->c_infinite = 1;
-       } else if (tn2->tn_op == CON) {
-               if (is_integer(tn2->tn_type->t_tspec)) {
-                       cstmt->c_infinite = tn2->tn_val->v_quad != 0;
-               } else {
-                       cstmt->c_infinite = tn2->tn_val->v_ldbl != 0.0;
-               }
-       }
+       cstmt->c_infinite =
+           tn2 == NULL || (tn2->tn_op == CON && is_nonzero(tn2));
 
        /* Checking the reinitialisation expression is done in for2() */
 
diff -r 201570040aaa -r 30a09b642762 usr.bin/xlint/lint1/lint1.h
--- a/usr.bin/xlint/lint1/lint1.h       Fri Jan 15 23:19:33 2021 +0000
+++ b/usr.bin/xlint/lint1/lint1.h       Fri Jan 15 23:43:51 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.53 2021/01/04 22:26:50 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.54 2021/01/15 23:43:51 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -459,3 +459,20 @@
 #  define gnuism(id, args...) wrap_check_printf(gnuism, id, ##args)
 #  define c99ism(id, args...) wrap_check_printf(c99ism, id, ##args)
 #endif
+
+static inline bool
+is_nonzero_val(tspec_t t, const val_t *val)
+{
+       return is_floating(t) ? val->v_ldbl != 0.0 : val->v_quad != 0;
+}
+
+static inline bool
+is_nonzero(const tnode_t *tn)
+{
+       /*
+        * XXX: It's strange that val_t doesn't know itself whether it
+        * holds a floating-point or an integer value.
+        */
+       lint_assert(tn->tn_op == CON);
+       return is_nonzero_val(tn->tn_type->t_tspec, tn->tn_val);
+}
diff -r 201570040aaa -r 30a09b642762 usr.bin/xlint/lint1/tree.c
--- a/usr.bin/xlint/lint1/tree.c        Fri Jan 15 23:19:33 2021 +0000
+++ b/usr.bin/xlint/lint1/tree.c        Fri Jan 15 23:43:51 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: tree.c,v 1.152 2021/01/14 07:42:31 rillig Exp $        */
+/*     $NetBSD: tree.c,v 1.153 2021/01/15 23:43:51 rillig Exp $        */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: tree.c,v 1.152 2021/01/14 07:42:31 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.153 2021/01/15 23:43:51 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -2234,9 +2234,7 @@
 
        if (nt == BOOL) {       /* C99 6.3.1.2 */
                nv->v_ansiu = 0;
-               nv->v_quad = ot == FLOAT || ot == DOUBLE || ot == LDOUBLE
-                   ? v->v_ldbl != 0.0
-                   : v->v_quad != 0;
+               nv->v_quad = is_nonzero_val(ot, v) ? 1 : 0;
                return;
        }
 
@@ -3142,26 +3140,15 @@
 static tnode_t *
 fold_test(tnode_t *tn)
 {
-       int     l, r = 0;
+       bool    l, r;
        val_t   *v;
 
        v = xcalloc(1, sizeof (val_t));
        v->v_tspec = tn->tn_type->t_tspec;
        lint_assert(v->v_tspec == INT || (Tflag && v->v_tspec == BOOL));
 
-       if (is_floating(tn->tn_left->tn_type->t_tspec)) {
-               l = tn->tn_left->tn_val->v_ldbl != 0.0;
-       } else {
-               l = tn->tn_left->tn_val->v_quad != 0;
-       }
-
-       if (modtab[tn->tn_op].m_binary) {
-               if (is_floating(tn->tn_right->tn_type->t_tspec)) {
-                       r = tn->tn_right->tn_val->v_ldbl != 0.0;
-               } else {
-                       r = tn->tn_right->tn_val->v_quad != 0;
-               }
-       }
+       l = is_nonzero(tn->tn_left);
+       r = modtab[tn->tn_op].m_binary && is_nonzero(tn->tn_right);
 
        switch (tn->tn_op) {
        case NOT:



Home | Main Index | Thread Index | Old Index