Module Name: src
Committed By: rillig
Date: Sat Sep 24 16:13:48 UTC 2022
Modified Files:
src/usr.bin/make: cond.c make.h parse.c
Log Message:
make: clean up tracking of depth of nested .if directives
The variable cond_min_depth was redundant. It was only accessed while
parsing the makefiles. Merging it into struct IncludedFile removes the
possible confusion between cond_min_depth and including_cond_min_depth.
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.341 -r1.342 src/usr.bin/make/cond.c
cvs rdiff -u -r1.306 -r1.307 src/usr.bin/make/make.h
cvs rdiff -u -r1.686 -r1.687 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/cond.c
diff -u src/usr.bin/make/cond.c:1.341 src/usr.bin/make/cond.c:1.342
--- src/usr.bin/make/cond.c:1.341 Sat Sep 24 10:26:31 2022
+++ src/usr.bin/make/cond.c Sat Sep 24 16:13:48 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: cond.c,v 1.341 2022/09/24 10:26:31 rillig Exp $ */
+/* $NetBSD: cond.c,v 1.342 2022/09/24 16:13:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -81,13 +81,9 @@
* of one of the .if directives or the condition in a
* ':?then:else' variable modifier.
*
- * Cond_PushMinDepth
- * Cond_PopMinDepth
- * Cond_ResetDepth
- * Save and restore the nesting of the conditions, at
- * the start and end of including another makefile, to
- * ensure that in each makefile the conditional
- * directives are well-balanced.
+ * Cond_EndFile
+ * At the end of reading a makefile, ensure that the
+ * conditional directives are well-balanced.
*/
#include <errno.h>
@@ -96,7 +92,7 @@
#include "dir.h"
/* "@(#)cond.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: cond.c,v 1.341 2022/09/24 10:26:31 rillig Exp $");
+MAKE_RCSID("$NetBSD: cond.c,v 1.342 2022/09/24 16:13:48 rillig Exp $");
/*
* Conditional expressions conform to this grammar:
@@ -179,8 +175,7 @@ typedef struct CondParser {
static CondResult CondParser_Or(CondParser *par, bool);
-static unsigned int cond_depth = 0; /* current .if nesting level */
-static unsigned int cond_min_depth = 0; /* depth at makefile open */
+unsigned int cond_depth = 0; /* current .if nesting level */
/* Names for ComparisonOp. */
static const char opname[][3] = { "<", "<=", ">", ">=", "==", "!=" };
@@ -1138,7 +1133,7 @@ Cond_EvalLine(const char *line)
"The .endif directive does not take arguments");
}
- if (cond_depth == cond_min_depth) {
+ if (cond_depth == CurFile_CondMinDepth()) {
Parse_Error(PARSE_FATAL, "if-less endif");
return CR_TRUE;
}
@@ -1168,7 +1163,7 @@ Cond_EvalLine(const char *line)
"The .else directive "
"does not take arguments");
- if (cond_depth == cond_min_depth) {
+ if (cond_depth == CurFile_CondMinDepth()) {
Parse_Error(PARSE_FATAL, "if-less else");
return CR_TRUE;
}
@@ -1203,7 +1198,7 @@ Cond_EvalLine(const char *line)
return CR_ERROR;
if (isElif) {
- if (cond_depth == cond_min_depth) {
+ if (cond_depth == CurFile_CondMinDepth()) {
Parse_Error(PARSE_FATAL, "if-less elif");
return CR_TRUE;
}
@@ -1256,36 +1251,14 @@ Cond_EvalLine(const char *line)
return res;
}
-unsigned int
-Cond_PushMinDepth(void)
-{
- unsigned int depth = cond_min_depth;
-
- cond_min_depth = cond_depth;
- return depth;
-}
-
void
-Cond_PopMinDepth(unsigned int saved_depth)
+Cond_EndFile(void)
{
- unsigned int open_conds = cond_depth - cond_min_depth;
+ unsigned int open_conds = cond_depth - CurFile_CondMinDepth();
- assert(saved_depth <= cond_depth);
if (open_conds != 0) {
Parse_Error(PARSE_FATAL, "%u open conditional%s",
open_conds, open_conds == 1 ? "" : "s");
- cond_depth = cond_min_depth;
+ cond_depth = CurFile_CondMinDepth();
}
-
- cond_min_depth = saved_depth;
-}
-
-/*
- * When breaking out of a .for loop, restore cond_depth to where it was when
- * the loop started.
- */
-void
-Cond_ResetDepth(void)
-{
- cond_depth = cond_min_depth;
}
Index: src/usr.bin/make/make.h
diff -u src/usr.bin/make/make.h:1.306 src/usr.bin/make/make.h:1.307
--- src/usr.bin/make/make.h:1.306 Sat Sep 24 10:26:31 2022
+++ src/usr.bin/make/make.h Sat Sep 24 16:13:48 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.306 2022/09/24 10:26:31 rillig Exp $ */
+/* $NetBSD: make.h,v 1.307 2022/09/24 16:13:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -797,11 +797,10 @@ void Compat_MakeAll(GNodeList *);
void Compat_Make(GNode *, GNode *);
/* cond.c */
+extern unsigned int cond_depth;
CondResult Cond_EvalCondition(const char *) MAKE_ATTR_USE;
CondResult Cond_EvalLine(const char *) MAKE_ATTR_USE;
-unsigned int Cond_PushMinDepth(void) MAKE_ATTR_USE;
-void Cond_PopMinDepth(unsigned int);
-void Cond_ResetDepth(void);
+void Cond_EndFile(void);
/* dir.c; see also dir.h */
@@ -864,6 +863,7 @@ void Parse_PushInput(const char *, unsig
struct ForLoop *);
void Parse_MainName(GNodeList *);
int Parse_NumErrors(void) MAKE_ATTR_USE;
+unsigned int CurFile_CondMinDepth(void) MAKE_ATTR_USE;
/* suff.c */
Index: src/usr.bin/make/parse.c
diff -u src/usr.bin/make/parse.c:1.686 src/usr.bin/make/parse.c:1.687
--- src/usr.bin/make/parse.c:1.686 Sat Sep 24 16:09:04 2022
+++ src/usr.bin/make/parse.c Sat Sep 24 16:13:48 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.686 2022/09/24 16:09:04 rillig Exp $ */
+/* $NetBSD: parse.c,v 1.687 2022/09/24 16:13:48 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -105,7 +105,7 @@
#include "pathnames.h"
/* "@(#)parse.c 8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: parse.c,v 1.686 2022/09/24 16:09:04 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.687 2022/09/24 16:13:48 rillig Exp $");
/*
* A file being read.
@@ -119,9 +119,8 @@ typedef struct IncludedFile {
unsigned forBodyReadLines; /* the number of physical lines that have
* been read from the file above the body of
* the .for loop */
- unsigned int including_cond_min_depth; /* depth of nested 'if'
- * directives, at the point where the
- * including file was opened */
+ unsigned int condMinDepth; /* depth of nested 'if' directives, at the
+ * beginning of the file */
bool depending; /* state of doing_depend on EOF */
Buffer buf; /* the file's content or the body of the .for
@@ -311,6 +310,12 @@ CurFile(void)
return GetInclude(includes.len - 1);
}
+unsigned int
+CurFile_CondMinDepth(void)
+{
+ return CurFile()->condMinDepth;
+}
+
static Buffer
LoadFile(const char *path, int fd)
{
@@ -2142,7 +2147,7 @@ Parse_PushInput(const char *name, unsign
curFile->buf_ptr = curFile->buf.data;
curFile->buf_end = curFile->buf.data + curFile->buf.len;
- curFile->including_cond_min_depth = Cond_PushMinDepth();
+ curFile->condMinDepth = cond_depth;
SetParseFile(name);
}
@@ -2275,11 +2280,7 @@ ParseEOF(void)
return true;
}
- /*
- * Ensure the makefile (or .for loop) didn't have mismatched
- * conditionals.
- */
- Cond_PopMinDepth(curFile->including_cond_min_depth);
+ Cond_EndFile();
FStr_Done(&curFile->name);
Buf_Done(&curFile->buf);
@@ -2672,7 +2673,7 @@ HandleBreak(void)
if (curFile->forLoop != NULL) {
/* pretend we reached EOF */
For_Break(curFile->forLoop);
- Cond_ResetDepth();
+ cond_depth = CurFile_CondMinDepth();
ParseEOF();
} else
Parse_Error(PARSE_FATAL, "break outside of for loop");