Module Name: src Committed By: rillig Date: Mon Jul 27 23:56:15 UTC 2020
Modified Files: src/usr.bin/make: var.c Log Message: make(1): document and reorder ApplyModifiersState To generate a diff of this commit: cvs rdiff -u -r1.349 -r1.350 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.349 src/usr.bin/make/var.c:1.350 --- src/usr.bin/make/var.c:1.349 Mon Jul 27 23:37:37 2020 +++ src/usr.bin/make/var.c Mon Jul 27 23:56:15 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.349 2020/07/27 23:37:37 rillig Exp $ */ +/* $NetBSD: var.c,v 1.350 2020/07/27 23:56:15 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: var.c,v 1.349 2020/07/27 23:37:37 rillig Exp $"; +static char rcsid[] = "$NetBSD: var.c,v 1.350 2020/07/27 23:56:15 rillig Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: var.c,v 1.349 2020/07/27 23:37:37 rillig Exp $"); +__RCSID("$NetBSD: var.c,v 1.350 2020/07/27 23:56:15 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -2036,16 +2036,24 @@ VarStrftime(const char *fmt, int zulu, t return bmake_strdup(buf); } +/* The ApplyModifier functions all work in the same way. + * They parse the modifier (often until the next colon) and store the + * updated position for the parser into st->next. + * They take the st->val and generate st->newVal from it. + * On success, they set st->termc to *st->next, redundantly. + * On failure, many of them update st->missing_delim. + */ typedef struct { - /* const parameters */ int startc; /* '\0' or '{' or '(' */ int endc; Var *v; GNode *ctxt; VarEvalFlags eflags; - /* read-write */ - char *val; + char *val; /* The value of the expression before the + * modifier is applied */ + char *newVal; /* The new value after applying the modifier + * to the expression */ const char *next; /* The position where parsing continues * after the current modifier. */ char termc; /* Character which terminated scan */ @@ -2058,8 +2066,6 @@ typedef struct { * usual behaviour of treating it as * several space-separated words). */ - /* result */ - char *newVal; /* New value to return */ } ApplyModifiersState; /* we now have some modifiers with long names */ @@ -3070,7 +3076,7 @@ ApplyModifiers(char *val, const char * c { ApplyModifiersState st = { startc, endc, v, ctxt, eflags, - val, tstr, '\0', '\0', ' ', FALSE, NULL + val, NULL, NULL, '\0', '\0', ' ', FALSE }; const char *p = tstr;