Module Name: src Committed By: rillig Date: Mon Jul 10 19:58:47 UTC 2023
Modified Files: src/usr.bin/xlint/lint1: cgram.y err.c Log Message: lint: when debugging the parser, write messages on stderr This way, all messages (regular debug, yacc debug, lint diagnostics) occur in the correct order. To generate a diff of this commit: cvs rdiff -u -r1.451 -r1.452 src/usr.bin/xlint/lint1/cgram.y cvs rdiff -u -r1.209 -r1.210 src/usr.bin/xlint/lint1/err.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/xlint/lint1/cgram.y diff -u src/usr.bin/xlint/lint1/cgram.y:1.451 src/usr.bin/xlint/lint1/cgram.y:1.452 --- src/usr.bin/xlint/lint1/cgram.y:1.451 Mon Jul 10 19:47:12 2023 +++ src/usr.bin/xlint/lint1/cgram.y Mon Jul 10 19:58:47 2023 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.451 2023/07/10 19:47:12 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.452 2023/07/10 19:58:47 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: cgram.y,v 1.451 2023/07/10 19:47:12 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.452 2023/07/10 19:58:47 rillig Exp $"); #endif #include <limits.h> @@ -160,7 +160,7 @@ is_either(const char *s, const char *a, else fprintf(yyo, "%Lg", $$->u.floating); } <y_val> -%printer { fprintf(yyo, "'%s'", $$->sb_name); } <y_name> +%printer { fprintf(yyo, "'%s'", $$ != NULL ? $$->sb_name : "<null>"); } <y_name> %printer { debug_sym("", $$, ""); } <y_sym> %printer { fprintf(yyo, "%s", op_name($$)); } <y_op> %printer { fprintf(yyo, "%s", scl_name($$)); } <y_scl> @@ -168,7 +168,11 @@ is_either(const char *s, const char *a, %printer { fprintf(yyo, "%s", tqual_name($$)); } <y_tqual> %printer { fprintf(yyo, "%s", type_name($$)); } <y_type> %printer { - fprintf(yyo, "%s '%s'", op_name($$->tn_op), type_name($$->tn_type)); + if ($$ == NULL) + fprintf(yyo, "<null>"); + else + fprintf(yyo, "%s '%s'", + op_name($$->tn_op), type_name($$->tn_type)); } <y_tnode> %printer { fprintf(yyo, "%zu to %zu", $$.lo, $$.hi); } <y_range> %printer { fprintf(yyo, "length %zu", $$->st_len); } <y_string> Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.209 src/usr.bin/xlint/lint1/err.c:1.210 --- src/usr.bin/xlint/lint1/err.c:1.209 Sun Jul 9 12:04:08 2023 +++ src/usr.bin/xlint/lint1/err.c Mon Jul 10 19:58:47 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.209 2023/07/09 12:04:08 rillig Exp $ */ +/* $NetBSD: err.c,v 1.210 2023/07/10 19:58:47 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) -__RCSID("$NetBSD: err.c,v 1.209 2023/07/09 12:04:08 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.210 2023/07/10 19:58:47 rillig Exp $"); #endif #include <limits.h> @@ -517,18 +517,24 @@ lbasename(const char *path) return base; } +static FILE * +output_channel(void) +{ + return yflag ? stderr : stdout; +} + static void verror_at(int msgid, const pos_t *pos, va_list ap) { - const char *fn; if (is_suppressed[msgid]) return; - fn = lbasename(pos->p_file); - (void)printf("%s(%d): error: ", fn, pos->p_line); - (void)vprintf(msgs[msgid], ap); - (void)printf(" [%d]\n", msgid); + FILE *out = output_channel(); + (void)fprintf(out, "%s(%d): error: ", + lbasename(pos->p_file), pos->p_line); + (void)vfprintf(out, msgs[msgid], ap); + (void)fprintf(out, " [%d]\n", msgid); seen_error = true; print_stack_trace(); } @@ -536,7 +542,6 @@ verror_at(int msgid, const pos_t *pos, v static void vwarning_at(int msgid, const pos_t *pos, va_list ap) { - const char *fn; if (is_suppressed[msgid]) return; @@ -546,10 +551,11 @@ vwarning_at(int msgid, const pos_t *pos, /* this warning is suppressed by a LINTED comment */ return; - fn = lbasename(pos->p_file); - (void)printf("%s(%d): warning: ", fn, pos->p_line); - (void)vprintf(msgs[msgid], ap); - (void)printf(" [%d]\n", msgid); + FILE *out = output_channel(); + (void)fprintf(out, "%s(%d): warning: ", + lbasename(pos->p_file), pos->p_line); + (void)vfprintf(out, msgs[msgid], ap); + (void)fprintf(out, " [%d]\n", msgid); seen_warning = true; print_stack_trace(); } @@ -557,15 +563,15 @@ vwarning_at(int msgid, const pos_t *pos, static void vmessage_at(int msgid, const pos_t *pos, va_list ap) { - const char *fn; if (is_suppressed[msgid]) return; - fn = lbasename(pos->p_file); - (void)printf("%s(%d): ", fn, pos->p_line); - (void)vprintf(msgs[msgid], ap); - (void)printf(" [%d]\n", msgid); + FILE *out = output_channel(); + (void)fprintf(out, "%s(%d): ", + lbasename(pos->p_file), pos->p_line); + (void)vfprintf(out, msgs[msgid], ap); + (void)fprintf(out, " [%d]\n", msgid); print_stack_trace(); } @@ -592,7 +598,6 @@ void void assert_failed(const char *file, int line, const char *func, const char *cond) { - const char *fn; /* * After encountering a parse error in the grammar, lint often does @@ -607,11 +612,11 @@ assert_failed(const char *file, int line if (sytxerr > 0) norecover(); - fn = lbasename(curr_pos.p_file); (void)fflush(stdout); (void)fprintf(stderr, "lint: assertion \"%s\" failed in %s at %s:%d near %s:%d\n", - cond, func, file, line, fn, curr_pos.p_line); + cond, func, file, line, + lbasename(curr_pos.p_file), curr_pos.p_line); print_stack_trace(); (void)fflush(stdout); abort(); @@ -731,16 +736,18 @@ static bool is_query_enabled[sizeof(quer void (query_message)(int query_id, ...) { - va_list ap; if (!is_query_enabled[query_id]) return; - (void)printf("%s(%d): ", lbasename(curr_pos.p_file), curr_pos.p_line); + va_list ap; + FILE *out = output_channel(); + (void)fprintf(out, "%s(%d): ", + lbasename(curr_pos.p_file), curr_pos.p_line); va_start(ap, query_id); - (void)vprintf(queries[query_id], ap); + (void)vfprintf(out, queries[query_id], ap); va_end(ap); - (void)printf(" [Q%d]\n", query_id); + (void)fprintf(out, " [Q%d]\n", query_id); print_stack_trace(); }