Module Name: src
Committed By: rillig
Date: Tue Feb 23 15:03:56 UTC 2021
Modified Files:
src/usr.bin/make: var.c
Log Message:
make: explain non-obvious code around indirect variable modifiers
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.848 -r1.849 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.848 src/usr.bin/make/var.c:1.849
--- src/usr.bin/make/var.c:1.848 Tue Feb 23 14:27:27 2021
+++ src/usr.bin/make/var.c Tue Feb 23 15:03:56 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.848 2021/02/23 14:27:27 rillig Exp $ */
+/* $NetBSD: var.c,v 1.849 2021/02/23 15:03:56 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.848 2021/02/23 14:27:27 rillig Exp $");
+MAKE_RCSID("$NetBSD: var.c,v 1.849 2021/02/23 15:03:56 rillig Exp $");
typedef enum VarFlags {
VFL_NONE = 0,
@@ -3639,7 +3639,7 @@ typedef enum ApplyModifiersIndirectResul
/* The indirect modifiers have been applied successfully. */
AMIR_CONTINUE,
/* Fall back to the SysV modifier. */
- AMIR_APPLY_MODS,
+ AMIR_SYSV,
/* Error out. */
AMIR_OUT
} ApplyModifiersIndirectResult;
@@ -3669,7 +3669,7 @@ ApplyModifiersIndirect(ApplyModifiersSta
if (mods.str[0] != '\0' && *p != '\0' && *p != ':' && *p != st->endc) {
FStr_Done(&mods);
- return AMIR_APPLY_MODS;
+ return AMIR_SYSV;
}
DEBUG3(VAR, "Indirect modifier \"%s\" from \"%.*s\"\n",
@@ -3796,12 +3796,17 @@ ApplyModifiers(
ApplyModifierResult res;
if (*p == '$') {
- ApplyModifiersIndirectResult amir;
- amir = ApplyModifiersIndirect(&st, &p);
+ ApplyModifiersIndirectResult amir =
+ ApplyModifiersIndirect(&st, &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;