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): rename VARE_ASSIGN to VARE_KEEP_DOLLAR
details: https://anonhg.NetBSD.org/src/rev/82e403048ad4
branches: trunk
changeset: 1016118:82e403048ad4
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Nov 08 16:58:33 2020 +0000
description:
make(1): rename VARE_ASSIGN to VARE_KEEP_DOLLAR
The other flags in VarEvalFlags already describe their effects, not the
place where they are used. It's more important to know the effect.
Only a single unit test had to be adjusted. This probably means that
there are too few tests where the special effects of VARE_KEEP_DOLLAR
come into play. It could also mean that the effects are so simple and
obvious that they don't need any debug log, but that's not the case.
diffstat:
usr.bin/make/nonints.h | 32 ++++++++++++++++++--------
usr.bin/make/parse.c | 6 ++--
usr.bin/make/unit-tests/varname-dot-shell.exp | 2 +-
usr.bin/make/var.c | 17 ++++++-------
4 files changed, 34 insertions(+), 23 deletions(-)
diffs (151 lines):
diff -r 2049ad3f4d69 -r 82e403048ad4 usr.bin/make/nonints.h
--- a/usr.bin/make/nonints.h Sun Nov 08 16:47:59 2020 +0000
+++ b/usr.bin/make/nonints.h Sun Nov 08 16:58:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: nonints.h,v 1.158 2020/11/08 09:15:19 rillig Exp $ */
+/* $NetBSD: nonints.h,v 1.159 2020/11/08 16:58:33 rillig Exp $ */
/*-
* Copyright (c) 1988, 1989, 1990, 1993
@@ -215,16 +215,28 @@
typedef enum VarEvalFlags {
VARE_NONE = 0,
- /* Treat undefined variables as errors. */
- VARE_UNDEFERR = 1 << 0,
- /* Expand and evaluate variables during parsing. */
- VARE_WANTRES = 1 << 1,
- /* In an assignment using the ':=' operator, keep '$$' as '$$' instead
- * of reducing it to a single '$'.
+
+ /* Expand and evaluate variables during parsing.
*
- * See also preserveUndefined, which preserves subexpressions based on
- * undefined variables; maybe that can be converted to a flag as well. */
- VARE_ASSIGN = 1 << 2
+ * TODO: Document what Var_Parse and Var_Subst return when this flag
+ * is not set. */
+ VARE_WANTRES = 1 << 0,
+
+ /* Treat undefined variables as errors.
+ * Must only be used in combination with VARE_WANTRES. */
+ VARE_UNDEFERR = 1 << 1,
+
+ /* Keep '$$' as '$$' instead of reducing it to a single '$'.
+ *
+ * Used in variable assignments using the ':=' operator. It allows
+ * multiple such assignments to be chained without accidentally expanding
+ * '$$file' to '$file' in the first assignment and interpreting it as
+ * '${f}' followed by 'ile' in the next assignment.
+ *
+ * See also preserveUndefined, which preserves subexpressions that are
+ * based on undefined variables; maybe that can be converted to a flag
+ * as well. */
+ VARE_KEEP_DOLLAR = 1 << 2
} VarEvalFlags;
typedef enum VarSetFlags {
diff -r 2049ad3f4d69 -r 82e403048ad4 usr.bin/make/parse.c
--- a/usr.bin/make/parse.c Sun Nov 08 16:47:59 2020 +0000
+++ b/usr.bin/make/parse.c Sun Nov 08 16:58:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.434 2020/11/08 15:07:37 rillig Exp $ */
+/* $NetBSD: parse.c,v 1.435 2020/11/08 16:58:33 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -117,7 +117,7 @@
#include "pathnames.h"
/* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: parse.c,v 1.434 2020/11/08 15:07:37 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.435 2020/11/08 16:58:33 rillig Exp $");
/* types and constants */
@@ -1923,7 +1923,7 @@
if (!Var_Exists(name, ctxt))
Var_Set(name, "", ctxt);
- (void)Var_Subst(uvalue, ctxt, VARE_WANTRES|VARE_ASSIGN, &evalue);
+ (void)Var_Subst(uvalue, ctxt, VARE_WANTRES|VARE_KEEP_DOLLAR, &evalue);
/* TODO: handle errors */
preserveUndefined = savedPreserveUndefined;
avalue = evalue;
diff -r 2049ad3f4d69 -r 82e403048ad4 usr.bin/make/unit-tests/varname-dot-shell.exp
--- a/usr.bin/make/unit-tests/varname-dot-shell.exp Sun Nov 08 16:47:59 2020 +0000
+++ b/usr.bin/make/unit-tests/varname-dot-shell.exp Sun Nov 08 16:58:33 2020 +0000
@@ -1,6 +1,6 @@
ParseReadLine (10): 'ORIG_SHELL:= ${.SHELL}'
Global:ORIG_SHELL =
-Var_Parse: ${.SHELL} with VARE_WANTRES|VARE_ASSIGN
+Var_Parse: ${.SHELL} with VARE_WANTRES|VARE_KEEP_DOLLAR
Global:delete .SHELL (not found)
Command:.SHELL = (details omitted)
Global:ORIG_SHELL = (details omitted)
diff -r 2049ad3f4d69 -r 82e403048ad4 usr.bin/make/var.c
--- a/usr.bin/make/var.c Sun Nov 08 16:47:59 2020 +0000
+++ b/usr.bin/make/var.c Sun Nov 08 16:58:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.676 2020/11/08 15:07:37 rillig Exp $ */
+/* $NetBSD: var.c,v 1.677 2020/11/08 16:58:33 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -130,7 +130,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.676 2020/11/08 15:07:37 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.677 2020/11/08 16:58:33 rillig Exp $");
#define VAR_DEBUG1(fmt, arg1) DEBUG1(VAR, fmt, arg1)
#define VAR_DEBUG2(fmt, arg1, arg2) DEBUG2(VAR, fmt, arg1, arg2)
@@ -138,7 +138,7 @@
#define VAR_DEBUG4(fmt, arg1, arg2, arg3, arg4) DEBUG4(VAR, fmt, arg1, arg2, arg3, arg4)
ENUM_FLAGS_RTTI_3(VarEvalFlags,
- VARE_UNDEFERR, VARE_WANTRES, VARE_ASSIGN);
+ VARE_UNDEFERR, VARE_WANTRES, VARE_KEEP_DOLLAR);
/*
* This lets us tell if we have replaced the original environ
@@ -1922,7 +1922,7 @@
const char *nested_p = p;
const char *nested_val;
void *nested_val_freeIt;
- VarEvalFlags nested_eflags = eflags & ~(unsigned)VARE_ASSIGN;
+ VarEvalFlags nested_eflags = eflags & ~(unsigned)VARE_KEEP_DOLLAR;
(void)Var_Parse(&nested_p, st->ctxt, nested_eflags,
&nested_val, &nested_val_freeIt);
@@ -2980,7 +2980,8 @@
delim = st->startc == '(' ? ')' : '}';
/* TODO: Add test for using the ::= modifier in a := assignment line.
- * Probably st->eflags should be passed down without VARE_ASSIGN here. */
+ * Probably st->eflags should be passed down without VARE_KEEP_DOLLAR
+ * here. */
res = ParseModifierPart(pp, delim, st->eflags, st, &val, NULL, NULL, NULL);
if (res != VPR_OK)
return AMR_CLEANUP;
@@ -3946,9 +3947,7 @@
* expanded.
* ctxt The context in which to start searching for
* variables. The other contexts are searched as well.
- * eflags VARE_UNDEFERR if undefineds are an error
- * VARE_WANTRES if we actually want the result
- * VARE_ASSIGN if we are in a := assignment
+ * eflags Special effects during expansion.
*/
VarParseResult
Var_Subst(const char *str, GNode *ctxt, VarEvalFlags eflags, char **out_res)
@@ -3966,7 +3965,7 @@
while (*p != '\0') {
if (p[0] == '$' && p[1] == '$') {
/* A dollar sign may be escaped with another dollar sign. */
- if (save_dollars && (eflags & VARE_ASSIGN))
+ if (save_dollars && (eflags & VARE_KEEP_DOLLAR))
Buf_AddByte(&buf, '$');
Buf_AddByte(&buf, '$');
p += 2;
Home |
Main Index |
Thread Index |
Old Index