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;
 }
 
 /*

Reply via email to