Author: jilles
Date: Tue Nov 24 22:47:19 2015
New Revision: 291267
URL: https://svnweb.freebsd.org/changeset/base/291267

Log:
  sh: Remove global state from nodes.c.
  
  No functional change is intended.

Modified:
  head/bin/sh/mknodes.c
  head/bin/sh/nodes.c.pat

Modified: head/bin/sh/mknodes.c
==============================================================================
--- head/bin/sh/mknodes.c       Tue Nov 24 19:55:11 2015        (r291266)
+++ head/bin/sh/mknodes.c       Tue Nov 24 22:47:19 2015        (r291267)
@@ -296,10 +296,10 @@ outfunc(FILE *cfile, int calcsize)
        else
                fputs("     return NULL;\n", cfile);
        if (calcsize)
-               fputs("      funcblocksize += nodesize[n->type];\n", cfile);
+               fputs("      result->blocksize += nodesize[n->type];\n", cfile);
        else {
-               fputs("      new = funcblock;\n", cfile);
-               fputs("      funcblock = (char *)funcblock + 
nodesize[n->type];\n", cfile);
+               fputs("      new = state->block;\n", cfile);
+               fputs("      state->block = (char *)state->block + 
nodesize[n->type];\n", cfile);
        }
        fputs("      switch (n->type) {\n", cfile);
        for (sp = str ; sp < &str[nstr] ; sp++) {
@@ -313,33 +313,33 @@ outfunc(FILE *cfile, int calcsize)
                        case T_NODE:
                                if (calcsize) {
                                        indent(12, cfile);
-                                       fprintf(cfile, "calcsize(n->%s.%s);\n",
+                                       fprintf(cfile, "calcsize(n->%s.%s, 
result);\n",
                                                sp->tag, fp->name);
                                } else {
                                        indent(12, cfile);
-                                       fprintf(cfile, "new->%s.%s = 
copynode(n->%s.%s);\n",
+                                       fprintf(cfile, "new->%s.%s = 
copynode(n->%s.%s, state);\n",
                                                sp->tag, fp->name, sp->tag, 
fp->name);
                                }
                                break;
                        case T_NODELIST:
                                if (calcsize) {
                                        indent(12, cfile);
-                                       fprintf(cfile, 
"sizenodelist(n->%s.%s);\n",
+                                       fprintf(cfile, "sizenodelist(n->%s.%s, 
result);\n",
                                                sp->tag, fp->name);
                                } else {
                                        indent(12, cfile);
-                                       fprintf(cfile, "new->%s.%s = 
copynodelist(n->%s.%s);\n",
+                                       fprintf(cfile, "new->%s.%s = 
copynodelist(n->%s.%s, state);\n",
                                                sp->tag, fp->name, sp->tag, 
fp->name);
                                }
                                break;
                        case T_STRING:
                                if (calcsize) {
                                        indent(12, cfile);
-                                       fprintf(cfile, "funcstringsize += 
strlen(n->%s.%s) + 1;\n",
+                                       fprintf(cfile, "result->stringsize += 
strlen(n->%s.%s) + 1;\n",
                                                sp->tag, fp->name);
                                } else {
                                        indent(12, cfile);
-                                       fprintf(cfile, "new->%s.%s = 
nodesavestr(n->%s.%s);\n",
+                                       fprintf(cfile, "new->%s.%s = 
nodesavestr(n->%s.%s, state);\n",
                                                sp->tag, fp->name, sp->tag, 
fp->name);
                                }
                                break;

Modified: head/bin/sh/nodes.c.pat
==============================================================================
--- head/bin/sh/nodes.c.pat     Tue Nov 24 19:55:11 2015        (r291266)
+++ head/bin/sh/nodes.c.pat     Tue Nov 24 22:47:19 2015        (r291267)
@@ -46,19 +46,24 @@
 #include "mystring.h"
 
 
-static int     funcblocksize;  /* size of structures in function */
-static int     funcstringsize; /* size of strings in node */
-static pointer funcblock;      /* block to allocate function from */
-static char   *funcstring;     /* block to allocate strings from */
+struct nodesize {
+       int     blocksize;      /* size of structures in function */
+       int     stringsize;     /* size of strings in node */
+};
+
+struct nodecopystate {
+       pointer block;          /* block to allocate function from */
+       char   *string;         /* block to allocate strings from */
+};
 
 %SIZES
 
 
-static void calcsize(union node *);
-static void sizenodelist(struct nodelist *);
-static union node *copynode(union node *);
-static struct nodelist *copynodelist(struct nodelist *);
-static char *nodesavestr(const char *);
+static void calcsize(union node *, struct nodesize *);
+static void sizenodelist(struct nodelist *, struct nodesize *);
+static union node *copynode(union node *, struct nodecopystate *);
+static struct nodelist *copynodelist(struct nodelist *, struct nodecopystate 
*);
+static char *nodesavestr(const char *, struct nodecopystate *);
 
 
 struct funcdef {
@@ -73,18 +78,20 @@ struct funcdef {
 struct funcdef *
 copyfunc(union node *n)
 {
+       struct nodesize sz;
+       struct nodecopystate st;
        struct funcdef *fn;
 
        if (n == NULL)
                return NULL;
-       funcblocksize = offsetof(struct funcdef, n);
-       funcstringsize = 0;
-       calcsize(n);
-       fn = ckmalloc(funcblocksize + funcstringsize);
+       sz.blocksize = offsetof(struct funcdef, n);
+       sz.stringsize = 0;
+       calcsize(n, &sz);
+       fn = ckmalloc(sz.blocksize + sz.stringsize);
        fn->refcount = 1;
-       funcblock = (char *)fn + offsetof(struct funcdef, n);
-       funcstring = (char *)fn + funcblocksize;
-       copynode(n);
+       st.block = (char *)fn + offsetof(struct funcdef, n);
+       st.string = (char *)fn + sz.blocksize;
+       copynode(n, &st);
        return fn;
 }
 
@@ -97,7 +104,7 @@ getfuncnode(struct funcdef *fn)
 
 
 static void
-calcsize(union node *n)
+calcsize(union node *n, struct nodesize *result)
 {
        %CALCSIZE
 }
@@ -105,11 +112,11 @@ calcsize(union node *n)
 
 
 static void
-sizenodelist(struct nodelist *lp)
+sizenodelist(struct nodelist *lp, struct nodesize *result)
 {
        while (lp) {
-               funcblocksize += ALIGN(sizeof(struct nodelist));
-               calcsize(lp->n);
+               result->blocksize += ALIGN(sizeof(struct nodelist));
+               calcsize(lp->n, result);
                lp = lp->next;
        }
 }
@@ -117,7 +124,7 @@ sizenodelist(struct nodelist *lp)
 
 
 static union node *
-copynode(union node *n)
+copynode(union node *n, struct nodecopystate *state)
 {
        union node *new;
 
@@ -127,16 +134,17 @@ copynode(union node *n)
 
 
 static struct nodelist *
-copynodelist(struct nodelist *lp)
+copynodelist(struct nodelist *lp, struct nodecopystate *state)
 {
        struct nodelist *start;
        struct nodelist **lpp;
 
        lpp = &start;
        while (lp) {
-               *lpp = funcblock;
-               funcblock = (char *)funcblock + ALIGN(sizeof(struct nodelist));
-               (*lpp)->n = copynode(lp->n);
+               *lpp = state->block;
+               state->block = (char *)state->block +
+                   ALIGN(sizeof(struct nodelist));
+               (*lpp)->n = copynode(lp->n, state);
                lp = lp->next;
                lpp = &(*lpp)->next;
        }
@@ -147,15 +155,15 @@ copynodelist(struct nodelist *lp)
 
 
 static char *
-nodesavestr(const char *s)
+nodesavestr(const char *s, struct nodecopystate *state)
 {
        const char *p = s;
-       char *q = funcstring;
-       char   *rtn = funcstring;
+       char *q = state->string;
+       char   *rtn = state->string;
 
        while ((*q++ = *p++) != '\0')
                continue;
-       funcstring = q;
+       state->string = q;
        return rtn;
 }
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to