Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/make make(1): suppress wrong "Malformed conditional"...
details: https://anonhg.NetBSD.org/src/rev/6bc00f13896c
branches: trunk
changeset: 954935:6bc00f13896c
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Sep 13 19:46:23 2020 +0000
description:
make(1): suppress wrong "Malformed conditional" for undefined variables
This only has an effect in lint mode right now.
diffstat:
usr.bin/make/cond.c | 18 ++++++++++++++----
usr.bin/make/nonints.h | 7 +++++--
usr.bin/make/unit-tests/opt-debug-lint.exp | 1 -
usr.bin/make/var.c | 12 +++++++-----
4 files changed, 26 insertions(+), 12 deletions(-)
diffs (128 lines):
diff -r a8f4ec2a4b49 -r 6bc00f13896c usr.bin/make/cond.c
--- a/usr.bin/make/cond.c Sun Sep 13 19:28:46 2020 +0000
+++ b/usr.bin/make/cond.c Sun Sep 13 19:46:23 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cond.c,v 1.145 2020/09/13 18:27:39 rillig Exp $ */
+/* $NetBSD: cond.c,v 1.146 2020/09/13 19:46:23 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -93,7 +93,7 @@
#include "dir.h"
/* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: cond.c,v 1.145 2020/09/13 18:27:39 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.146 2020/09/13 19:46:23 rillig Exp $");
/*
* The parsing of conditional expressions is based on this grammar:
@@ -142,6 +142,12 @@
const struct If *if_info; /* Info for current statement */
const char *p; /* The remaining condition to parse */
Token curr; /* Single push-back token used in parsing */
+
+ /* Whether an error message has already been printed for this condition.
+ * The first available error message is usually the most specific one,
+ * therefore it makes sense to suppress the standard "Malformed
+ * conditional" message. */
+ Boolean printedError;
} CondParser;
static Token CondParser_Expr(CondParser *par, Boolean);
@@ -411,6 +417,7 @@
Boolean qt;
const char *start;
VarEvalFlags eflags;
+ VarParseErrors errors;
Buf_Init(&buf, 0);
str = NULL;
@@ -454,9 +461,11 @@
(doEval ? VARE_WANTRES : 0);
nested_p = par->p;
atStart = nested_p == start;
- (void)Var_Parse(&nested_p, VAR_CMD, eflags, &str, freeIt);
+ errors = Var_Parse(&nested_p, VAR_CMD, eflags, &str, freeIt);
/* TODO: handle errors */
if (str == var_Error) {
+ if (errors & VPE_ANY_MSG)
+ par->printedError = TRUE;
if (*freeIt) {
free(*freeIt);
*freeIt = NULL;
@@ -1038,10 +1047,11 @@
par.if_info = info;
par.p = cond;
par.curr = TOK_NONE;
+ par.printedError = FALSE;
rval = CondParser_Eval(&par, value);
- if (rval == COND_INVALID && eprint)
+ if (rval == COND_INVALID && eprint && !par.printedError)
Parse_Error(PARSE_FATAL, "Malformed conditional (%s)", cond);
return rval;
diff -r a8f4ec2a4b49 -r 6bc00f13896c usr.bin/make/nonints.h
--- a/usr.bin/make/nonints.h Sun Sep 13 19:28:46 2020 +0000
+++ b/usr.bin/make/nonints.h Sun Sep 13 19:46:23 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: nonints.h,v 1.120 2020/09/13 19:16:22 rillig Exp $ */
+/* $NetBSD: nonints.h,v 1.121 2020/09/13 19:46:23 rillig Exp $ */
/*-
* Copyright (c) 1988, 1989, 1990, 1993
@@ -258,7 +258,10 @@
*
* This should never happen since it is impossible to say where
* exactly the evaluation error occurred. */
- VPE_EVAL_SILENT = 0x0200
+ VPE_EVAL_SILENT = 0x0200,
+
+ /* See if a message has already been printed for this error. */
+ VPE_ANY_MSG = VPE_PARSE_MSG | VPE_UNDEF_MSG | VPE_EVAL_MSG
} VarParseErrors;
void Var_Delete(const char *, GNode *);
diff -r a8f4ec2a4b49 -r 6bc00f13896c usr.bin/make/unit-tests/opt-debug-lint.exp
--- a/usr.bin/make/unit-tests/opt-debug-lint.exp Sun Sep 13 19:28:46 2020 +0000
+++ b/usr.bin/make/unit-tests/opt-debug-lint.exp Sun Sep 13 19:46:23 2020 +0000
@@ -1,5 +1,4 @@
make: "opt-debug-lint.mk" line 18: Variable "X" is undefined
-make: "opt-debug-lint.mk" line 18: Malformed conditional ($X)
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
diff -r a8f4ec2a4b49 -r 6bc00f13896c usr.bin/make/var.c
--- a/usr.bin/make/var.c Sun Sep 13 19:28:46 2020 +0000
+++ b/usr.bin/make/var.c Sun Sep 13 19:46:23 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.516 2020/09/13 19:28:46 rillig Exp $ */
+/* $NetBSD: var.c,v 1.517 2020/09/13 19:46:23 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -121,7 +121,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.516 2020/09/13 19:28:46 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.517 2020/09/13 19:46:23 rillig Exp $");
#define VAR_DEBUG_IF(cond, fmt, ...) \
if (!(DEBUG(VAR) && (cond))) \
@@ -3490,9 +3490,11 @@
*pp += 2;
*out_val = ShortVarValue(startc, ctxt, eflags);
- if (DEBUG(LINT) && *out_val == var_Error)
- Parse_Error(PARSE_FATAL, "Variable \"%s\" is undefined", name);
- return eflags & VARE_UNDEFERR ? VPE_UNDEF_MSG : VPE_OK;
+ if (DEBUG(LINT) && *out_val == var_Error) {
+ Parse_Error(PARSE_FATAL, "Variable \"%s\" is undefined", name);
+ return VPE_UNDEF_MSG;
+ }
+ return eflags & VARE_UNDEFERR ? VPE_UNDEF_SILENT : VPE_OK;
} else {
haveModifier = FALSE;
p = start + 1;
Home |
Main Index |
Thread Index |
Old Index