Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make make(1): reduce memory allocations for parsing ...



details:   https://anonhg.NetBSD.org/src/rev/e65fb623b775
branches:  trunk
changeset: 1016726:e65fb623b775
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Nov 29 01:35:33 2020 +0000

description:
make(1): reduce memory allocations for parsing dependencies

diffstat:

 usr.bin/make/parse.c |  29 +++++++++++++----------------
 1 files changed, 13 insertions(+), 16 deletions(-)

diffs (86 lines):

diff -r f9942d74f514 -r e65fb623b775 usr.bin/make/parse.c
--- a/usr.bin/make/parse.c      Sun Nov 29 01:30:38 2020 +0000
+++ b/usr.bin/make/parse.c      Sun Nov 29 01:35:33 2020 +0000
@@ -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 @@
        }
 
        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 @@
     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 @@
 
     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 @@
 out:
     if (paths != NULL)
        Lst_Free(paths);
-    if (curTargs != NULL)
-       Lst_Free(curTargs);
+    Lst_Done(&curTargs);
 }
 
 typedef struct VarAssignParsed {



Home | Main Index | Thread Index | Old Index