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): reduce number of parameters to ApplyMo...



details:   https://anonhg.NetBSD.org/src/rev/5383f57a7e69
branches:  trunk
changeset: 1012448:5383f57a7e69
user:      rillig <rillig%NetBSD.org@localhost>
date:      Fri Jul 31 14:54:03 2020 +0000

description:
make(1): reduce number of parameters to ApplyModifiers

This saves a call to strlen and some arithmetic operations.

diffstat:

 usr.bin/make/var.c |  35 ++++++++++++++++-------------------
 1 files changed, 16 insertions(+), 19 deletions(-)

diffs (114 lines):

diff -r dc0eb402b9d2 -r 5383f57a7e69 usr.bin/make/var.c
--- a/usr.bin/make/var.c        Fri Jul 31 14:36:58 2020 +0000
+++ b/usr.bin/make/var.c        Fri Jul 31 14:54:03 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: var.c,v 1.366 2020/07/31 14:26:22 rillig Exp $ */
+/*     $NetBSD: var.c,v 1.367 2020/07/31 14:54:03 rillig Exp $ */
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.366 2020/07/31 14:26:22 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.367 2020/07/31 14:54:03 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.366 2020/07/31 14:26:22 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.367 2020/07/31 14:54:03 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -3062,14 +3062,13 @@
  */
 static char *
 ApplyModifiers(
+    const char **pp,           /* the parsing position, updated upon return */
     char *val,                 /* the current value of the variable */
-    const char * const tstr,   /* the string to be parsed */
     int const startc,          /* '(' or '{' or '\0' */
     int const endc,            /* ')' or '}' or '\0' */
     Var * const v,             /* the variable may have its flags changed */
     GNode * const ctxt,                /* for looking up and modifying variables */
     VarEvalFlags const eflags,
-    int * const lengthPtr,     /* returns the number of skipped bytes */
     void ** const freePtr      /* free this after using the return value */
 ) {
     assert(startc == '(' || startc == '{' || startc == '\0');
@@ -3080,7 +3079,7 @@
        val, NULL, NULL, '\0', ' ', FALSE
     };
 
-    const char *p = tstr;
+    const char *p = *pp;
     while (*p != '\0' && *p != endc) {
 
        if (*p == '$') {
@@ -3112,13 +3111,12 @@
            p += rlen;
 
            if (rval != NULL && *rval) {
-               int used;
-
-               st.val = ApplyModifiers(st.val, rval, 0, 0, st.v,
-                                     st.ctxt, st.eflags, &used, freePtr);
+               const char *rval_pp = rval;
+               st.val = ApplyModifiers(&rval_pp, st.val, 0, 0, v,
+                                       ctxt, eflags, freePtr);
                if (st.val == var_Error
                    || (st.val == varNoError && (st.eflags & VARE_UNDEFERR) == 0)
-                   || strlen(rval) != (size_t) used) {
+                   || *rval_pp != '\0') {
                    free(freeIt);
                    goto out;   /* error already reported */
                }
@@ -3320,7 +3318,7 @@
        p = st.next;
     }
 out:
-    *lengthPtr = p - tstr;
+    *pp = p;
     return st.val;
 
 bad_modifier:
@@ -3328,7 +3326,7 @@
          (int)strcspn(p, ":)}"), p, st.v->name);
 
 cleanup:
-    *lengthPtr = st.next - tstr;
+    *pp = st.next;
     if (st.missing_delim != '\0')
        Error("Unclosed substitution for %s (%c missing)",
              st.v->name, st.missing_delim);
@@ -3619,21 +3617,20 @@
 
     if (nstr != NULL && (haveModifier || extramodifiers != NULL)) {
        void *extraFree;
-       int used;
 
        extraFree = NULL;
        if (extramodifiers != NULL) {
-           nstr = ApplyModifiers(nstr, extramodifiers, '(', ')',
-                                 v, ctxt, eflags, &used, &extraFree);
+           const char *em = extramodifiers;
+           nstr = ApplyModifiers(&em, nstr, '(', ')',
+                                 v, ctxt, eflags, &extraFree);
        }
 
        if (haveModifier) {
            /* Skip initial colon. */
            tstr++;
 
-           nstr = ApplyModifiers(nstr, tstr, startc, endc,
-                                 v, ctxt, eflags, &used, freePtr);
-           tstr += used;
+           nstr = ApplyModifiers(&tstr, nstr, startc, endc,
+                                 v, ctxt, eflags, freePtr);
            free(extraFree);
        } else {
            *freePtr = extraFree;



Home | Main Index | Thread Index | Old Index