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)
{