Module Name:    src
Committed By:   rillig
Date:           Sat Sep 12 19:33:02 UTC 2020

Modified Files:
        src/usr.bin/make: var.c

Log Message:
make(1): extract ShortVarValue from Var_Parse


To generate a diff of this commit:
cvs rdiff -u -r1.501 -r1.502 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/var.c
diff -u src/usr.bin/make/var.c:1.501 src/usr.bin/make/var.c:1.502
--- src/usr.bin/make/var.c:1.501	Sat Sep 12 19:24:59 2020
+++ src/usr.bin/make/var.c	Sat Sep 12 19:33:02 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.501 2020/09/12 19:24:59 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.502 2020/09/12 19:33:02 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.501 2020/09/12 19:24:59 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.502 2020/09/12 19:33:02 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.501 2020/09/12 19:24:59 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.502 2020/09/12 19:33:02 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -3302,6 +3302,33 @@ VarIsDynamic(GNode *ctxt, const char *va
     return FALSE;
 }
 
+static const char *
+ShortVarValue(char varname, const GNode *ctxt, VarEvalFlags eflags)
+{
+    if (ctxt == VAR_CMD || ctxt == VAR_GLOBAL) {
+	/*
+	 * If substituting a local variable in a non-local context,
+	 * assume it's for dynamic source stuff. We have to handle
+	 * this specially and return the longhand for the variable
+	 * with the dollar sign escaped so it makes it back to the
+	 * caller. Only four of the local variables are treated
+	 * specially as they are the only four that will be set
+	 * when dynamic sources are expanded.
+	 */
+	switch (varname) {
+	case '@':
+	    return "$(.TARGET)";
+	case '%':
+	    return "$(.MEMBER)";
+	case '*':
+	    return "$(.PREFIX)";
+	case '!':
+	    return "$(.ARCHIVE)";
+	}
+    }
+    return eflags & VARE_UNDEFERR ? var_Error : varNoError;
+}
+
 /* Skip to the end character or a colon, whichever comes first. */
 static void
 ParseVarname(const char **pp, char startc, char endc,
@@ -3431,28 +3458,7 @@ Var_Parse(const char **pp, GNode *ctxt, 
 	if (v == NULL) {
 	    *pp += 2;
 
-	    if (ctxt == VAR_CMD || ctxt == VAR_GLOBAL) {
-		/*
-		 * If substituting a local variable in a non-local context,
-		 * assume it's for dynamic source stuff. We have to handle
-		 * this specially and return the longhand for the variable
-		 * with the dollar sign escaped so it makes it back to the
-		 * caller. Only four of the local variables are treated
-		 * specially as they are the only four that will be set
-		 * when dynamic sources are expanded.
-		 */
-		switch (start[1]) {
-		case '@':
-		    return "$(.TARGET)";
-		case '%':
-		    return "$(.MEMBER)";
-		case '*':
-		    return "$(.PREFIX)";
-		case '!':
-		    return "$(.ARCHIVE)";
-		}
-	    }
-	    return (eflags & VARE_UNDEFERR) ? var_Error : varNoError;
+	    return ShortVarValue(start[1], ctxt, eflags);
 	} else {
 	    haveModifier = FALSE;
 	    p = start + 1;

Reply via email to