Module Name:    src
Committed By:   rillig
Date:           Sat Jun 15 20:02:45 UTC 2024

Modified Files:
        src/usr.bin/make: compat.c job.c make.h var.c

Log Message:
make: clean up collection of context information for error messages


To generate a diff of this commit:
cvs rdiff -u -r1.258 -r1.259 src/usr.bin/make/compat.c
cvs rdiff -u -r1.475 -r1.476 src/usr.bin/make/job.c
cvs rdiff -u -r1.338 -r1.339 src/usr.bin/make/make.h
cvs rdiff -u -r1.1119 -r1.1120 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/compat.c
diff -u src/usr.bin/make/compat.c:1.258 src/usr.bin/make/compat.c:1.259
--- src/usr.bin/make/compat.c:1.258	Sun Jun  2 15:31:25 2024
+++ src/usr.bin/make/compat.c	Sat Jun 15 20:02:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: compat.c,v 1.258 2024/06/02 15:31:25 rillig Exp $	*/
+/*	$NetBSD: compat.c,v 1.259 2024/06/15 20:02:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -91,7 +91,7 @@
 #include "pathnames.h"
 
 /*	"@(#)compat.c	8.2 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: compat.c,v 1.258 2024/06/02 15:31:25 rillig Exp $");
+MAKE_RCSID("$NetBSD: compat.c,v 1.259 2024/06/15 20:02:45 rillig Exp $");
 
 static GNode *curTarg = NULL;
 static pid_t compatChild;
@@ -251,9 +251,7 @@ Compat_RunCommand(const char *cmdp, GNod
 	errCheck = !(gn->type & OP_IGNORE);
 	doIt = false;
 
-	EvalStack_Push(gn->name, NULL, NULL);
-	cmdStart = Var_Subst(cmd, gn, VARE_EVAL);
-	EvalStack_Pop();
+	cmdStart = Var_SubstInTarget(cmd, gn);
 	/* TODO: handle errors */
 
 	if (cmdStart[0] == '\0') {

Index: src/usr.bin/make/job.c
diff -u src/usr.bin/make/job.c:1.475 src/usr.bin/make/job.c:1.476
--- src/usr.bin/make/job.c:1.475	Sun Jun  2 15:31:25 2024
+++ src/usr.bin/make/job.c	Sat Jun 15 20:02:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: job.c,v 1.475 2024/06/02 15:31:25 rillig Exp $	*/
+/*	$NetBSD: job.c,v 1.476 2024/06/15 20:02:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -141,7 +141,7 @@
 #include "trace.h"
 
 /*	"@(#)job.c	8.2 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: job.c,v 1.475 2024/06/02 15:31:25 rillig Exp $");
+MAKE_RCSID("$NetBSD: job.c,v 1.476 2024/06/15 20:02:45 rillig Exp $");
 
 /*
  * A shell defines how the commands are run.  All commands for a target are
@@ -901,9 +901,7 @@ JobWriteCommand(Job *job, ShellWriter *w
 
 	run = GNode_ShouldExecute(job->node);
 
-	EvalStack_Push(job->node->name, NULL, NULL);
-	xcmd = Var_Subst(ucmd, job->node, VARE_EVAL);
-	EvalStack_Pop();
+	xcmd = Var_SubstInTarget(ucmd, job->node);
 	/* TODO: handle errors */
 	xcmdStart = xcmd;
 
@@ -1030,9 +1028,7 @@ JobSaveCommands(Job *job)
 		 * variables such as .TARGET, .IMPSRC.  It is not intended to
 		 * expand the other variables as well; see deptgt-end.mk.
 		 */
-		EvalStack_Push(job->node->name, NULL, NULL);
-		expanded_cmd = Var_Subst(cmd, job->node, VARE_EVAL);
-		EvalStack_Pop();
+		expanded_cmd = Var_SubstInTarget(cmd, job->node);
 		/* TODO: handle errors */
 		Lst_Append(&Targ_GetEndNode()->commands, expanded_cmd);
 		Parse_RegisterCommand(expanded_cmd);

Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.338 src/usr.bin/make/make.h:1.339
--- src/usr.bin/make/make.h:1.338	Sun Jun  2 15:31:26 2024
+++ src/usr.bin/make/make.h	Sat Jun 15 20:02:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: make.h,v 1.338 2024/06/02 15:31:26 rillig Exp $	*/
+/*	$NetBSD: make.h,v 1.339 2024/06/15 20:02:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -1018,6 +1018,7 @@ FStr Var_Value(GNode *, const char *) MA
 const char *GNode_ValueDirect(GNode *, const char *) MAKE_ATTR_USE;
 FStr Var_Parse(const char **, GNode *, VarEvalMode);
 char *Var_Subst(const char *, GNode *, VarEvalMode);
+char *Var_SubstInTarget(const char *, GNode *);
 void Var_Expand(FStr *, GNode *, VarEvalMode);
 void Var_Stats(void);
 void Var_Dump(GNode *);
@@ -1032,8 +1033,6 @@ void Global_Append(const char *, const c
 void Global_Delete(const char *);
 void Global_Set_ReadOnly(const char *, const char *);
 
-void EvalStack_Push(const char *, const char *, const char *);
-void EvalStack_Pop(void);
 const char *EvalStack_Details(void);
 
 /* util.c */

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.1119 src/usr.bin/make/var.c:1.1120
--- src/usr.bin/make/var.c:1.1119	Sun Jun  2 15:31:26 2024
+++ src/usr.bin/make/var.c	Sat Jun 15 20:02:45 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.1119 2024/06/02 15:31:26 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.1120 2024/06/15 20:02:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -132,7 +132,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1119 2024/06/02 15:31:26 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1120 2024/06/15 20:02:45 rillig Exp $");
 
 /*
  * Variables are defined using one of the VAR=value assignments.  Their
@@ -253,10 +253,15 @@ typedef struct SepBuf {
 	char sep;
 } SepBuf;
 
+typedef enum {
+	VSK_TARGET,
+	VSK_VARNAME,
+	VSK_EXPR
+} EvalStackElementKind;
+
 typedef struct {
-	const char *target;
-	const char *varname;
-	const char *expr;
+	EvalStackElementKind kind;
+	const char *str;
 } EvalStackElement;
 
 typedef struct {
@@ -335,21 +340,20 @@ static const char VarEvalMode_Name[][32]
 static EvalStack evalStack;
 
 
-void
-EvalStack_Push(const char *target, const char *expr, const char *varname)
+static void
+EvalStack_Push(EvalStackElementKind kind, const char *str)
 {
 	if (evalStack.len >= evalStack.cap) {
 		evalStack.cap = 16 + 2 * evalStack.cap;
 		evalStack.elems = bmake_realloc(evalStack.elems,
 		    evalStack.cap * sizeof(*evalStack.elems));
 	}
-	evalStack.elems[evalStack.len].target = target;
-	evalStack.elems[evalStack.len].expr = expr;
-	evalStack.elems[evalStack.len].varname = varname;
+	evalStack.elems[evalStack.len].kind = kind;
+	evalStack.elems[evalStack.len].str = str;
 	evalStack.len++;
 }
 
-void
+static void
 EvalStack_Pop(void)
 {
 	assert(evalStack.len > 0);
@@ -366,21 +370,12 @@ EvalStack_Details(void)
 	buf->len = 0;
 	for (i = 0; i < evalStack.len; i++) {
 		EvalStackElement *elem = evalStack.elems + i;
-		if (elem->target != NULL) {
-			Buf_AddStr(buf, "in target \"");
-			Buf_AddStr(buf, elem->target);
-			Buf_AddStr(buf, "\": ");
-		}
-		if (elem->expr != NULL) {
-			Buf_AddStr(buf, "while evaluating \"");
-			Buf_AddStr(buf, elem->expr);
-			Buf_AddStr(buf, "\": ");
-		}
-		if (elem->varname != NULL) {
-			Buf_AddStr(buf, "while evaluating variable \"");
-			Buf_AddStr(buf, elem->varname);
-			Buf_AddStr(buf, "\": ");
-		}
+		Buf_AddStr(buf,
+		    elem->kind == VSK_TARGET ? "in target \"" :
+		    elem->kind == VSK_EXPR ? "while evaluating \"" :
+		    "while evaluating variable \"");
+		Buf_AddStr(buf, elem->str);
+		Buf_AddStr(buf, "\": ");
 	}
 	return buf->len > 0 ? buf->data : "";
 }
@@ -4554,9 +4549,9 @@ Var_Parse(const char **pp, GNode *scope,
 	expr.value = FStr_InitRefer(v->val.data);
 
 	if (expr.name[0] != '\0')
-		EvalStack_Push(NULL, NULL, expr.name);
+		EvalStack_Push(VSK_VARNAME, expr.name);
 	else
-		EvalStack_Push(NULL, start, NULL);
+		EvalStack_Push(VSK_EXPR, start);
 
 	/*
 	 * Before applying any modifiers, expand any nested expressions from
@@ -4734,6 +4729,16 @@ Var_Subst(const char *str, GNode *scope,
 	return Buf_DoneData(&res);
 }
 
+char *
+Var_SubstInTarget(const char *str, GNode *scope)
+{
+	char *res;
+	EvalStack_Push(VSK_TARGET, scope->name);
+	res = Var_Subst(str, scope, VARE_EVAL);
+	EvalStack_Pop();
+	return res;
+}
+
 void
 Var_Expand(FStr *str, GNode *scope, VarEvalMode emode)
 {

Reply via email to