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);