Module Name:    src
Committed By:   rillig
Date:           Thu Aug 20 07:01:39 UTC 2020

Modified Files:
        src/usr.bin/make: var.c

Log Message:
make(1): remove VARP_SUB_MATCHED

This flag didn't really belong to the other flags.  The other flags are
set during parsing and are then left as-is by ModifyWord_Subst and
ModifyWord_SubstRegex.

It's clearer to use a separate variable for storing whether there was a
match already.


To generate a diff of this commit:
cvs rdiff -u -r1.451 -r1.452 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.451 src/usr.bin/make/var.c:1.452
--- src/usr.bin/make/var.c:1.451	Thu Aug 20 06:48:18 2020
+++ src/usr.bin/make/var.c	Thu Aug 20 07:01:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.451 2020/08/20 06:48:18 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.452 2020/08/20 07:01:39 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
  */
 
 #ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.451 2020/08/20 06:48:18 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.452 2020/08/20 07:01:39 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.451 2020/08/20 06:48:18 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.452 2020/08/20 07:01:39 rillig Exp $");
 #endif
 #endif /* not lint */
 #endif
@@ -277,9 +277,8 @@ typedef enum {
 typedef enum {
     VARP_SUB_GLOBAL	= 0x01,	/* Apply substitution globally */
     VARP_SUB_ONE	= 0x02,	/* Apply substitution to one word */
-    VARP_SUB_MATCHED	= 0x04,	/* There was a match */
-    VARP_ANCHOR_START	= 0x08,	/* Match at start of word */
-    VARP_ANCHOR_END	= 0x10	/* Match at end of word */
+    VARP_ANCHOR_START	= 0x04,	/* Match at start of word */
+    VARP_ANCHOR_END	= 0x08	/* Match at end of word */
 } VarPatternFlags;
 
 typedef enum {
@@ -1269,6 +1268,7 @@ typedef struct {
     const char	*rhs;
     size_t	rhsLen;
     VarPatternFlags pflags;
+    Boolean	matched;
 } ModifyWord_SubstArgs;
 
 /* Callback for ModifyWords to implement the :S,from,to, modifier.
@@ -1280,7 +1280,7 @@ ModifyWord_Subst(const char *word, SepBu
     ModifyWord_SubstArgs *args = data;
     const char *match;
 
-    if ((args->pflags & VARP_SUB_ONE) && (args->pflags & VARP_SUB_MATCHED))
+    if ((args->pflags & VARP_SUB_ONE) && args->matched)
 	goto nosub;
 
     if (args->pflags & VARP_ANCHOR_START) {
@@ -1293,11 +1293,11 @@ ModifyWord_Subst(const char *word, SepBu
 		goto nosub;
 
 	    SepBuf_AddBytes(buf, args->rhs, args->rhsLen);
-	    args->pflags |= VARP_SUB_MATCHED;
+	    args->matched = TRUE;
 	} else {
 	    SepBuf_AddBytes(buf, args->rhs, args->rhsLen);
 	    SepBuf_AddBytes(buf, word + args->lhsLen, wordLen - args->lhsLen);
-	    args->pflags |= VARP_SUB_MATCHED;
+	    args->matched = TRUE;
 	}
 	return;
     }
@@ -1314,7 +1314,7 @@ ModifyWord_Subst(const char *word, SepBu
 
 	SepBuf_AddBytesBetween(buf, word, start);
 	SepBuf_AddBytes(buf, args->rhs, args->rhsLen);
-	args->pflags |= VARP_SUB_MATCHED;
+	args->matched = TRUE;
 	return;
     }
 
@@ -1322,7 +1322,7 @@ ModifyWord_Subst(const char *word, SepBu
     while ((match = Str_FindSubstring(word, args->lhs)) != NULL) {
 	SepBuf_AddBytesBetween(buf, word, match);
 	SepBuf_AddBytes(buf, args->rhs, args->rhsLen);
-	args->pflags |= VARP_SUB_MATCHED;
+	args->matched = TRUE;
 	wordLen -= (size_t)(match - word) + args->lhsLen;
 	word += (size_t)(match - word) + args->lhsLen;
 	if (wordLen == 0 || !(args->pflags & VARP_SUB_GLOBAL))
@@ -1349,6 +1349,7 @@ typedef struct {
     size_t	   nsub;
     char 	  *replace;
     VarPatternFlags pflags;
+    Boolean	   matched;
 } ModifyWord_SubstRegexArgs;
 
 /* Callback for ModifyWords to implement the :C/from/to/ modifier.
@@ -1363,7 +1364,7 @@ ModifyWord_SubstRegex(const char *word, 
     int flags = 0;
     regmatch_t m[10];
 
-    if ((args->pflags & VARP_SUB_ONE) && (args->pflags & VARP_SUB_MATCHED))
+    if ((args->pflags & VARP_SUB_ONE) && args->matched)
 	goto nosub;
 
 tryagain:
@@ -1371,7 +1372,7 @@ tryagain:
 
     switch (xrv) {
     case 0:
-	args->pflags |= VARP_SUB_MATCHED;
+	args->matched = TRUE;
 	SepBuf_AddBytes(buf, wp, (size_t)m[0].rm_so);
 
 	for (rp = args->replace; *rp; rp++) {
@@ -2316,6 +2317,7 @@ ApplyModifier_Subst(const char **pp, App
     *pp += 2;
 
     args.pflags = 0;
+    args.matched = FALSE;
 
     /*
      * If pattern begins with '^', it is anchored to the
@@ -2401,6 +2403,7 @@ ApplyModifier_Regex(const char **pp, App
     }
 
     args.pflags = 0;
+    args.matched = FALSE;
     oneBigWord = st->oneBigWord;
     for (;; (*pp)++) {
 	switch (**pp) {

Reply via email to