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: extract debug logging to separate ...



details:   https://anonhg.NetBSD.org/src/rev/c6d4c37e29d1
branches:  trunk
changeset: 984928:c6d4c37e29d1
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sat Jul 31 18:16:42 2021 +0000

description:
lint: extract debug logging to separate file

Lint currently has several different kinds of debug log:

* The -DDEBUG log is controlled at compile time.
* The -d command line options enables some other debug logging.
* The -DYYDEBUG log for parsing is controlled at compile time.
* The -y command line option only has an effect in -DYYDEBUG mode.

Extracting the logging into a separate file is a first step towards
unifying these logs and making the code for debug logging stand out less
than the current #ifdef DEBUG.

No functional change.

diffstat:

 usr.bin/xlint/lint1/Makefile   |    4 +-
 usr.bin/xlint/lint1/debug.c    |  144 +++++++++++++++++++++++++++++++++++++++++
 usr.bin/xlint/lint1/externs1.h |   43 ++++++++++-
 usr.bin/xlint/lint1/init.c     |   80 +---------------------
 usr.bin/xlint/lint1/tree.c     |   44 +-----------
 5 files changed, 189 insertions(+), 126 deletions(-)

diffs (truncated from 408 to 300 lines):

diff -r 4ace06a6e40f -r c6d4c37e29d1 usr.bin/xlint/lint1/Makefile
--- a/usr.bin/xlint/lint1/Makefile      Sat Jul 31 17:09:21 2021 +0000
+++ b/usr.bin/xlint/lint1/Makefile      Sat Jul 31 18:16:42 2021 +0000
@@ -1,10 +1,10 @@
-#      $NetBSD: Makefile,v 1.81 2021/07/31 17:09:21 rillig Exp $
+#      $NetBSD: Makefile,v 1.82 2021/07/31 18:16:42 rillig Exp $
 
 .include <bsd.own.mk>
 
 PROG=          lint1
 SRCS=          cgram.y \
-               ckbool.c ckctype.c ckgetopt.c \
+               ckbool.c ckctype.c ckgetopt.c debug.c \
                decl.c emit.c emit1.c err.c func.c init.c inittyp.c lex.c \
                main1.c mem.c mem1.c oper.c scan.l tree.c tyname.c
 
diff -r 4ace06a6e40f -r c6d4c37e29d1 usr.bin/xlint/lint1/debug.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/xlint/lint1/debug.c       Sat Jul 31 18:16:42 2021 +0000
@@ -0,0 +1,144 @@
+/* $NetBSD: debug.c,v 1.1 2021/07/31 18:16:42 rillig Exp $ */
+
+/*-
+ * Copyright (c) 2021 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Roland Illig <rillig%NetBSD.org@localhost>.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#include <sys/cdefs.h>
+#if defined(__RCSID) && !defined(lint)
+__RCSID("$NetBSD: debug.c,v 1.1 2021/07/31 18:16:42 rillig Exp $");
+#endif
+
+#include "lint1.h"
+
+
+#ifdef DEBUG
+
+static int debug_indentation = 0;
+
+
+void __printflike(1, 2)
+debug_printf(const char *fmt, ...)
+{
+       va_list va;
+
+       va_start(va, fmt);
+       vfprintf(stdout, fmt, va);
+       va_end(va);
+}
+
+void
+debug_indent(void)
+{
+
+       debug_printf("%*s", 2 * debug_indentation, "");
+}
+
+void
+debug_indent_inc(void)
+{
+
+       debug_indentation++;
+}
+
+void
+debug_indent_dec(void)
+{
+
+       debug_indentation--;
+}
+
+void
+(debug_enter)(const char *func)
+{
+
+       printf("%*s+ %s\n", 2 * debug_indentation++, "", func);
+}
+
+void __printflike(1, 2)
+debug_step(const char *fmt, ...)
+{
+       va_list va;
+
+       debug_indent();
+       va_start(va, fmt);
+       vfprintf(stdout, fmt, va);
+       va_end(va);
+       printf("\n");
+}
+
+void
+(debug_leave)(const char *func)
+{
+
+       printf("%*s- %s\n", 2 * --debug_indentation, "", func);
+}
+
+void
+debug_node(const tnode_t *tn, int indent)
+{
+       op_t op;
+
+       if (tn == NULL) {
+               printf("%*s" "null\n", indent, "");
+               return;
+       }
+
+       op = tn->tn_op;
+       printf("%*s%s with type '%s'%s%s",
+           2 * indent, "",
+           op == CVT && !tn->tn_cast ? "convert" : modtab[op].m_name,
+           type_name(tn->tn_type), tn->tn_lvalue ? ", lvalue" : "",
+           tn->tn_parenthesized ? ", parenthesized" : "");
+
+       if (op == NAME)
+               printf(" %s\n", tn->tn_sym->s_name);
+       else if (op == CON && is_floating(tn->tn_type->t_tspec))
+               printf(", value %Lg", tn->tn_val->v_ldbl);
+       else if (op == CON && is_uinteger(tn->tn_type->t_tspec))
+               printf(", value %llu\n", (unsigned long long)tn->tn_val->v_quad);
+       else if (op == CON && is_integer(tn->tn_type->t_tspec))
+               printf(", value %lld\n", (long long)tn->tn_val->v_quad);
+       else if (op == CON)
+               printf(", unknown value\n");
+       else if (op == STRING)
+               printf(", length %zu\n", tn->tn_string->st_len);
+       else {
+               printf("\n");
+
+               debug_node(tn->tn_left, indent + 1);
+               if (modtab[op].m_binary || tn->tn_right != NULL)
+                       debug_node(tn->tn_right, indent + 1);
+       }
+}
+
+#endif
diff -r 4ace06a6e40f -r c6d4c37e29d1 usr.bin/xlint/lint1/externs1.h
--- a/usr.bin/xlint/lint1/externs1.h    Sat Jul 31 17:09:21 2021 +0000
+++ b/usr.bin/xlint/lint1/externs1.h    Sat Jul 31 18:16:42 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: externs1.h,v 1.123 2021/07/31 17:09:21 rillig Exp $    */
+/*     $NetBSD: externs1.h,v 1.124 2021/07/31 18:16:42 rillig Exp $    */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -112,6 +112,42 @@
 extern void    expr_restore_memory(struct memory_block *);
 
 /*
+ * debug.c
+ */
+
+#ifdef DEBUG
+void   debug_node(const tnode_t *, int);
+void   debug_printf(const char *fmt, ...) __printflike(1, 2);
+void   debug_indent(void);
+void   debug_indent_inc(void);
+void   debug_indent_dec(void);
+void   debug_enter(const char *);
+void   debug_step(const char *fmt, ...) __printflike(1, 2);
+#define        debug_step0             debug_step
+#define        debug_step1             debug_step
+#define        debug_step2             debug_step
+void   debug_leave(const char *);
+#define        debug_enter()           (debug_enter)(__func__)
+#define        debug_leave()           (debug_leave)(__func__)
+#else
+#define        debug_noop()            do { } while (false)
+#define        debug_node(tn, indent) debug_noop()
+/* ARGSUSED */
+static inline void __printflike(1, 2) debug_printf(const char *fmt, ...) {}
+#define debug_indent()         debug_noop()
+/* ARGSUSED */
+static inline void __printflike(1, 2) debug_step(const char *fmt, ...) {}
+#define        debug_indent()          debug_noop()
+#define        debug_indent_inc()      debug_noop()
+#define        debug_indent_dec()      debug_noop()
+#define        debug_enter()           debug_noop()
+#define        debug_step0(fmt)        debug_noop()
+#define        debug_step1(fmt, arg0)  debug_noop()
+#define        debug_step2(fmt, arg1, arg2) debug_noop()
+#define        debug_leave()           debug_noop()
+#endif
+
+/*
  * err.c
  */
 extern int     nerr;
@@ -235,11 +271,6 @@
 extern bool    constant_addr(const tnode_t *, const sym_t **, ptrdiff_t *);
 extern strg_t  *cat_strings(strg_t *, strg_t *);
 extern  int64_t type_size_in_bits(const type_t *);
-#ifdef DEBUG
-extern void    debug_node(const tnode_t *, int);
-#else
-#define debug_node(tn, indent) do { } while (false)
-#endif
 
 /*
  * func.c
diff -r 4ace06a6e40f -r c6d4c37e29d1 usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c        Sat Jul 31 17:09:21 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c        Sat Jul 31 18:16:42 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init.c,v 1.204 2021/07/31 11:03:04 rillig Exp $        */
+/*     $NetBSD: init.c,v 1.205 2021/07/31 18:16:42 rillig Exp $        */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.204 2021/07/31 11:03:04 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.205 2021/07/31 18:16:42 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -172,74 +172,6 @@
 };
 
 
-#ifdef DEBUG
-static int debug_indentation = 0;
-#endif
-
-
-#ifdef DEBUG
-
-static void __printflike(1, 2)
-debug_printf(const char *fmt, ...)
-{
-       va_list va;
-
-       va_start(va, fmt);
-       vfprintf(stdout, fmt, va);
-       va_end(va);
-}
-
-static void
-debug_indent(void)
-{
-
-       debug_printf("%*s", 2 * debug_indentation, "");
-}
-
-static void
-debug_enter(const char *func)
-{
-
-       printf("%*s+ %s\n", 2 * debug_indentation++, "", func);
-}
-
-static void __printflike(1, 2)
-debug_step(const char *fmt, ...)
-{
-       va_list va;
-
-       debug_indent();
-       va_start(va, fmt);
-       vfprintf(stdout, fmt, va);
-       va_end(va);
-       printf("\n");
-}
-#define debug_step0            debug_step
-#define debug_step1            debug_step
-#define debug_step2            debug_step
-
-static void
-debug_leave(const char *func)
-{
-



Home | Main Index | Thread Index | Old Index