Module Name:    src
Committed By:   rillig
Date:           Sun Nov 29 01:35:33 UTC 2020

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

Log Message:
make(1): reduce memory allocations for parsing dependencies


To generate a diff of this commit:
cvs rdiff -u -r1.461 -r1.462 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/parse.c
diff -u src/usr.bin/make/parse.c:1.461 src/usr.bin/make/parse.c:1.462
--- src/usr.bin/make/parse.c:1.461	Sun Nov 29 00:04:22 2020
+++ src/usr.bin/make/parse.c	Sun Nov 29 01:35:33 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.461 2020/11/29 00:04:22 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.462 2020/11/29 01:35:33 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -117,7 +117,7 @@
 #include "pathnames.h"
 
 /*	"@(#)parse.c	8.3 (Berkeley) 3/19/94"	*/
-MAKE_RCSID("$NetBSD: parse.c,v 1.461 2020/11/29 00:04:22 rillig Exp $");
+MAKE_RCSID("$NetBSD: parse.c,v 1.462 2020/11/29 01:35:33 rillig Exp $");
 
 /* types and constants */
 
@@ -1553,18 +1553,18 @@ ParseDoDependencySourcesMundane(char *st
 	}
 
 	if (*end == '(') {
-	    GNodeList *sources = Lst_New();
-	    if (!Arch_ParseArchive(&start, sources, VAR_CMDLINE)) {
+	    GNodeList sources = LST_INIT;
+	    if (!Arch_ParseArchive(&start, &sources, VAR_CMDLINE)) {
 		Parse_Error(PARSE_FATAL,
 			    "Error in source archive spec \"%s\"", start);
 		return FALSE;
 	    }
 
-	    while (!Lst_IsEmpty(sources)) {
-		GNode *gn = Lst_Dequeue(sources);
+	    while (!Lst_IsEmpty(&sources)) {
+		GNode *gn = Lst_Dequeue(&sources);
 		ParseDoSrc(tOp, gn->name, specType);
 	    }
-	    Lst_Free(sources);
+	    Lst_Done(&sources);
 	    end = start;
 	} else {
 	    if (*end != '\0') {
@@ -1614,8 +1614,8 @@ ParseDoDependency(char *line)
     SearchPathList *paths;	/* search paths to alter when parsing
 				 * a list of .PATH targets */
     GNodeType tOp;		/* operator from special target */
-    StringList *curTargs;	/* target names to be found and added
-				 * to the targets list */
+    /* target names to be found and added to the targets list */
+    StringList curTargs = LST_INIT;
     char *lstart = line;
 
     /*
@@ -1630,19 +1630,17 @@ ParseDoDependency(char *line)
 
     paths = NULL;
 
-    curTargs = Lst_New();
-
     /*
      * First, grind through the targets.
      */
     if (!ParseDoDependencyTargets(&cp, &line, lstart, &specType, &tOp, &paths,
-				  curTargs))
+				  &curTargs))
 	goto out;
 
     /* Don't need the list of target names anymore.
      * The targets themselves are now in the global variable 'targets'. */
-    Lst_Free(curTargs);
-    curTargs = NULL;
+    Lst_Done(&curTargs);
+    Lst_Init(&curTargs);
 
     if (!Lst_IsEmpty(targets))
 	ParseDoDependencyCheckSpec(specType);
@@ -1722,8 +1720,7 @@ ParseDoDependency(char *line)
 out:
     if (paths != NULL)
 	Lst_Free(paths);
-    if (curTargs != NULL)
-	Lst_Free(curTargs);
+    Lst_Done(&curTargs);
 }
 
 typedef struct VarAssignParsed {

Reply via email to