Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): eliminate ApplyModifiersState.tstr



details:   https://anonhg.NetBSD.org/src/rev/c4d4b30ac9c5
branches:  trunk
changeset: 974115:c4d4b30ac9c5
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Jul 24 07:24:21 2020 +0000

description:
make(1): eliminate ApplyModifiersState.tstr

This field always pointed to the beginning of the current modifier.
Therefore a better name is "mod", and there is no need to store it in the
shared state.

diffstat:

 usr.bin/make/var.c |  303 +++++++++++++++++++++++++---------------------------
 1 files changed, 148 insertions(+), 155 deletions(-)

diffs (truncated from 826 to 300 lines):

diff -r 19f6d6cb5435 -r c4d4b30ac9c5 usr.bin/make/var.c
--- a/usr.bin/make/var.c        Fri Jul 24 06:12:21 2020 +0000
+++ b/usr.bin/make/var.c        Fri Jul 24 07:24:21 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: var.c,v 1.298 2020/07/23 20:24:22 rillig Exp $ */
+/*     $NetBSD: var.c,v 1.299 2020/07/24 07:24:21 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.298 2020/07/23 20:24:22 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.299 2020/07/24 07:24:21 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.298 2020/07/23 20:24:22 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.299 2020/07/24 07:24:21 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -2081,7 +2081,6 @@
 
     /* read-write */
     char *nstr;
-    const char *tstr;
     const char *start;
     const char *cp;            /* Secondary pointer into str (place marker
                                 * for tstr) */
@@ -2104,11 +2103,11 @@
 
 /* :@var@...${var}...@ */
 static Boolean
-ApplyModifier_Loop(ApplyModifiersState *st) {
+ApplyModifier_Loop(const char *mod, ApplyModifiersState *st) {
     ModifyWord_LoopArgs args;
 
     args.ctx = st->ctxt;
-    st->cp = ++st->tstr;
+    st->cp = mod + 1;
     char delim = '@';
     args.tvar = ParseModifierPart(st->ctxt, &st->cp, delim,
                                  st->eflags | VARE_NOSUBST,
@@ -2142,14 +2141,14 @@
 
 /* :Ddefined or :Uundefined */
 static void
-ApplyModifier_Defined(ApplyModifiersState *st)
+ApplyModifier_Defined(const char *mod, ApplyModifiersState *st)
 {
     Buffer buf;                        /* Buffer for patterns */
     VarEvalFlags neflags;
 
     if (st->eflags & VARE_WANTRES) {
        Boolean wantres;
-       if (*st->tstr == 'U')
+       if (*mod == 'U')
            wantres = ((st->v->flags & VAR_JUNK) != 0);
        else
            wantres = ((st->v->flags & VAR_JUNK) == 0);
@@ -2167,7 +2166,7 @@
      * The result is left in the Buffer buf.
      */
     Buf_Init(&buf, 0);
-    for (st->cp = st->tstr + 1;
+    for (st->cp = mod + 1;
         *st->cp != st->endc && *st->cp != ':' && *st->cp != '\0';
         st->cp++) {
        if (*st->cp == '\\' &&
@@ -2207,20 +2206,20 @@
 
 /* :gmtime */
 static Boolean
-ApplyModifier_Gmtime(ApplyModifiersState *st)
+ApplyModifier_Gmtime(const char *mod, ApplyModifiersState *st)
 {
     time_t utc;
     char *ep;
 
-    st->cp = st->tstr + 1;     /* make sure it is set */
-    if (!STRMOD_MATCHX(st->tstr, "gmtime", 6))
+    st->cp = mod + 1;          /* make sure it is set */
+    if (!STRMOD_MATCHX(mod, "gmtime", 6))
        return FALSE;
-    if (st->tstr[6] == '=') {
-       utc = strtoul(&st->tstr[7], &ep, 10);
+    if (mod[6] == '=') {
+       utc = strtoul(mod + 7, &ep, 10);
        st->cp = ep;
     } else {
        utc = 0;
-       st->cp = st->tstr + 6;
+       st->cp = mod + 6;
     }
     st->newStr = VarStrftime(st->nstr, 1, utc);
     st->termc = *st->cp;
@@ -2229,21 +2228,21 @@
 
 /* :localtime */
 static Boolean
-ApplyModifier_Localtime(ApplyModifiersState *st)
+ApplyModifier_Localtime(const char *mod, ApplyModifiersState *st)
 {
     time_t utc;
     char *ep;
 
-    st->cp = st->tstr + 1;     /* make sure it is set */
-    if (!STRMOD_MATCHX(st->tstr, "localtime", 9))
+    st->cp = mod + 1;  /* make sure it is set */
+    if (!STRMOD_MATCHX(mod, "localtime", 9))
        return FALSE;
 
-    if (st->tstr[9] == '=') {
-       utc = strtoul(&st->tstr[10], &ep, 10);
+    if (mod[9] == '=') {
+       utc = strtoul(mod + 10, &ep, 10);
        st->cp = ep;
     } else {
        utc = 0;
-       st->cp = st->tstr + 9;
+       st->cp = mod + 9;
     }
     st->newStr = VarStrftime(st->nstr, 0, utc);
     st->termc = *st->cp;
@@ -2252,26 +2251,24 @@
 
 /* :hash */
 static Boolean
-ApplyModifier_Hash(ApplyModifiersState *st)
+ApplyModifier_Hash(const char *mod, ApplyModifiersState *st)
 {
-    st->cp = st->tstr + 1;     /* make sure it is set */
-    if (!STRMOD_MATCH(st->tstr, "hash", 4))
+    st->cp = mod + 1;  /* make sure it is set */
+    if (!STRMOD_MATCH(mod, "hash", 4))
        return FALSE;
     st->newStr = VarHash(st->nstr);
-    st->cp = st->tstr + 4;
+    st->cp = mod + 4;
     st->termc = *st->cp;
     return TRUE;
 }
 
 /* :P */
 static void
-ApplyModifier_Path(ApplyModifiersState *st)
+ApplyModifier_Path(const char *mod, ApplyModifiersState *st)
 {
-    GNode *gn;
-
     if ((st->v->flags & VAR_JUNK) != 0)
        st->v->flags |= VAR_KEEP;
-    gn = Targ_FindNode(st->v->name, TARG_NOCREATE);
+    GNode *gn = Targ_FindNode(st->v->name, TARG_NOCREATE);
     if (gn == NULL || gn->type & OP_NOPATH) {
        st->newStr = NULL;
     } else if (gn->path) {
@@ -2281,15 +2278,15 @@
     }
     if (!st->newStr)
        st->newStr = bmake_strdup(st->v->name);
-    st->cp = ++st->tstr;
-    st->termc = *st->tstr;
+    st->cp = mod + 1;
+    st->termc = *st->cp;
 }
 
 /* :!cmd! */
 static Boolean
-ApplyModifier_Exclam(ApplyModifiersState *st)
+ApplyModifier_Exclam(const char *mod, ApplyModifiersState *st)
 {
-    st->cp = ++st->tstr;
+    st->cp = mod + 1;
     char delim = '!';
     char *cmd = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
                                  NULL, NULL, NULL);
@@ -2316,21 +2313,21 @@
 
 /* :range */
 static Boolean
-ApplyModifier_Range(ApplyModifiersState *st)
+ApplyModifier_Range(const char *mod, ApplyModifiersState *st)
 {
     int n;
     char *ep;
 
-    st->cp = st->tstr + 1;     /* make sure it is set */
-    if (!STRMOD_MATCHX(st->tstr, "range", 5))
+    st->cp = mod + 1;  /* make sure it is set */
+    if (!STRMOD_MATCHX(mod, "range", 5))
        return FALSE;
 
-    if (st->tstr[5] == '=') {
-       n = strtoul(&st->tstr[6], &ep, 10);
+    if (mod[5] == '=') {
+       n = strtoul(mod + 6, &ep, 10);
        st->cp = ep;
     } else {
        n = 0;
-       st->cp = st->tstr + 5;
+       st->cp = mod + 5;
     }
     st->newStr = VarRange(st->nstr, n);
     st->termc = *st->cp;
@@ -2339,7 +2336,7 @@
 
 /* :Mpattern or :Npattern */
 static void
-ApplyModifier_Match(ApplyModifiersState *st)
+ApplyModifier_Match(const char *mod, ApplyModifiersState *st)
 {
     Boolean copy = FALSE;      /* pattern should be, or has been, copied */
     Boolean needSubst = FALSE;
@@ -2349,7 +2346,7 @@
      * XXX This will likely not work right if $() and ${} are intermixed.
      */
     int nest = 1;
-    for (st->cp = st->tstr + 1;
+    for (st->cp = mod + 1;
         *st->cp != '\0' && !(*st->cp == ':' && nest == 1);
         st->cp++) {
        if (*st->cp == '\\' &&
@@ -2378,13 +2375,13 @@
        /*
         * Need to compress the \:'s out of the pattern, so
         * allocate enough room to hold the uncompressed
-        * pattern (note that st->cp started at st->tstr+1, so
-        * st->cp - st->tstr takes the null byte into account) and
+        * pattern (note that st->cp started at mod+1, so
+        * st->cp - mod takes the null byte into account) and
         * compress the pattern into the space.
         */
-       pattern = bmake_malloc(st->cp - st->tstr);
+       pattern = bmake_malloc(st->cp - mod);
        char *cp2;
-       for (cp2 = pattern, st->cp = st->tstr + 1;
+       for (cp2 = pattern, st->cp = mod + 1;
             st->cp < endpat;
             st->cp++, cp2++) {
            if ((*st->cp == '\\') && (st->cp+1 < endpat) &&
@@ -2399,7 +2396,7 @@
         * Either Var_Subst or ModifyWords will need a
         * nul-terminated string soon, so construct one now.
         */
-       pattern = bmake_strndup(st->tstr+1, endpat - (st->tstr + 1));
+       pattern = bmake_strndup(mod + 1, endpat - (mod + 1));
     }
     if (needSubst) {
        /* pattern contains embedded '$', so use Var_Subst to expand it. */
@@ -2410,7 +2407,7 @@
     if (DEBUG(VAR))
        fprintf(debug_file, "Pattern[%s] for [%s] is [%s]\n",
            st->v->name, st->nstr, pattern);
-    ModifyWordsCallback callback = st->tstr[0] == 'M'
+    ModifyWordsCallback callback = mod[0] == 'M'
        ? ModifyWord_Match : ModifyWord_NoMatch;
     st->newStr = ModifyWords(st->ctxt, &st->parsestate, st->nstr,
                             callback, pattern);
@@ -2419,24 +2416,24 @@
 
 /* :S,from,to, */
 static Boolean
-ApplyModifier_Subst(ApplyModifiersState *st)
+ApplyModifier_Subst(const char * const mod, ApplyModifiersState *st)
 {
     ModifyWord_SubstArgs args;
     Var_Parse_State tmpparsestate = st->parsestate;
-    char delim = st->tstr[1];
-    st->tstr += 2;
+    char delim = mod[1];
+
+    st->cp = mod + 2;
 
     /*
      * If pattern begins with '^', it is anchored to the
      * start of the word -- skip over it and flag pattern.
      */
     args.pflags = 0;
-    if (*st->tstr == '^') {
+    if (*st->cp == '^') {
        args.pflags |= VARP_ANCHOR_START;
-       st->tstr++;
+       st->cp++;
     }
 
-    st->cp = st->tstr;
     char *lhs = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
                                  &args.pflags, &args.lhsLen, NULL);
     if (lhs == NULL) {
@@ -2486,16 +2483,15 @@
 
 /* :C,from,to, */
 static Boolean
-ApplyModifier_Regex(ApplyModifiersState *st)



Home | Main Index | Thread Index | Old Index