Module Name:    src
Committed By:   rillig
Date:           Sun Nov 29 01:30:38 UTC 2020

Modified Files:
        src/usr.bin/make: suff.c

Log Message:
make(1): reduce memory allocations in suffix storage


To generate a diff of this commit:
cvs rdiff -u -r1.321 -r1.322 src/usr.bin/make/suff.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/suff.c
diff -u src/usr.bin/make/suff.c:1.321 src/usr.bin/make/suff.c:1.322
--- src/usr.bin/make/suff.c:1.321	Sun Nov 29 01:24:18 2020
+++ src/usr.bin/make/suff.c	Sun Nov 29 01:30:38 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: suff.c,v 1.321 2020/11/29 01:24:18 rillig Exp $	*/
+/*	$NetBSD: suff.c,v 1.322 2020/11/29 01:30:38 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -114,7 +114,7 @@
 #include "dir.h"
 
 /*	"@(#)suff.c	8.4 (Berkeley) 3/21/94"	*/
-MAKE_RCSID("$NetBSD: suff.c,v 1.321 2020/11/29 01:24:18 rillig Exp $");
+MAKE_RCSID("$NetBSD: suff.c,v 1.322 2020/11/29 01:30:38 rillig Exp $");
 
 #define SUFF_DEBUG0(text) DEBUG0(SUFF, text)
 #define SUFF_DEBUG1(fmt, arg1) DEBUG1(SUFF, fmt, arg1)
@@ -166,15 +166,15 @@ typedef struct Suffix {
     /* Reference count of list membership and several other places */
     int refCount;
     /* Suffixes we have a transformation to */
-    SuffixList *parents;
+    SuffixList parents;
     /* Suffixes we have a transformation from */
-    SuffixList *children;
+    SuffixList children;
 
     /* Lists in which this suffix is referenced.
      * XXX: These lists are used nowhere, they are just appended to, for no
      * apparent reason.  They do have the side effect of increasing refCount
      * though. */
-    SuffixListList *ref;
+    SuffixListList ref;
 } Suffix;
 
 /*
@@ -365,9 +365,9 @@ Suffix_Free(Suffix *suff)
 	     suff->name, suff->refCount);
 #endif
 
-    Lst_Free(suff->ref);
-    Lst_Free(suff->children);
-    Lst_Free(suff->parents);
+    Lst_Done(&suff->ref);
+    Lst_Done(&suff->children);
+    Lst_Done(&suff->parents);
     SearchPath_Free(suff->searchPath);
 
     free(suff->name);
@@ -411,12 +411,12 @@ SuffixList_Insert(SuffixList *list, Suff
 	SUFF_DEBUG2("inserting \"%s\" (%d) at end of list\n",
 		    suff->name, suff->sNum);
 	Lst_Append(list, Suffix_Ref(suff));
-	Lst_Append(suff->ref, list);
+	Lst_Append(&suff->ref, list);
     } else if (listSuff->sNum != suff->sNum) {
 	DEBUG4(SUFF, "inserting \"%s\" (%d) before \"%s\" (%d)\n",
 	       suff->name, suff->sNum, listSuff->name, listSuff->sNum);
 	Lst_InsertBefore(list, ln, Suffix_Ref(suff));
-	Lst_Append(suff->ref, list);
+	Lst_Append(&suff->ref, list);
     } else {
 	SUFF_DEBUG2("\"%s\" (%d) is already there\n", suff->name, suff->sNum);
     }
@@ -425,8 +425,8 @@ SuffixList_Insert(SuffixList *list, Suff
 static void
 Relate(Suffix *srcSuff, Suffix *targSuff)
 {
-    SuffixList_Insert(targSuff->children, srcSuff);
-    SuffixList_Insert(srcSuff->parents, targSuff);
+    SuffixList_Insert(&targSuff->children, srcSuff);
+    SuffixList_Insert(&srcSuff->parents, targSuff);
 }
 
 static Suffix *
@@ -437,9 +437,9 @@ Suffix_New(const char *name)
     suff->name = bmake_strdup(name);
     suff->nameLen = strlen(suff->name);
     suff->searchPath = SearchPath_New();
-    suff->children = Lst_New();
-    suff->parents = Lst_New();
-    suff->ref = Lst_New();
+    Lst_Init(&suff->children);
+    Lst_Init(&suff->parents);
+    Lst_Init(&suff->ref);
     suff->sNum = sNum++;
     suff->flags = 0;
     suff->refCount = 1; /* XXX: why 1? It's not assigned anywhere yet. */
@@ -629,8 +629,8 @@ Suff_EndTransform(GNode *gn)
 		srcSuff->name, targSuff->name);
 
     /* Remember parents since srcSuff could be deleted in SuffixList_Remove. */
-    srcSuffParents = srcSuff->parents;
-    SuffixList_Remove(targSuff->children, srcSuff);
+    srcSuffParents = &srcSuff->parents;
+    SuffixList_Remove(&targSuff->children, srcSuff);
     SuffixList_Remove(srcSuffParents, targSuff);
 }
 
@@ -989,7 +989,7 @@ static void
 CandidateList_AddCandidatesFor(CandidateList *list, Candidate *cand)
 {
     SuffixListNode *ln;
-    for (ln = cand->suff->children->first; ln != NULL; ln = ln->next) {
+    for (ln = cand->suff->children.first; ln != NULL; ln = ln->next) {
 	Suffix *suff = ln->datum;
 
 	if ((suff->flags & SUFF_NULL) && suff->name[0] != '\0') {
@@ -1159,7 +1159,7 @@ FindCmds(Candidate *targ, CandidateSearc
 	 * XXX: Handle multi-stage transformations here, too.
 	 */
 
-	if (Lst_FindDatum(suff->parents, targ->suff) != NULL)
+	if (Lst_FindDatum(&suff->parents, targ->suff) != NULL)
 	    break;
     }
 
@@ -1503,7 +1503,7 @@ ExpandMember(GNode *gn, const char *eoar
     size_t nameLen = (size_t)(eoarch - gn->name);
 
     /* Use first matching suffix... */
-    for (ln = memSuff->parents->first; ln != NULL; ln = ln->next)
+    for (ln = memSuff->parents.first; ln != NULL; ln = ln->next)
 	if (Suffix_IsSuffix(ln->datum, nameLen, eoarch))
 	    break;
 
@@ -2105,8 +2105,8 @@ Suffix_Print(Suffix *suff)
     }
     debug_printf("\n");
 
-    PrintSuffNames("To", suff->parents);
-    PrintSuffNames("From", suff->children);
+    PrintSuffNames("To", &suff->parents);
+    PrintSuffNames("From", &suff->children);
 
     debug_printf("#\tSearch Path: ");
     SearchPath_Print(suff->searchPath);

Reply via email to