Module Name:    src
Committed By:   rillig
Date:           Sun Oct 18 20:14:27 UTC 2020

Modified Files:
        src/usr.bin/make: nonints.h parse.c

Log Message:
make(1): remove redundant code for determining the assignment operator


To generate a diff of this commit:
cvs rdiff -u -r1.143 -r1.144 src/usr.bin/make/nonints.h
cvs rdiff -u -r1.388 -r1.389 src/usr.bin/make/parse.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/nonints.h
diff -u src/usr.bin/make/nonints.h:1.143 src/usr.bin/make/nonints.h:1.144
--- src/usr.bin/make/nonints.h:1.143	Sun Oct 18 17:19:54 2020
+++ src/usr.bin/make/nonints.h	Sun Oct 18 20:14:27 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: nonints.h,v 1.143 2020/10/18 17:19:54 rillig Exp $	*/
+/*	$NetBSD: nonints.h,v 1.144 2020/10/18 20:14:27 rillig Exp $	*/
 
 /*-
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -133,10 +133,7 @@ typedef enum VarAssignOp {
 } VarAssignOp;
 
 typedef struct VarAssign {
-    const char *nameStart;	/* unexpanded */
-    const char *nameEndDraft;	/* before operator adjustment */
-    char *varname;
-    const char *eq;		/* the '=' of the assignment operator */
+    char *varname;		/* unexpanded */
     VarAssignOp op;
     const char *value;		/* unexpanded */
 } VarAssign;

Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.388 src/usr.bin/make/parse.c:1.389
--- src/usr.bin/make/parse.c:1.388	Sun Oct 18 20:07:26 2020
+++ src/usr.bin/make/parse.c	Sun Oct 18 20:14:27 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.388 2020/10/18 20:07:26 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.389 2020/10/18 20:14:27 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -131,7 +131,7 @@
 #include "pathnames.h"
 
 /*	"@(#)parse.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: parse.c,v 1.388 2020/10/18 20:07:26 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.389 2020/10/18 20:14:27 rillig Exp $");
 
 /* types and constants */
 
@@ -1753,13 +1753,20 @@ out:
 	Lst_Free(curTargs);
 }
 
+typedef struct VarAssignParsed {
+    const char *nameStart;	/* unexpanded */
+    const char *nameEnd;	/* before operator adjustment */
+    const char *eq;		/* the '=' of the assignment operator */
+} VarAssignParsed;
+
 /* Determine the assignment operator and adjust the end of the variable
  * name accordingly. */
 static void
-ParseVarassignOp(VarAssign *var)
+AdjustVarassignOp(const VarAssignParsed *pvar, const char *value,
+		  VarAssign *out_var)
 {
-    const char *op = var->eq;
-    const char * const name = var->nameStart;
+    const char *op = pvar->eq;
+    const char * const name = pvar->nameStart;
     VarAssignOp type;
 
     if (op > name && op[-1] == '+') {
@@ -1792,9 +1799,10 @@ ParseVarassignOp(VarAssign *var)
     }
 
     {
-	const char *nameEnd = var->nameEndDraft < op ? var->nameEndDraft : op;
-	var->varname = bmake_strsedup(var->nameStart, nameEnd);
-	var->op = type;
+	const char *nameEnd = pvar->nameEnd < op ? pvar->nameEnd : op;
+	out_var->varname = bmake_strsedup(pvar->nameStart, nameEnd);
+	out_var->op = type;
+	out_var->value = value;
     }
 }
 
@@ -1806,6 +1814,7 @@ ParseVarassignOp(VarAssign *var)
 Boolean
 Parse_IsVar(const char *p, VarAssign *out_var)
 {
+    VarAssignParsed pvar;
     const char *firstSpace = NULL;
     char ch;
     int level = 0;
@@ -1818,13 +1827,10 @@ Parse_IsVar(const char *p, VarAssign *ou
      * as part of the variable name.  It is later corrected, as is the ':sh'
      * modifier. Of these two (nameEnd and op), the earlier one determines the
      * actual end of the variable name. */
-    out_var->nameStart = p;
+    pvar.nameStart = p;
 #ifdef CLEANUP
-    out_var->nameEndDraft = NULL;
-    out_var->varname = NULL;
-    out_var->eq = NULL;
-    out_var->op = VAR_NORMAL;
-    out_var->value = NULL;
+    pvar.nameEnd = NULL;
+    pvar.eq = NULL;
 #endif
 
     /* Scan for one of the assignment operators outside a variable expansion */
@@ -1854,22 +1860,18 @@ Parse_IsVar(const char *p, VarAssign *ou
 	}
 #endif
 	if (ch == '=') {
-	    out_var->eq = p - 1;
-	    out_var->nameEndDraft = firstSpace != NULL ? firstSpace : p - 1;
-	    out_var->op = VAR_NORMAL;
+	    pvar.eq = p - 1;
+	    pvar.nameEnd = firstSpace != NULL ? firstSpace : p - 1;
 	    cpp_skip_whitespace(&p);
-	    out_var->value = p;
+	    AdjustVarassignOp(&pvar, p, out_var);
 	    return TRUE;
 	}
 	if (*p == '=' && (ch == '+' || ch == ':' || ch == '?' || ch == '!')) {
-	    out_var->eq = p;
-	    out_var->nameEndDraft = firstSpace != NULL ? firstSpace : p;
-	    out_var->op = ch == '+' ? VAR_APPEND :
-			  ch == ':' ? VAR_SUBST :
-			  ch == '?' ? VAR_DEFAULT : VAR_SHELL;
+	    pvar.eq = p;
+	    pvar.nameEnd = firstSpace != NULL ? firstSpace : p;
 	    p++;
 	    cpp_skip_whitespace(&p);
-	    out_var->value = p;
+	    AdjustVarassignOp(&pvar, p, out_var);
 	    return TRUE;
 	}
 	if (firstSpace != NULL)
@@ -2013,8 +2015,6 @@ Parse_DoVar(VarAssign *var, GNode *ctxt)
     const char *avalue;		/* actual value (maybe expanded) */
     void *avalue_freeIt;
 
-    ParseVarassignOp(var);
-
     VarCheckSyntax(var->op, var->value, ctxt);
     if (VarAssign_Eval(var, ctxt, &avalue, &avalue_freeIt))
 	VarAssignSpecial(var->varname, avalue);

Reply via email to