summaryrefslogtreecommitdiff
path: root/for.c
diff options
context:
space:
mode:
Diffstat (limited to 'for.c')
-rw-r--r--for.c34
1 files changed, 7 insertions, 27 deletions
diff --git a/for.c b/for.c
index 91d9b8e13ce6..1563c2313963 100644
--- a/for.c
+++ b/for.c
@@ -1,4 +1,4 @@
-/* $NetBSD: for.c,v 1.179 2024/04/01 12:33:27 rillig Exp $ */
+/* $NetBSD: for.c,v 1.182 2024/06/07 18:57:30 rillig Exp $ */
/*
* Copyright (c) 1992, The Regents of the University of California.
@@ -58,7 +58,7 @@
#include "make.h"
/* "@(#)for.c 8.1 (Berkeley) 6/6/93" */
-MAKE_RCSID("$NetBSD: for.c,v 1.179 2024/04/01 12:33:27 rillig Exp $");
+MAKE_RCSID("$NetBSD: for.c,v 1.182 2024/06/07 18:57:30 rillig Exp $");
typedef struct ForLoop {
@@ -156,7 +156,8 @@ ForLoop_ParseVarnames(ForLoop *f, const char **pp)
cpp_skip_whitespace(&p);
if (*p == '\0') {
Parse_Error(PARSE_FATAL, "missing `in' in for");
- f->vars.len = 0;
+ while (f->vars.len > 0)
+ free(*(char **)Vector_Pop(&f->vars));
return;
}
@@ -166,7 +167,8 @@ ForLoop_ParseVarnames(ForLoop *f, const char **pp)
"invalid character '%c' "
"in .for loop variable name",
p[len]);
- f->vars.len = 0;
+ while (f->vars.len > 0)
+ free(*(char **)Vector_Pop(&f->vars));
return;
}
}
@@ -195,7 +197,7 @@ ForLoop_ParseItems(ForLoop *f, const char *p)
cpp_skip_whitespace(&p);
- items = Var_Subst(p, SCOPE_GLOBAL, VARE_WANTRES);
+ items = Var_Subst(p, SCOPE_GLOBAL, VARE_EVAL);
/* TODO: handle errors */
f->items = Substring_Words(items, false);
@@ -330,23 +332,6 @@ ExprLen(const char *s, const char *e)
}
/*
- * The .for loop substitutes the items as ${:U<value>...}, which means
- * that characters that break this syntax must be backslash-escaped.
- */
-static bool
-NeedsEscapes(Substring value, char endc)
-{
- const char *p;
-
- for (p = value.start; p != value.end; p++) {
- if (*p == ':' || *p == '$' || *p == '\\' || *p == endc ||
- *p == '\n')
- return true;
- }
- return false;
-}
-
-/*
* While expanding the body of a .for loop, write the item as a ${:U...}
* expression, escaping characters as needed. The result is later unescaped
* by ApplyModifier_Defined.
@@ -357,11 +342,6 @@ AddEscaped(Buffer *cmds, Substring item, char endc)
const char *p;
char ch;
- if (!NeedsEscapes(item, endc)) {
- Buf_AddRange(cmds, item.start, item.end);
- return;
- }
-
for (p = item.start; p != item.end;) {
ch = *p;
if (ch == '$') {