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