Module Name: src
Committed By: rillig
Date: Sat Aug 22 13:06:40 UTC 2020
Modified Files:
src/usr.bin/make: lst.c lst.h make.c
Log Message:
make(1): make Make_HandleUse simpler
Since the function names now contain the text from the comments, the
comments can be shortened a bit.
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/usr.bin/make/lst.c
cvs rdiff -u -r1.28 -r1.29 src/usr.bin/make/lst.h
cvs rdiff -u -r1.111 -r1.112 src/usr.bin/make/make.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/lst.c
diff -u src/usr.bin/make/lst.c:1.21 src/usr.bin/make/lst.c:1.22
--- src/usr.bin/make/lst.c:1.21 Sat Aug 22 09:40:18 2020
+++ src/usr.bin/make/lst.c Sat Aug 22 13:06:39 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lst.c,v 1.21 2020/08/22 09:40:18 rillig Exp $ */
+/* $NetBSD: lst.c,v 1.22 2020/08/22 13:06:39 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -37,11 +37,11 @@
#include "make.h"
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: lst.c,v 1.21 2020/08/22 09:40:18 rillig Exp $";
+static char rcsid[] = "$NetBSD: lst.c,v 1.22 2020/08/22 13:06:39 rillig Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
-__RCSID("$NetBSD: lst.c,v 1.21 2020/08/22 09:40:18 rillig Exp $");
+__RCSID("$NetBSD: lst.c,v 1.22 2020/08/22 13:06:39 rillig Exp $");
#endif /* not lint */
#endif
@@ -83,12 +83,14 @@ LstNodeIsValid(LstNode node)
return node != NULL;
}
+/* Allocate and initialize a list node.
+ *
+ * The fields 'prev' and 'next' must be initialized by the caller.
+ */
static LstNode
LstNodeNew(void *datum)
{
LstNode node = bmake_malloc(sizeof *node);
- /* prev will be initialized by the calling code. */
- /* next will be initialized by the calling code. */
node->useCount = 0;
node->deleted = FALSE;
node->datum = datum;
@@ -280,6 +282,28 @@ Lst_AtEnd(Lst list, void *datum)
return Lst_InsertAfter(list, end, datum);
}
+/* Add a piece of data at the start of the given list. */
+void
+Lst_PrependS(Lst list, void *datum)
+{
+ LstNode node;
+
+ assert(LstIsValid(list));
+ assert(datum != NULL);
+
+ node = LstNodeNew(datum);
+ node->prev = NULL;
+ node->next = list->first;
+
+ if (list->first == NULL) {
+ list->first = node;
+ list->last = node;
+ } else {
+ list->first->prev = node;
+ list->first = node;
+ }
+}
+
/* Add a piece of data at the end of the given list. */
void
Lst_AppendS(Lst list, void *datum)
@@ -640,6 +664,23 @@ Lst_Concat(Lst list1, Lst list2, int fla
return SUCCESS;
}
+/* Copy the element data from src to the start of dst. */
+void
+Lst_PrependAllS(Lst dst, Lst src)
+{
+ LstNode node;
+ for (node = src->last; node != NULL; node = node->prev)
+ Lst_PrependS(dst, node->datum);
+}
+
+/* Copy the element data from src to the end of dst. */
+void
+Lst_AppendAllS(Lst dst, Lst src)
+{
+ LstNode node;
+ for (node = src->first; node != NULL; node = node->next)
+ Lst_AppendS(dst, node->datum);
+}
/*
* these functions are for dealing with a list as a table, of sorts.
Index: src/usr.bin/make/lst.h
diff -u src/usr.bin/make/lst.h:1.28 src/usr.bin/make/lst.h:1.29
--- src/usr.bin/make/lst.h:1.28 Sat Aug 22 09:40:18 2020
+++ src/usr.bin/make/lst.h Sat Aug 22 13:06:39 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: lst.h,v 1.28 2020/08/22 09:40:18 rillig Exp $ */
+/* $NetBSD: lst.h,v 1.29 2020/08/22 13:06:39 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -119,6 +119,7 @@ ReturnStatus Lst_InsertBefore(Lst, LstNo
ReturnStatus Lst_InsertAfter(Lst, LstNode, void *);
/* Place an element at the front of a lst. */
ReturnStatus Lst_AtFront(Lst, void *);
+void Lst_PrependS(Lst, void *);
/* Place an element at the end of a lst. */
ReturnStatus Lst_AtEnd(Lst, void *);
void Lst_AppendS(Lst, void *);
@@ -128,6 +129,8 @@ void Lst_RemoveS(Lst, LstNode);
void Lst_ReplaceS(LstNode, void *);
/* Concatenate two lists */
ReturnStatus Lst_Concat(Lst, Lst, int);
+void Lst_PrependAllS(Lst, Lst);
+void Lst_AppendAllS(Lst, Lst);
/*
* Node-specific functions
Index: src/usr.bin/make/make.c
diff -u src/usr.bin/make/make.c:1.111 src/usr.bin/make/make.c:1.112
--- src/usr.bin/make/make.c:1.111 Sat Aug 22 11:57:18 2020
+++ src/usr.bin/make/make.c Sat Aug 22 13:06:39 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: make.c,v 1.111 2020/08/22 11:57:18 rillig Exp $ */
+/* $NetBSD: make.c,v 1.112 2020/08/22 13:06:39 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: make.c,v 1.111 2020/08/22 11:57:18 rillig Exp $";
+static char rcsid[] = "$NetBSD: make.c,v 1.112 2020/08/22 13:06:39 rillig Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)make.c 8.1 (Berkeley) 6/6/93";
#else
-__RCSID("$NetBSD: make.c,v 1.111 2020/08/22 11:57:18 rillig Exp $");
+__RCSID("$NetBSD: make.c,v 1.112 2020/08/22 13:06:39 rillig Exp $");
#endif
#endif /* not lint */
#endif
@@ -439,21 +439,11 @@ Make_HandleUse(GNode *cgn, GNode *pgn)
if ((cgn->type & (OP_USE|OP_USEBEFORE)) || Lst_IsEmpty(pgn->commands)) {
if (cgn->type & OP_USEBEFORE) {
- /*
- * .USEBEFORE --
- * prepend the child's commands to the parent.
- */
- LstNode node;
- for (node = Lst_Last(cgn->commands);
- node != NULL;
- node = Lst_Prev(node))
- Lst_AtFront(pgn->commands, Lst_Datum(node));
+ /* .USEBEFORE */
+ Lst_PrependAllS(pgn->commands, cgn->commands);
} else {
- /*
- * .USE or target has no commands --
- * append the child's commands to the parent.
- */
- (void)Lst_Concat(pgn->commands, cgn->commands, LST_CONCNEW);
+ /* .USE, or target has no commands */
+ Lst_AppendAllS(pgn->commands, cgn->commands);
}
}