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): only set missing_delim if it is actual...
details: https://anonhg.NetBSD.org/src/rev/7746ab962bcc
branches: trunk
changeset: 936277:7746ab962bcc
user: rillig <rillig%NetBSD.org@localhost>
date: Thu Jul 23 20:24:22 2020 +0000
description:
make(1): only set missing_delim if it is actually missing
Just to make it easier to understand the code.
diffstat:
usr.bin/make/var.c | 117 +++++++++++++++++++++++++++++-----------------------
1 files changed, 66 insertions(+), 51 deletions(-)
diffs (283 lines):
diff -r 330c27badf3c -r 7746ab962bcc usr.bin/make/var.c
--- a/usr.bin/make/var.c Thu Jul 23 19:49:39 2020 +0000
+++ b/usr.bin/make/var.c Thu Jul 23 20:24:22 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.297 2020/07/23 19:49:39 rillig Exp $ */
+/* $NetBSD: var.c,v 1.298 2020/07/23 20:24:22 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.297 2020/07/23 19:49:39 rillig Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.298 2020/07/23 20:24:22 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.297 2020/07/23 19:49:39 rillig Exp $");
+__RCSID("$NetBSD: var.c,v 1.298 2020/07/23 20:24:22 rillig Exp $");
#endif
#endif /* not lint */
#endif
@@ -2086,7 +2086,7 @@
const char *cp; /* Secondary pointer into str (place marker
* for tstr) */
char termc; /* Character which terminated scan */
- char delim;
+ char missing_delim; /* For error reporting */
int modifier; /* that we are processing */
Var_Parse_State parsestate; /* Flags passed to helper functions */
@@ -2109,21 +2109,24 @@
args.ctx = st->ctxt;
st->cp = ++st->tstr;
- st->delim = '@';
- args.tvar = ParseModifierPart(st->ctxt, &st->cp, st->delim,
+ char delim = '@';
+ args.tvar = ParseModifierPart(st->ctxt, &st->cp, delim,
st->eflags | VARE_NOSUBST,
NULL, NULL, NULL);
- if (args.tvar == NULL)
+ if (args.tvar == NULL) {
+ st->missing_delim = delim;
return FALSE;
-
- args.str = ParseModifierPart(st->ctxt, &st->cp, st->delim,
+ }
+
+ args.str = ParseModifierPart(st->ctxt, &st->cp, delim,
st->eflags | VARE_NOSUBST,
NULL, NULL, NULL);
- if (args.str == NULL)
+ if (args.str == NULL) {
+ st->missing_delim = delim;
return FALSE;
+ }
st->termc = *st->cp;
- st->delim = '\0';
args.eflags = st->eflags & (VARE_UNDEFERR | VARE_WANTRES);
int prev_sep = st->parsestate.varSpace;
@@ -2286,12 +2289,14 @@
static Boolean
ApplyModifier_Exclam(ApplyModifiersState *st)
{
- st->delim = '!';
st->cp = ++st->tstr;
- char *cmd = ParseModifierPart(st->ctxt, &st->cp, st->delim, st->eflags,
+ char delim = '!';
+ char *cmd = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
NULL, NULL, NULL);
- if (cmd == NULL)
+ if (cmd == NULL) {
+ st->missing_delim = delim;
return FALSE;
+ }
const char *emsg = NULL;
if (st->eflags & VARE_WANTRES)
@@ -2304,7 +2309,6 @@
Error(emsg, st->nstr);
st->termc = *st->cp;
- st->delim = '\0';
if (st->v->flags & VAR_JUNK)
st->v->flags |= VAR_KEEP;
return TRUE;
@@ -2419,7 +2423,7 @@
{
ModifyWord_SubstArgs args;
Var_Parse_State tmpparsestate = st->parsestate;
- st->delim = st->tstr[1];
+ char delim = st->tstr[1];
st->tstr += 2;
/*
@@ -2433,16 +2437,20 @@
}
st->cp = st->tstr;
- char *lhs = ParseModifierPart(st->ctxt, &st->cp, st->delim, st->eflags,
+ char *lhs = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
&args.pflags, &args.lhsLen, NULL);
- if (lhs == NULL)
+ if (lhs == NULL) {
+ st->missing_delim = delim;
return FALSE;
+ }
args.lhs = lhs;
- char *rhs = ParseModifierPart(st->ctxt, &st->cp, st->delim, st->eflags,
+ char *rhs = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
NULL, &args.rhsLen, &args);
- if (rhs == NULL)
+ if (rhs == NULL) {
+ st->missing_delim = delim;
return FALSE;
+ }
args.rhs = rhs;
/*
@@ -2471,7 +2479,6 @@
free(lhs);
free(rhs);
- st->delim = '\0';
return TRUE;
}
@@ -2493,7 +2500,7 @@
char *re = ParseModifierPart(st->ctxt, &st->cp, delim,
st->eflags, NULL, NULL, NULL);
if (re == NULL) {
- st->delim = delim;
+ st->missing_delim = delim;
return FALSE;
}
@@ -2501,7 +2508,7 @@
st->eflags, NULL, NULL, NULL);
if (args.replace == NULL) {
free(re);
- st->delim = delim;
+ st->missing_delim = delim;
return FALSE;
}
@@ -2658,14 +2665,15 @@
ApplyModifier_Words(ApplyModifiersState *st)
{
st->cp = st->tstr + 1; /* point to char after '[' */
- st->delim = ']'; /* look for closing ']' */
- char *estr = ParseModifierPart(st->ctxt, &st->cp, st->delim, st->eflags,
+ char delim = ']'; /* look for closing ']' */
+ char *estr = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
NULL, NULL, NULL);
- if (estr == NULL)
- return 'c'; /* missing ']' */
+ if (estr == NULL) {
+ st->missing_delim = delim;
+ return 'c';
+ }
/* now st->cp points just after the closing ']' */
- st->delim = '\0';
if (st->cp[0] != ':' && st->cp[0] != st->endc)
goto bad_modifier; /* Found junk after ']' */
@@ -2802,20 +2810,23 @@
}
st->cp = ++st->tstr;
- st->delim = ':';
+ char delim = ':';
char *then_expr = ParseModifierPart(
- st->ctxt, &st->cp, st->delim, then_eflags, NULL, NULL, NULL);
- if (then_expr == NULL)
+ st->ctxt, &st->cp, delim, then_eflags, NULL, NULL, NULL);
+ if (then_expr == NULL) {
+ st->missing_delim = delim;
return FALSE;
-
- st->delim = st->endc; /* BRCLOSE or PRCLOSE */
+ }
+
+ delim = st->endc; /* BRCLOSE or PRCLOSE */
char *else_expr = ParseModifierPart(
- st->ctxt, &st->cp, st->delim, else_eflags, NULL, NULL, NULL);
- if (else_expr == NULL)
+ st->ctxt, &st->cp, delim, else_eflags, NULL, NULL, NULL);
+ if (else_expr == NULL) {
+ st->missing_delim = delim;
return FALSE;
+ }
st->termc = *--st->cp;
- st->delim = '\0';
if (cond_rc == COND_INVALID) {
Error("Bad conditional expression `%s' in %s?%s:%s",
st->v->name, st->v->name, then_expr, else_expr);
@@ -2896,21 +2907,22 @@
st->cp = ++st->tstr;
break;
}
- st->delim = st->startc == PROPEN ? PRCLOSE : BRCLOSE;
-
+
+ char delim = st->startc == PROPEN ? PRCLOSE : BRCLOSE;
VarEvalFlags eflags = (st->eflags & VARE_WANTRES) ? 0 : VARE_NOSUBST;
- char *val = ParseModifierPart(st->ctxt, &st->cp, st->delim,
+ char *val = ParseModifierPart(st->ctxt, &st->cp, delim,
st->eflags | eflags, NULL, NULL, NULL);
if (st->v->flags & VAR_JUNK) {
/* restore original name */
free(st->v->name);
st->v->name = sv_name;
}
- if (val == NULL)
+ if (val == NULL) {
+ st->missing_delim = delim;
return 'c';
+ }
st->termc = *--st->cp;
- st->delim = '\0';
if (st->eflags & VARE_WANTRES) {
switch (op[0]) {
@@ -2996,25 +3008,28 @@
if (*st->cp != st->endc || !eqFound)
return 0;
- st->delim = '=';
+ char delim = '=';
st->cp = st->tstr;
- char *lhs = ParseModifierPart(st->ctxt, &st->cp, st->delim, st->eflags,
+ char *lhs = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
NULL, NULL, NULL);
- if (lhs == NULL)
+ if (lhs == NULL) {
+ st->missing_delim = delim;
return 'c';
-
- st->delim = st->endc;
- char *rhs = ParseModifierPart(st->ctxt, &st->cp, st->delim, st->eflags,
+ }
+
+ delim = st->endc;
+ char *rhs = ParseModifierPart(st->ctxt, &st->cp, delim, st->eflags,
NULL, NULL, NULL);
- if (rhs == NULL)
+ if (rhs == NULL) {
+ st->missing_delim = delim;
return 'c';
+ }
/*
* SYSV modifications happen through the whole
* string. Note the pattern is anchored at the end.
*/
st->termc = *--st->cp;
- st->delim = '\0';
if (lhs[0] == '\0' && *st->nstr == '\0') {
st->newStr = st->nstr; /* special case */
} else {
@@ -3380,9 +3395,9 @@
cleanup:
*st.lengthPtr = st.cp - st.start;
- if (st.delim != '\0')
+ if (st.missing_delim != '\0')
Error("Unclosed substitution for %s (%c missing)",
- st.v->name, st.delim);
+ st.v->name, st.missing_delim);
free(*st.freePtr);
*st.freePtr = NULL;
return var_Error;
Home |
Main Index |
Thread Index |
Old Index