Module Name:    src
Committed By:   rillig
Date:           Sun Mar 14 20:12:16 UTC 2021

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

Log Message:
make: separate parsing and evaluating for modifier '::='

No functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.880 -r1.881 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.880 src/usr.bin/make/var.c:1.881
--- src/usr.bin/make/var.c:1.880	Sun Mar 14 20:09:26 2021
+++ src/usr.bin/make/var.c	Sun Mar 14 20:12:16 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.880 2021/03/14 20:09:26 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.881 2021/03/14 20:12:16 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -140,7 +140,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.880 2021/03/14 20:09:26 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.881 2021/03/14 20:12:16 rillig Exp $");
 
 typedef enum VarFlags {
 	VFL_NONE	= 0,
@@ -3372,8 +3372,6 @@ ApplyModifier_Assign(const char **pp, Ap
 	char *val;
 	VarParseResult res;
 
-	/* TODO: separate parsing from evaluating */
-
 	const char *mod = *pp;
 	const char *op = mod + 1;
 
@@ -3389,15 +3387,6 @@ ok:
 		return AMR_BAD;
 	}
 
-	scope = expr->scope;	/* scope where v belongs */
-	if (expr->defined == DEF_REGULAR && expr->scope != SCOPE_GLOBAL) {
-		Var *gv = VarFind(expr->var->name.str, expr->scope, FALSE);
-		if (gv == NULL)
-			scope = SCOPE_GLOBAL;
-		else
-			VarFreeEnv(gv);
-	}
-
 	switch (op[0]) {
 	case '+':
 	case '?':
@@ -3415,6 +3404,15 @@ ok:
 
 	(*pp)--;		/* Go back to the st->endc. */
 
+	scope = expr->scope;	/* scope where v belongs */
+	if (expr->defined == DEF_REGULAR && expr->scope != SCOPE_GLOBAL) {
+		Var *gv = VarFind(expr->var->name.str, expr->scope, FALSE);
+		if (gv == NULL)
+			scope = SCOPE_GLOBAL;
+		else
+			VarFreeEnv(gv);
+	}
+
 	/* XXX: Expanding the variable name at this point sounds wrong. */
 	if (expr->eflags & VARE_WANTRES) {
 		switch (op[0]) {

Reply via email to