Module Name:    src
Committed By:   rillig
Date:           Sat Aug  8 13:27:42 UTC 2020

Modified Files:
        src/usr.bin/make: var.c
        src/usr.bin/make/unit-tests: moderrs.exp moderrs.mk varmod-edge.exp

Log Message:
make(1): improve error message in case of unfinished modifiers

The previous error message "Unclosed substitution" was wrong for several
reasons.

It is not about "unclosed", but about "unfinished" since in the
:@var@...@ modifier the missing '@' does not really close anything.

The word "substitution" may have originated in a time where :S and
:from=to were the only modifiers, and these were indeed substitutions,
but several other modifiers aren't.

The :S and :C modifiers allow an arbitrary delimiter, therefore it is
helpful to enclose the delimiter in quotes, just in case someone chooses
')' or '{' or even ' ' as delimiter.


To generate a diff of this commit:
cvs rdiff -u -r1.427 -r1.428 src/usr.bin/make/var.c
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/make/unit-tests/moderrs.exp
cvs rdiff -u -r1.11 -r1.12 src/usr.bin/make/unit-tests/moderrs.mk
cvs rdiff -u -r1.7 -r1.8 src/usr.bin/make/unit-tests/varmod-edge.exp

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/make/var.c
diff -u src/usr.bin/make/var.c:1.427 src/usr.bin/make/var.c:1.428
--- src/usr.bin/make/var.c:1.427	Sat Aug  8 13:17:39 2020
+++ src/usr.bin/make/var.c	Sat Aug  8 13:27:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.427 2020/08/08 13:17:39 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.428 2020/08/08 13:27:42 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.427 2020/08/08 13:17:39 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.428 2020/08/08 13:27:42 rillig Exp $";
 #else
 #include <sys/cdefs.h>
 #ifndef lint
 #if 0
 static char sccsid[] = "@(#)var.c	8.3 (Berkeley) 3/19/94";
 #else
-__RCSID("$NetBSD: var.c,v 1.427 2020/08/08 13:17:39 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.428 2020/08/08 13:27:42 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -1918,7 +1918,7 @@ typedef enum {
     AMR_OK,			/* Continue parsing */
     AMR_UNKNOWN,		/* Not a match, try other modifiers as well */
     AMR_BAD,			/* Error out with "Bad modifier" message */
-    AMR_CLEANUP			/* Error out, with "Unclosed substitution"
+    AMR_CLEANUP			/* Error out, with "Unfinished modifier"
 				 * if st->missing_delim is set. */
 } ApplyModifierResult;
 
@@ -3209,7 +3209,7 @@ bad_modifier:
 cleanup:
     *pp = p;
     if (st.missing_delim != '\0')
-	Error("Unclosed substitution for %s (%c missing)",
+	Error("Unfinished modifier for %s ('%c' missing)",
 	      st.v->name, st.missing_delim);
     free(*freePtr);
     *freePtr = NULL;

Index: src/usr.bin/make/unit-tests/moderrs.exp
diff -u src/usr.bin/make/unit-tests/moderrs.exp:1.12 src/usr.bin/make/unit-tests/moderrs.exp:1.13
--- src/usr.bin/make/unit-tests/moderrs.exp:1.12	Fri Jul 31 13:49:25 2020
+++ src/usr.bin/make/unit-tests/moderrs.exp	Sat Aug  8 13:27:42 2020
@@ -10,13 +10,13 @@ VAR:S,V,v,=Thevariable
 Expect: Unclosed variable specification for VAR
 make: Unclosed variable specification after complex modifier (expecting '}') for VAR
 VAR:S,V,v,=Thevariable
-Expect: Unclosed substitution for VAR (, missing)
-make: Unclosed substitution for VAR (, missing)
+Expect: Unfinished modifier for VAR (',' missing)
+make: Unfinished modifier for VAR (',' missing)
 VAR:S,V,v=
 Expect: 2 errors about missing @ delimiter
-make: Unclosed substitution for UNDEF (@ missing)
+make: Unfinished modifier for UNDEF ('@' missing)
 
-make: Unclosed substitution for UNDEF (@ missing)
+make: Unfinished modifier for UNDEF ('@' missing)
 
 1 2 3
 modloop-close:
@@ -24,40 +24,40 @@ make: Unclosed variable specification (e
 1}... 2}... 3}...
 1}... 2}... 3}...
 Expect: 2 errors about missing ] delimiter
-make: Unclosed substitution for UNDEF (] missing)
+make: Unfinished modifier for UNDEF (']' missing)
 
-make: Unclosed substitution for UNDEF (] missing)
+make: Unfinished modifier for UNDEF (']' missing)
 
 13=
 12345=ok
 Expect: 2 errors about missing ! delimiter
-make: Unclosed substitution for VARNAME (! missing)
+make: Unfinished modifier for VARNAME ('!' missing)
 
-make: Unclosed substitution for ! (! missing)
+make: Unfinished modifier for ! ('!' missing)
 
 mod-subst-delimiter:
 make: Missing delimiter for :S modifier
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
 make: Unclosed variable specification (expecting '}') for "VAR" (value "TheVariable") modifier S
 TheVariable
 TheVariable
 make: Missing delimiter for :S modifier
 1:
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 2:
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 3:
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
 make: Unclosed variable specification (expecting '}') for "VAR" (value "TheVariable") modifier S
 TheVariable
@@ -65,26 +65,26 @@ TheVariable
 mod-regex-delimiter:
 make: Missing delimiter for :C modifier
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
 make: Unclosed variable specification (expecting '}') for "VAR" (value "TheVariable") modifier C
 TheVariable
 TheVariable
 make: Missing delimiter for :C modifier
 1:
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 2:
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 3:
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
-make: Unclosed substitution for VAR (, missing)
+make: Unfinished modifier for VAR (',' missing)
 
 make: Unclosed variable specification (expecting '}') for "VAR" (value "TheVariable") modifier C
 TheVariable
@@ -106,13 +106,13 @@ make: Bad modifier `:t' for FIB
 make: Bad modifier `:t' for FIB
 M*}
 mod-ifelse-parse:
-make: Unclosed substitution for FIB (: missing)
+make: Unfinished modifier for FIB (':' missing)
 
-make: Unclosed substitution for FIB (: missing)
+make: Unfinished modifier for FIB (':' missing)
 
-make: Unclosed substitution for FIB (} missing)
+make: Unfinished modifier for FIB ('}' missing)
 
-make: Unclosed substitution for FIB (} missing)
+make: Unfinished modifier for FIB ('}' missing)
 
 then
 mod-assign-parse:
@@ -120,7 +120,7 @@ make: Unknown modifier ':'
 
 make: Bad modifier `:' for 
 value}
-make: Unclosed substitution for ASSIGN (} missing)
+make: Unfinished modifier for ASSIGN ('}' missing)
 
 mod-remember-parse:
 1 1 2 3 5 8 13 21 34

Index: src/usr.bin/make/unit-tests/moderrs.mk
diff -u src/usr.bin/make/unit-tests/moderrs.mk:1.11 src/usr.bin/make/unit-tests/moderrs.mk:1.12
--- src/usr.bin/make/unit-tests/moderrs.mk:1.11	Fri Jul 31 15:16:05 2020
+++ src/usr.bin/make/unit-tests/moderrs.mk	Sat Aug  8 13:27:42 2020
@@ -1,4 +1,4 @@
-# $Id: moderrs.mk,v 1.11 2020/07/31 15:16:05 rillig Exp $
+# $Id: moderrs.mk,v 1.12 2020/08/08 13:27:42 rillig Exp $
 #
 # various modifier error tests
 
@@ -40,7 +40,7 @@ vartermV:
 	@echo VAR:${MOD_TERM},=${VAR:${MOD_S}
 
 modtermV:
-	@echo "Expect: Unclosed substitution for VAR (, missing)"
+	@echo "Expect: Unfinished modifier for VAR (',' missing)"
 	-@echo "VAR:${MOD_TERM}=${VAR:${MOD_TERM}}"
 
 modloop:

Index: src/usr.bin/make/unit-tests/varmod-edge.exp
diff -u src/usr.bin/make/unit-tests/varmod-edge.exp:1.7 src/usr.bin/make/unit-tests/varmod-edge.exp:1.8
--- src/usr.bin/make/unit-tests/varmod-edge.exp:1.7	Sat Aug  1 15:28:28 2020
+++ src/usr.bin/make/unit-tests/varmod-edge.exp	Sat Aug  8 13:27:42 2020
@@ -12,7 +12,7 @@ make: "varmod-edge.mk" line omitted: ok 
 make: "varmod-edge.mk" line omitted: ok eq-ext
 make: "varmod-edge.mk" line omitted: ok eq-q
 make: "varmod-edge.mk" line omitted: ok eq-bs
-make: Unclosed substitution for INP.eq-esc (= missing)
+make: Unfinished modifier for INP.eq-esc ('=' missing)
 make: "varmod-edge.mk" line omitted: ok eq-esc
 make: "varmod-edge.mk" line omitted: ok colon
 make: Unknown modifier ':'

Reply via email to