Module Name: src
Committed By: rillig
Date: Wed Feb 3 14:33:09 UTC 2021
Modified Files:
src/usr.bin/make: nonints.h parse.c var.c
Log Message:
make: split Var_Exists into plain Var_Exists and Var_ExistsExpand
Most previous calls to Var_Exists use constant variable names. Only the
two calls in parse.c need to expand the variable name.
It may be a good idea to expand the variable name once in VarAssign_Eval
instead of repeating the expansion in each of its special cases.
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.194 -r1.195 src/usr.bin/make/nonints.h
cvs rdiff -u -r1.542 -r1.543 src/usr.bin/make/parse.c
cvs rdiff -u -r1.795 -r1.796 src/usr.bin/make/var.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/make/nonints.h
diff -u src/usr.bin/make/nonints.h:1.194 src/usr.bin/make/nonints.h:1.195
--- src/usr.bin/make/nonints.h:1.194 Wed Feb 3 13:53:12 2021
+++ src/usr.bin/make/nonints.h Wed Feb 3 14:33:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: nonints.h,v 1.194 2021/02/03 13:53:12 rillig Exp $ */
+/* $NetBSD: nonints.h,v 1.195 2021/02/03 14:33:09 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -379,6 +379,7 @@ void Var_Append(const char *, const char
void Var_AppendExpand(const char *, const char *, GNode *);
void Global_Append(const char *, const char *);
Boolean Var_Exists(const char *, GNode *);
+Boolean Var_ExistsExpand(const char *, GNode *);
FStr Var_Value(const char *, GNode *);
const char *Var_ValueDirect(const char *, GNode *);
VarParseResult Var_Parse(const char **, GNode *, VarEvalFlags, FStr *);
Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.542 src/usr.bin/make/parse.c:1.543
--- src/usr.bin/make/parse.c:1.542 Wed Feb 3 13:53:12 2021
+++ src/usr.bin/make/parse.c Wed Feb 3 14:33:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.542 2021/02/03 13:53:12 rillig Exp $ */
+/* $NetBSD: parse.c,v 1.543 2021/02/03 14:33:09 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -109,7 +109,7 @@
#include "pathnames.h"
/* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: parse.c,v 1.542 2021/02/03 13:53:12 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.543 2021/02/03 14:33:09 rillig Exp $");
/* types and constants */
@@ -1897,7 +1897,7 @@ VarAssign_EvalSubst(const char *name, co
* TODO: Add a test that demonstrates why this code is needed,
* apart from making the debug log longer.
*/
- if (!Var_Exists(name, ctxt))
+ if (!Var_ExistsExpand(name, ctxt))
Var_Set(name, "", ctxt);
(void)Var_Subst(uvalue, ctxt,
@@ -1960,7 +1960,7 @@ VarAssign_Eval(const char *name, VarAssi
else if (op == VAR_SHELL)
VarAssign_EvalShell(name, uvalue, ctxt, &avalue);
else {
- if (op == VAR_DEFAULT && Var_Exists(name, ctxt))
+ if (op == VAR_DEFAULT && Var_ExistsExpand(name, ctxt))
return FALSE;
/* Normal assignment -- just do it. */
Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.795 src/usr.bin/make/var.c:1.796
--- src/usr.bin/make/var.c:1.795 Wed Feb 3 13:53:12 2021
+++ src/usr.bin/make/var.c Wed Feb 3 14:33:09 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.795 2021/02/03 13:53:12 rillig Exp $ */
+/* $NetBSD: var.c,v 1.796 2021/02/03 14:33:09 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -89,7 +89,9 @@
* necessary. A space is placed between the old value and
* the new one.
*
- * Var_Exists See if a variable exists.
+ * Var_Exists
+ * Var_ExistsExpand
+ * See if a variable exists.
*
* Var_Value Return the unexpanded value of a variable, or NULL if
* the variable is undefined.
@@ -133,7 +135,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.795 2021/02/03 13:53:12 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.796 2021/02/03 14:33:09 rillig Exp $");
typedef enum VarFlags {
VAR_NONE = 0,
@@ -1146,6 +1148,17 @@ Global_Append(const char *name, const ch
Var_Append(name, value, VAR_GLOBAL);
}
+Boolean
+Var_Exists(const char *name, GNode *ctxt)
+{
+ Var *v = VarFind(name, ctxt, TRUE);
+ if (v == NULL)
+ return FALSE;
+
+ (void)VarFreeEnv(v, TRUE);
+ return TRUE;
+}
+
/*
* See if the given variable exists, in the given context or in other
* fallback contexts.
@@ -1155,10 +1168,10 @@ Global_Append(const char *name, const ch
* ctxt Context in which to start search
*/
Boolean
-Var_Exists(const char *name, GNode *ctxt)
+Var_ExistsExpand(const char *name, GNode *ctxt)
{
FStr varname = FStr_InitRefer(name);
- Var *v;
+ Boolean exists;
if (strchr(varname.str, '$') != NULL) {
char *expanded;
@@ -1167,13 +1180,9 @@ Var_Exists(const char *name, GNode *ctxt
varname = FStr_InitOwn(expanded);
}
- v = VarFind(varname.str, ctxt, TRUE);
+ exists = Var_Exists(varname.str, ctxt);
FStr_Done(&varname);
- if (v == NULL)
- return FALSE;
-
- (void)VarFreeEnv(v, TRUE);
- return TRUE;
+ return exists;
}
/*