Module Name: src
Committed By: rillig
Date: Sun Dec 10 19:56:53 UTC 2023
Modified Files:
src/usr.bin/make: var.c
Log Message:
make: clean up comments and local identifiers
No binary change, except for line numbers in assertions.
To generate a diff of this commit:
cvs rdiff -u -r1.1078 -r1.1079 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.1078 src/usr.bin/make/var.c:1.1079
--- src/usr.bin/make/var.c:1.1078 Sun Dec 10 18:59:50 2023
+++ src/usr.bin/make/var.c Sun Dec 10 19:56:53 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.1078 2023/12/10 18:59:50 rillig Exp $ */
+/* $NetBSD: var.c,v 1.1079 2023/12/10 19:56:53 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -139,7 +139,7 @@
#include "metachar.h"
/* "@(#)var.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.1078 2023/12/10 18:59:50 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.1079 2023/12/10 19:56:53 rillig Exp $");
/*
* Variables are defined using one of the VAR=value assignments. Their
@@ -378,11 +378,11 @@ CanonicalVarname(Substring name)
if (Substring_Equals(name, ".TARGET"))
return Substring_InitStr(TARGET);
+ /* GNU make has an additional alias $^ == ${.ALLSRC}. */
+
if (Substring_Equals(name, ".SHELL") && shellPath == NULL)
Shell_Init();
- /* GNU make has an additional alias $^ == ${.ALLSRC}. */
-
return name;
}
@@ -911,7 +911,7 @@ Var_UnExport(bool isEnv, const char *arg
/*
* When there is a variable of the same name in the command line scope, the
- * global variable would not be visible anywhere. Therefore there is no
+ * global variable would not be visible anywhere. Therefore, there is no
* point in setting it at all.
*
* See 'scope == SCOPE_CMDLINE' in Var_SetWithFlags.
@@ -969,7 +969,7 @@ Var_SetWithFlags(GNode *scope, const cha
Var_Delete(SCOPE_GLOBAL, name);
}
if (strcmp(name, ".SUFFIXES") == 0) {
- /* special: treat as readOnly */
+ /* special: treat as read-only */
DEBUG3(VAR, "%s: %s = %s ignored (read-only)\n",
scope->name, name, val);
return;
@@ -990,12 +990,14 @@ Var_SetWithFlags(GNode *scope, const cha
ExportVar(name, VEM_PLAIN);
}
- /*
- * Any variables given on the command line are automatically exported
- * to the environment (as per POSIX standard), except for internals.
- */
if (scope == SCOPE_CMDLINE) {
v->fromCmd = true;
+
+ /*
+ * Any variables given on the command line are automatically
+ * exported to the environment (as per POSIX standard), except
+ * for internals.
+ */
if (!(flags & VAR_SET_NO_EXPORT) && name[0] != '.') {
/*
@@ -1030,15 +1032,8 @@ Var_Set(GNode *scope, const char *name,
}
/*
- * Set the variable name to the value val in the given scope.
- *
- * If the variable doesn't yet exist, it is created.
- * Otherwise the new value overwrites and replaces the old value.
- *
- * Input:
- * scope scope in which to set it
- * name name of the variable to set, is expanded once
- * val value to give to the variable
+ * In the scope, expand the variable name once, then create the variable or
+ * replace its value.
*/
void
Var_SetExpand(GNode *scope, const char *name, const char *val)
@@ -1445,14 +1440,6 @@ ModifyWord_SysVSubst(Substring word, Sep
}
#endif
-
-struct ModifyWord_SubstArgs {
- Substring lhs;
- Substring rhs;
- PatternFlags pflags;
- bool matched;
-};
-
static const char *
Substring_Find(Substring haystack, Substring needle)
{
@@ -1466,6 +1453,13 @@ Substring_Find(Substring haystack, Subst
return NULL;
}
+struct ModifyWord_SubstArgs {
+ Substring lhs;
+ Substring rhs;
+ PatternFlags pflags;
+ bool matched;
+};
+
/*
* Callback for ModifyWords to implement the :S,from,to, modifier.
* Perform a string substitution on the given word.
@@ -1915,8 +1909,8 @@ FormatTime(const char *fmt, time_t t, bo
* XXX: As of 2020-11-15, some modifiers such as :S, :C, :P, :L do not
* need to be followed by a ':' or endc; this was an unintended mistake.
*
- * If parsing fails because of a missing delimiter (as in the :S, :C or :@
- * modifiers), return AMR_CLEANUP.
+ * If parsing fails because of a missing delimiter after a modifier part (as
+ * in the :S, :C or :@ modifiers), return AMR_CLEANUP.
*
* If parsing fails because the modifier is unknown, return AMR_UNKNOWN to
* try the SysV modifier ${VAR:from=to} as fallback. This should only be
@@ -3078,8 +3072,8 @@ ApplyModifier_ToSep(const char **pp, Mod
const char *sep = *pp + 2;
/*
- * Even in parse-only mode, proceed as normal since there is
- * neither any observable side effect nor a performance penalty.
+ * Even in parse-only mode, apply the side effects, since the side
+ * effects are neither observable nor is there a performance penalty.
* Checking for wantRes for every single piece of code in here
* would make the code in this function too hard to read.
*/
@@ -3236,14 +3230,14 @@ ApplyModifier_Words(const char **pp, Mod
Expr *expr = ch->expr;
int first, last;
const char *p;
- LazyBuf estrBuf;
- FStr festr;
+ LazyBuf argBuf;
+ FStr arg;
(*pp)++; /* skip the '[' */
- if (!ParseModifierPart(pp, ']', expr->emode, ch, &estrBuf))
+ if (!ParseModifierPart(pp, ']', expr->emode, ch, &argBuf))
return AMR_CLEANUP;
- festr = LazyBuf_DoneGet(&estrBuf);
- p = festr.str;
+ arg = LazyBuf_DoneGet(&argBuf);
+ p = arg.str;
if (!IsDelimiter(**pp, ch))
goto bad_modifier; /* Found junk after ']' */
@@ -3308,11 +3302,11 @@ ApplyModifier_Words(const char **pp, Mod
ch->sep, ch->oneBigWord));
ok:
- FStr_Done(&festr);
+ FStr_Done(&arg);
return AMR_OK;
bad_modifier:
- FStr_Done(&festr);
+ FStr_Done(&arg);
return AMR_BAD;
}
@@ -4047,11 +4041,11 @@ ApplySingleModifier(const char **pp, Mod
}
#if __STDC_VERSION__ >= 199901L
-#define ModChain_Literal(expr, startc, endc, sep, oneBigWord) \
+#define ModChain_Init(expr, startc, endc, sep, oneBigWord) \
(ModChain) { expr, startc, endc, sep, oneBigWord }
#else
MAKE_INLINE ModChain
-ModChain_Literal(Expr *expr, char startc, char endc, char sep, bool oneBigWord)
+ModChain_Init(Expr *expr, char startc, char endc, char sep, bool oneBigWord)
{
ModChain ch;
ch.expr = expr;
@@ -4072,7 +4066,7 @@ ApplyModifiers(
char endc /* ')' or '}'; or '\0' for indirect modifiers */
)
{
- ModChain ch = ModChain_Literal(expr, startc, endc, ' ', false);
+ ModChain ch = ModChain_Init(expr, startc, endc, ' ', false);
const char *p;
const char *mod;
@@ -4093,17 +4087,17 @@ ApplyModifiers(
ApplyModifierResult res;
if (*p == '$') {
+ /*
+ * TODO: Only evaluate the expression once, no matter
+ * whether it's an indirect modifier or the initial
+ * part of a SysV modifier.
+ */
ApplyModifiersIndirectResult amir =
ApplyModifiersIndirect(&ch, &p);
if (amir == AMIR_CONTINUE)
continue;
if (amir == AMIR_OUT)
break;
- /*
- * It's neither '${VAR}:' nor '${VAR}}'. Try to parse
- * it as a SysV modifier, as that is the only modifier
- * that can start with '$'.
- */
}
mod = p;
@@ -4120,7 +4114,7 @@ ApplyModifiers(
return;
bad_modifier:
- /* XXX: The modifier end is only guessed. */
+ /* Take a guess at where the modifier ends. */
Error("Bad modifier \":%.*s\" for variable \"%s\"",
(int)strcspn(mod, ":)}"), mod, expr->name);
@@ -4221,7 +4215,6 @@ ParseVarname(const char **pp, char start
if (*p == endc)
depth--;
- /* An expression inside an expression, expand. */
if (*p == '$') {
FStr nested_val = Var_Parse(&p, scope, emode);
/* TODO: handle errors */
@@ -4434,9 +4427,9 @@ ParseVarnameLong(
* variable name, such as :L or :?.
*
* Most modifiers leave this expression in the "undefined"
- * state (VES_UNDEF), only a few modifiers like :D, :U, :L,
+ * state (DEF_UNDEF), only a few modifiers like :D, :U, :L,
* :P turn this undefined expression into a defined
- * expression (VES_DEF).
+ * expression (DEF_DEFINED).
*
* In the end, after applying all modifiers, if the expression
* is still undefined, Var_Parse will return an empty string
@@ -4457,12 +4450,12 @@ ParseVarnameLong(
}
#if __STDC_VERSION__ >= 199901L
-#define Expr_Literal(name, value, emode, scope, defined) \
- { name, value, emode, scope, defined }
+#define Expr_Init(name, value, emode, scope, defined) \
+ (Expr) { name, value, emode, scope, defined }
#else
MAKE_INLINE Expr
-Expr_Literal(const char *name, FStr value,
- VarEvalMode emode, GNode *scope, ExprDefined defined)
+Expr_Init(const char *name, FStr value,
+ VarEvalMode emode, GNode *scope, ExprDefined defined)
{
Expr expr;
@@ -4477,8 +4470,7 @@ Expr_Literal(const char *name, FStr valu
/*
* Expressions of the form ${:U...} with a trivial value are often generated
- * by .for loops and are boring, therefore parse and evaluate them in a fast
- * lane without debug logging.
+ * by .for loops and are boring, so evaluate them without debug logging.
*/
static bool
Var_Parse_FastLane(const char **pp, VarEvalMode emode, FStr *out_value)
@@ -4505,18 +4497,16 @@ Var_Parse_FastLane(const char **pp, VarE
}
/*
- * Given the start of an expression (such as $v, $(VAR),
- * ${VAR:Mpattern}), extract the variable name and value, and the modifiers,
- * if any. While doing that, apply the modifiers to the value of the
- * expression, forming its final value. A few of the modifiers such as :!cmd!
- * or ::= have side effects.
+ * Given the start of an expression (such as $v, $(VAR), ${VAR:Mpattern}),
+ * extract the variable name and the modifiers, if any. While parsing, apply
+ * the modifiers to the value of the expression.
*
* Input:
* *pp The string to parse.
* When called from CondParser_FuncCallEmpty, it can
* also point to the "y" of "empty(VARNAME:Modifiers)".
- * scope The scope for finding variables
- * emode Controls the exact details of parsing and evaluation
+ * scope The scope for finding variables.
+ * emode Controls the exact details of parsing and evaluation.
*
* Output:
* *pp The position where to continue parsing.
@@ -4557,15 +4547,13 @@ Var_Parse(const char **pp, GNode *scope,
bool dynamic;
const char *extramodifiers;
Var *v;
- Expr expr = Expr_Literal(NULL, FStr_InitRefer(NULL), emode,
+ Expr expr = Expr_Init(NULL, FStr_InitRefer(NULL), emode,
scope, DEF_REGULAR);
FStr val;
if (Var_Parse_FastLane(pp, emode, &val))
return val;
- /* TODO: Reduce computations in parse-only mode. */
-
DEBUG2(VAR, "Var_Parse: %s (%s)\n", start, VarEvalMode_Name[emode]);
val = FStr_InitRefer(NULL);
@@ -4776,7 +4764,6 @@ Var_Subst(const char *str, GNode *scope,
* Set true if an error has already been reported, to prevent a
* plethora of messages when recursing
*/
- /* See varparse-errors.mk for why the 'static' is necessary here. */
static bool errorReported;
Buf_Init(&res);